Files
edx-platform/cms/static/js/spec/views/pages/index_spec.js
Zia Fazal 2cb2233dde initial change set. add org autocomplete
added unit tests and fixed JS tests

added bok choy tests

fixed broken botchoy tests

fixed course discovery broken test

removed monkey patch at class level

changes after feedback from matte
2015-12-11 18:39:55 +05:00

154 lines
7.4 KiB
JavaScript

define(["jquery", "common/js/spec_helpers/ajax_helpers", "common/js/spec_helpers/view_helpers", "js/index",
"common/js/components/utils/view_utils"],
function ($, AjaxHelpers, ViewHelpers, IndexUtils, ViewUtils) {
describe("Course listing page", function () {
var mockIndexPageHTML = readFixtures('mock/mock-index-page.underscore');
var fillInFields = function (org, number, run, name) {
$('.new-course-org').val(org);
$('.new-course-number').val(number);
$('.new-course-run').val(run);
$('.new-course-name').val(name);
};
var fillInLibraryFields = function(org, number, name) {
$('.new-library-org').val(org).keyup();
$('.new-library-number').val(number).keyup();
$('.new-library-name').val(name).keyup();
};
beforeEach(function () {
ViewHelpers.installMockAnalytics();
appendSetFixtures(mockIndexPageHTML);
IndexUtils.onReady();
});
afterEach(function () {
ViewHelpers.removeMockAnalytics();
delete window.source_course_key;
});
it("can dismiss notifications", function () {
var requests = AjaxHelpers.requests(this);
var reloadSpy = spyOn(ViewUtils, 'reload');
$('.dismiss-button').click();
AjaxHelpers.expectJsonRequest(requests, 'DELETE', 'dummy_dismiss_url');
AjaxHelpers.respondWithNoContent(requests);
expect(reloadSpy).toHaveBeenCalled();
});
it("saves new courses", function () {
var requests = AjaxHelpers.requests(this);
var redirectSpy = spyOn(ViewUtils, 'redirect');
$('.new-course-button').click()
AjaxHelpers.expectJsonRequest(requests, 'GET', '/organizations');
AjaxHelpers.respondWithJson(requests, ['DemoX', 'DemoX2', 'DemoX3']);
fillInFields('DemoX', 'DM101', '2014', 'Demo course');
$('.new-course-save').click();
AjaxHelpers.expectJsonRequest(requests, 'POST', '/course/', {
org: 'DemoX',
number: 'DM101',
run: '2014',
display_name: 'Demo course'
});
AjaxHelpers.respondWithJson(requests, {
url: 'dummy_test_url'
});
expect(redirectSpy).toHaveBeenCalledWith('dummy_test_url');
$(".new-course-org").autocomplete("destroy");
});
it("displays an error when saving fails", function () {
var requests = AjaxHelpers.requests(this);
$('.new-course-button').click();
AjaxHelpers.expectJsonRequest(requests, 'GET', '/organizations');
AjaxHelpers.respondWithJson(requests, ['DemoX', 'DemoX2', 'DemoX3']);
fillInFields('DemoX', 'DM101', '2014', 'Demo course');
$('.new-course-save').click();
AjaxHelpers.respondWithJson(requests, {
ErrMsg: 'error message'
});
expect($('.create-course .wrap-error')).toHaveClass('is-shown');
expect($('#course_creation_error')).toContainText('error message');
expect($('.new-course-save')).toHaveClass('is-disabled');
expect($('.new-course-save')).toHaveAttr('aria-disabled', 'true');
$(".new-course-org").autocomplete("destroy");
});
it("saves new libraries", function () {
var requests = AjaxHelpers.requests(this);
var redirectSpy = spyOn(ViewUtils, 'redirect');
$('.new-library-button').click();
fillInLibraryFields('DemoX', 'DM101', 'Demo library');
$('.new-library-save').click();
AjaxHelpers.expectJsonRequest(requests, 'POST', '/library/', {
org: 'DemoX',
number: 'DM101',
display_name: 'Demo library'
});
AjaxHelpers.respondWithJson(requests, {
url: 'dummy_test_url'
});
expect(redirectSpy).toHaveBeenCalledWith('dummy_test_url');
});
it("displays an error when a required field is blank", function () {
var requests = AjaxHelpers.requests(this);
$('.new-library-button').click();
var values = ['DemoX', 'DM101', 'Demo library'];
// Try making each of these three values empty one at a time and ensure the form won't submit:
for (var i=0; i<values.length;i++) {
var values_with_blank = values.slice();
values_with_blank[i] = '';
fillInLibraryFields.apply(this, values_with_blank);
expect($('.create-library li.field.text input[value=]').parent()).toHaveClass('error');
expect($('.new-library-save')).toHaveClass('is-disabled');
expect($('.new-library-save')).toHaveAttr('aria-disabled', 'true');
$('.new-library-save').click();
AjaxHelpers.expectNoRequests(requests);
}
});
it("can cancel library creation", function () {
$('.new-library-button').click();
fillInLibraryFields('DemoX', 'DM101', 'Demo library');
$('.new-library-cancel').click();
expect($('.wrapper-create-library')).not.toHaveClass('is-shown');
$('.wrapper-create-library form input[type=text]').each(function() {
expect($(this)).toHaveValue('');
});
});
it("displays an error when saving a library fails", function () {
var requests = AjaxHelpers.requests(this);
$('.new-library-button').click();
fillInLibraryFields('DemoX', 'DM101', 'Demo library');
$('.new-library-save').click();
AjaxHelpers.respondWithError(requests, 400, {
ErrMsg: 'error message'
});
expect($('.create-library .wrap-error')).toHaveClass('is-shown');
expect($('#library_creation_error')).toContainText('error message');
expect($('.new-library-save')).toHaveClass('is-disabled');
expect($('.new-library-save')).toHaveAttr('aria-disabled', 'true');
});
it("can switch tabs", function() {
var $courses_tab = $('.courses-tab'),
$libraraies_tab = $('.libraries-tab');
// precondition check - courses tab is loaded by default
expect($courses_tab).toHaveClass('active');
expect($libraraies_tab).not.toHaveClass('active');
$('#course-index-tabs .libraries-tab').click(); // switching to library tab
expect($courses_tab).not.toHaveClass('active');
expect($libraraies_tab).toHaveClass('active');
$('#course-index-tabs .courses-tab').click(); // switching to course tab
expect($courses_tab).toHaveClass('active');
expect($libraraies_tab).not.toHaveClass('active');
});
});
});