98 lines
4.2 KiB
JavaScript
98 lines
4.2 KiB
JavaScript
define(['backbone', 'jquery', 'js/models/notification', 'js/views/notification', 'common/js/spec_helpers/template_helpers'],
|
|
function(Backbone, $, NotificationModel, NotificationView, TemplateHelpers) {
|
|
describe('NotificationView', function() {
|
|
var createNotification, verifyTitle, verifyMessage, verifyDetails, verifyAction, notificationView;
|
|
|
|
createNotification = function(modelVals) {
|
|
var notificationModel = new NotificationModel(modelVals);
|
|
notificationView = new NotificationView({
|
|
model: notificationModel
|
|
});
|
|
notificationView.render();
|
|
return notificationView;
|
|
};
|
|
|
|
verifyTitle = function(expectedTitle) {
|
|
expect(notificationView.$('.message-title').text().trim()).toBe(expectedTitle);
|
|
};
|
|
|
|
verifyMessage = function(expectedMessage) {
|
|
expect(notificationView.$('.message-copy').text().trim()).toBe(expectedMessage);
|
|
};
|
|
|
|
verifyDetails = function(expectedDetails) {
|
|
var details = notificationView.$('.summary-item');
|
|
expect(details.length).toBe(expectedDetails.length);
|
|
details.each(function(index) {
|
|
expect($(this).text().trim()).toBe(expectedDetails[index]);
|
|
});
|
|
};
|
|
|
|
verifyAction = function(expectedActionText) {
|
|
var actionButton = notificationView.$('.action-primary');
|
|
if (expectedActionText) {
|
|
expect(actionButton.text().trim()).toBe(expectedActionText);
|
|
} else {
|
|
expect(actionButton.length).toBe(0);
|
|
}
|
|
};
|
|
|
|
beforeEach(function() {
|
|
setFixtures('<div></div>');
|
|
TemplateHelpers.installTemplate('templates/instructor/instructor_dashboard_2/notification');
|
|
});
|
|
|
|
it('has default values', function() {
|
|
createNotification({});
|
|
expect(notificationView.$('div.message')).toHaveClass('message-confirmation');
|
|
verifyTitle('');
|
|
verifyDetails([]);
|
|
verifyAction(null);
|
|
});
|
|
|
|
it('can use an error type', function() {
|
|
createNotification({type: 'error'});
|
|
expect(notificationView.$('div.message')).toHaveClass('message-error');
|
|
expect(notificationView.$('div.message')).not.toHaveClass('message-confirmation');
|
|
});
|
|
|
|
it('can specify a title', function() {
|
|
createNotification({title: 'notification title'});
|
|
verifyTitle('notification title');
|
|
});
|
|
|
|
it('can specify a message', function() {
|
|
createNotification({message: 'This is a dummy message'});
|
|
verifyMessage('This is a dummy message');
|
|
});
|
|
|
|
it('can specify details', function() {
|
|
var expectedDetails = ['detail 1', 'detail 2'];
|
|
createNotification({details: expectedDetails});
|
|
verifyDetails(expectedDetails);
|
|
});
|
|
|
|
it('shows an action button if text and callback are provided', function() {
|
|
createNotification({actionText: 'action text', actionCallback: function() {}});
|
|
verifyAction('action text');
|
|
});
|
|
|
|
it('shows an action button if only text is provided', function() {
|
|
createNotification({actionText: 'action text'});
|
|
verifyAction('action text');
|
|
});
|
|
|
|
it('does not show an action button if text is not provided', function() {
|
|
createNotification({actionCallback: function() {}});
|
|
verifyAction(null);
|
|
});
|
|
|
|
it('triggers the callback when the action button is clicked', function() {
|
|
var actionCallback = jasmine.createSpy('Spy on callback');
|
|
var view = createNotification({actionText: 'action text', actionCallback: actionCallback});
|
|
notificationView.$('button.action-primary').click();
|
|
expect(actionCallback).toHaveBeenCalledWith(view);
|
|
});
|
|
});
|
|
});
|