lang_edx_spec.js 2.18 KB
Newer Older
1
/* global Language:true*/
2 3
(function() {
    'use strict';
4
    describe('Language change test for lang-edx.js', function() {
5 6 7
        var lang_selector,
            deferred;

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

14
        it('can spy on language selector change event', function() {
15 16 17 18 19
            spyOnEvent(lang_selector, 'change');
            lang_selector.trigger('change');
            expect('change').toHaveBeenTriggeredOn(lang_selector);
        });

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

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

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

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

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