lang_edx_spec.js 2.19 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/*global Language:true*/
(function() {
    'use strict';
    describe('Language change test for lang-edx.js', function () {

        var lang_selector,
            deferred;

        beforeEach(function () {
            loadFixtures('js/fixtures/lang-edx-fixture.html');
            lang_selector = $('#settings-language-value');
            deferred = $.Deferred();
        });

        it("can spy on language selector change event", function () {
            spyOnEvent(lang_selector, 'change');
            lang_selector.trigger('change');
            expect('change').toHaveBeenTriggeredOn(lang_selector);
        });

        it("should make an AJAX request to the correct URL", function () {
22
            spyOn($, 'ajax').and.returnValue(deferred);
23 24
            Language.init();
            lang_selector.trigger('change');
25
            expect($.ajax.calls.mostRecent().args[0].url).toEqual("/api/user/v1/preferences/test1/");
26 27 28
        });

        it("should make an AJAX request with correct type", function () {
29
            spyOn($, 'ajax').and.returnValue(deferred);
30 31
            Language.init();
            lang_selector.trigger('change');
32
            expect($.ajax.calls.mostRecent().args[0].type).toEqual("PATCH");
33 34 35
        });

        it("should make an AJAX request with correct data", function () {
36
            spyOn($, 'ajax').and.returnValue(deferred);
37 38 39
            Language.init();
            lang_selector.val('ar');
            lang_selector.trigger('change');
40
            expect($.ajax.calls.mostRecent().args[0].data).toEqual('{"pref-lang":"ar"}');
41 42 43 44

            // change to 'en' from 'ar'
            lang_selector.val('en');
            lang_selector.trigger('change');
45
            expect($.ajax.calls.mostRecent().args[0].data).toEqual('{"pref-lang":"en"}');
46 47 48
        });

        it("should call refresh on ajax failure", function () {
49
            spyOn($, 'ajax').and.callFake(function () {
50 51 52 53 54 55 56 57 58 59 60
                var d = $.Deferred();
                d.reject();
                return d.promise();
            });
            Language.init();
            spyOn(Language, 'refresh');
            lang_selector.trigger('change');
            expect(Language.refresh).toHaveBeenCalled();
        });
    });
}).call(this);