Files
edx-platform/cms/static/js/spec/models/xblock_validation_spec.js
Eric Fischer 5bc6b31e29 eslint --fix
2017-12-08 14:38:41 -05:00

153 lines
6.6 KiB
JavaScript

define(['js/models/xblock_validation'],
function(XBlockValidationModel) {
var verifyModel;
verifyModel = function(model, expected_empty, expected_summary, expected_messages, expected_xblock_id) {
expect(model.get('empty')).toBe(expected_empty);
expect(model.get('summary')).toEqual(expected_summary);
expect(model.get('messages')).toEqual(expected_messages);
expect(model.get('xblock_id')).toBe(expected_xblock_id);
};
describe('XBlockValidationModel', function() {
it('handles empty variable', function() {
verifyModel(new XBlockValidationModel({parse: true}), true, {}, [], null);
verifyModel(new XBlockValidationModel({empty: true}, {parse: true}), true, {}, [], null);
// It is assumed that the "empty" state on the JSON object passed in is correct
// (no attempt is made to correct other variables based on empty==true).
verifyModel(
new XBlockValidationModel(
{empty: true, messages: [{text: 'Bad JSON case'}], xblock_id: 'id'},
{parse: true}
),
true,
{},
[{text: 'Bad JSON case'}], 'id'
);
});
it('creates a summary if not defined', function() {
// Single warning message.
verifyModel(
new XBlockValidationModel({
empty: false,
xblock_id: 'id'
}, {parse: true}),
false,
{text: 'This component has validation issues.', type: 'warning'},
[],
'id'
);
// Two messages that compute to a "warning" state in the summary.
verifyModel(
new XBlockValidationModel({
empty: false,
messages: [{text: 'one', type: 'not-configured'}, {text: 'two', type: 'warning'}],
xblock_id: 'id'
}, {parse: true}),
false,
{text: 'This component has validation issues.', type: 'warning'},
[{text: 'one', type: 'not-configured'}, {text: 'two', type: 'warning'}],
'id'
);
// Two messages, with one of them "error", resulting in an "error" state in the summary.
verifyModel(
new XBlockValidationModel({
empty: false,
messages: [{text: 'one', type: 'warning'}, {text: 'two', type: 'error'}],
xblock_id: 'id'
}, {parse: true}),
false,
{text: 'This component has validation issues.', type: 'error'},
[{text: 'one', type: 'warning'}, {text: 'two', type: 'error'}],
'id'
);
});
it('respects summary properties that are defined', function() {
// Summary already present (both text and type), no messages.
verifyModel(
new XBlockValidationModel({
empty: false,
xblock_id: 'id',
summary: {text: 'my summary', type: 'custom type'}
}, {parse: true}),
false,
{text: 'my summary', type: 'custom type'},
[],
'id'
);
// Summary text present, but not type (will get default value of warning).
verifyModel(
new XBlockValidationModel({
empty: false,
xblock_id: 'id',
summary: {text: 'my summary'}
}, {parse: true}),
false,
{text: 'my summary', type: 'warning'},
[],
'id'
);
// Summary type present, but not text.
verifyModel(
new XBlockValidationModel({
empty: false,
summary: {type: 'custom type'},
messages: [{text: 'one', type: 'not-configured'}, {text: 'two', type: 'warning'}],
xblock_id: 'id'
}, {parse: true}),
false,
{text: 'This component has validation issues.', type: 'custom type'},
[{text: 'one', type: 'not-configured'}, {text: 'two', type: 'warning'}],
'id'
);
// Summary text present, type will be computed as error.
verifyModel(
new XBlockValidationModel({
empty: false,
summary: {text: 'my summary'},
messages: [{text: 'one', type: 'warning'}, {text: 'two', type: 'error'}],
xblock_id: 'id'
}, {parse: true}),
false,
{text: 'my summary', type: 'error'},
[{text: 'one', type: 'warning'}, {text: 'two', type: 'error'}],
'id'
);
});
it('clears messages if showSummaryOnly is true', function() {
verifyModel(
new XBlockValidationModel({
empty: false,
xblock_id: 'id',
summary: {text: 'my summary'},
messages: [{text: 'one', type: 'warning'}, {text: 'two', type: 'error'}],
showSummaryOnly: true
}, {parse: true}),
false,
{text: 'my summary', type: 'error'},
[],
'id'
);
verifyModel(
new XBlockValidationModel({
empty: false,
xblock_id: 'id',
summary: {text: 'my summary'},
messages: [{text: 'one', type: 'warning'}, {text: 'two', type: 'error'}],
showSummaryOnly: false
}, {parse: true}),
false,
{text: 'my summary', type: 'error'},
[{text: 'one', type: 'warning'}, {text: 'two', type: 'error'}],
'id'
);
});
});
}
);