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