153 lines
6.6 KiB
JavaScript
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'
|
|
);
|
|
});
|
|
});
|
|
}
|
|
);
|