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" ); }); }); } );