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
154 lines
7.4 KiB
JavaScript
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');
|
|
});
|
|
});
|
|
});
|