define([
    'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
    'support/js/spec_helpers/enrollment_helpers',
    'support/js/models/enrollment'
], function(AjaxHelpers, EnrollmentHelpers, EnrollmentModel) {
    'use strict';

    describe('EnrollmentModel', function() {
        var enrollment;

        beforeEach(function() {
            enrollment = new EnrollmentModel(EnrollmentHelpers.mockEnrollmentData);
            enrollment.url = function() {
                return '/support/enrollment/test-user';
            };
        });

        it('can save an enrollment to the server and updates itself on success', function() {
            var requests = AjaxHelpers.requests(this),
                manual_enrollment = {
                    enrolled_by: 'staff@edx.org',
                    reason: 'Financial Assistance'
                };
            enrollment.updateEnrollment('verified', 'Financial Assistance');
            AjaxHelpers.expectJsonRequest(requests, 'POST', '/support/enrollment/test-user', {
                course_id: EnrollmentHelpers.TEST_COURSE,
                new_mode: 'verified',
                old_mode: 'audit',
                reason: 'Financial Assistance'
            });
            AjaxHelpers.respondWithJson(requests, manual_enrollment);
            expect(enrollment.get('mode')).toEqual('verified');
            expect(enrollment.get('manual_enrollment')).toEqual(manual_enrollment);
        });

        it('does not update itself on a server error', function() {
            var requests = AjaxHelpers.requests(this);
            enrollment.updateEnrollment('verified', 'Financial Assistance');
            AjaxHelpers.respondWithError(requests, 500);
            expect(enrollment.get('mode')).toEqual('audit');
            expect(enrollment.get('manual_enrollment')).toEqual({});
        });
    });
});
