Files
edx-platform/cms/static/js/spec/views/xblock_validation_spec.js
2016-08-08 15:04:06 -04:00

131 lines
5.7 KiB
JavaScript

define(['jquery', 'js/models/xblock_validation', 'js/views/xblock_validation', 'common/js/spec_helpers/template_helpers'],
function($, XBlockValidationModel, XBlockValidationView, TemplateHelpers) {
beforeEach(function() {
TemplateHelpers.installTemplate('xblock-validation-messages');
});
describe('XBlockValidationView helper methods', function() {
var model, view;
beforeEach(function() {
model = new XBlockValidationModel({parse: true});
view = new XBlockValidationView({model: model});
view.render();
});
it('has a getIcon method', function() {
var getIcon = view.getIcon.bind(view);
expect(getIcon(model.WARNING)).toBe('fa-exclamation-triangle');
expect(getIcon(model.NOT_CONFIGURED)).toBe('fa-exclamation-triangle');
expect(getIcon(model.ERROR)).toBe('fa-exclamation-circle');
expect(getIcon('unknown')).toBeNull();
});
it('has a getDisplayName method', function() {
var getDisplayName = view.getDisplayName.bind(view);
expect(getDisplayName(model.WARNING)).toBe('Warning');
expect(getDisplayName(model.NOT_CONFIGURED)).toBe('Warning');
expect(getDisplayName(model.ERROR)).toBe('Error');
expect(getDisplayName('unknown')).toBeNull();
});
it('can add additional classes', function() {
var noContainerContent = 'no-container-content', notConfiguredModel, nonRootView, rootView;
expect(view.getAdditionalClasses()).toBe('');
expect(view.$('.validation')).not.toHaveClass(noContainerContent);
notConfiguredModel = new XBlockValidationModel({
'empty': false, 'summary': {'text': 'Not configured', 'type': model.NOT_CONFIGURED},
'xblock_id': 'id'
},
{parse: true}
);
nonRootView = new XBlockValidationView({model: notConfiguredModel});
nonRootView.render();
expect(nonRootView.getAdditionalClasses()).toBe('');
expect(view.$('.validation')).not.toHaveClass(noContainerContent);
rootView = new XBlockValidationView({model: notConfiguredModel, root: true});
rootView.render();
expect(rootView.getAdditionalClasses()).toBe(noContainerContent);
expect(rootView.$('.validation')).toHaveClass(noContainerContent);
});
});
describe('XBlockValidationView rendering', function() {
var model, view;
beforeEach(function() {
model = new XBlockValidationModel({
'empty': false,
'summary': {
'text': 'Summary message', 'type': 'error',
'action_label': 'Summary Action', 'action_class': 'edit-button'
},
'messages': [
{
'text': 'First message', 'type': 'warning',
'action_label': 'First Message Action', 'action_runtime_event': 'fix-up'
},
{'text': 'Second message', 'type': 'error'}
],
'xblock_id': 'id'
});
view = new XBlockValidationView({model: model});
view.render();
});
it('renders summary and detailed messages types', function() {
var details;
expect(view.$('.xblock-message')).toHaveClass('has-errors');
details = view.$('.xblock-message-item');
expect(details.length).toBe(2);
expect(details[0]).toHaveClass('warning');
expect(details[1]).toHaveClass('error');
});
it('renders summary and detailed messages text', function() {
var details;
expect(view.$('.xblock-message').text()).toContain('Summary message');
details = view.$('.xblock-message-item');
expect(details.length).toBe(2);
expect($(details[0]).text()).toContain('Warning');
expect($(details[0]).text()).toContain('First message');
expect($(details[1]).text()).toContain('Error');
expect($(details[1]).text()).toContain('Second message');
});
it('renders action info', function() {
expect(view.$('a.edit-button .action-button-text').text()).toContain('Summary Action');
expect(view.$('a.notification-action-button .action-button-text').text()).
toContain('First Message Action');
expect(view.$('a.notification-action-button').data('notification-action')).toBe('fix-up');
});
it('renders a summary only', function() {
var summaryOnlyModel = new XBlockValidationModel({
'empty': false,
'summary': {'text': 'Summary message', 'type': 'warning'},
'xblock_id': 'id'
}), summaryOnlyView, details;
summaryOnlyView = new XBlockValidationView({model: summaryOnlyModel});
summaryOnlyView.render();
expect(summaryOnlyView.$('.xblock-message')).toHaveClass('has-warnings');
expect(view.$('.xblock-message').text()).toContain('Summary message');
details = summaryOnlyView.$('.xblock-message-item');
expect(details.length).toBe(0);
});
});
}
);