Commit 94a2abf6 by Usman Khalid

Fixed js tests.

TNL-708
parent f6db73e2
...@@ -86,7 +86,12 @@ ...@@ -86,7 +86,12 @@
{ {
"template": "openassessmentblock/response/oa_response.html", "template": "openassessmentblock/response/oa_response.html",
"context": { "context": {
"saved_response": "", "saved_response": {"answer":
{"parts": [
{ "text": "", "prompt": { "description": "Prompt 1" }},
{ "text": "", "prompt": { "description": "Prompt 2" }}
]}
},
"save_status": "This response has not been saved.", "save_status": "This response has not been saved.",
"submit_enabled": false, "submit_enabled": false,
"submission_due": "" "submission_due": ""
......
...@@ -127,23 +127,29 @@ describe("OpenAssessment.ResponseView", function() { ...@@ -127,23 +127,29 @@ describe("OpenAssessment.ResponseView", function() {
view.setAutoSaveEnabled(false); view.setAutoSaveEnabled(false);
}); });
it("updates and retrieves response text correctly", function() {
view.response(['Test response 1', 'Test response 2']);
expect(view.response()[0]).toBe('Test response 1');
expect(view.response()[1]).toBe('Test response 2');
});
it("updates submit/save buttons and save status when response text changes", function() { it("updates submit/save buttons and save status when response text changes", function() {
// Response is blank --> save/submit buttons disabled // Response is blank --> save/submit buttons disabled
view.response(''); view.response(['', '']);
view.handleResponseChanged(); view.handleResponseChanged();
expect(view.submitEnabled()).toBe(false); expect(view.submitEnabled()).toBe(false);
expect(view.saveEnabled()).toBe(false); expect(view.saveEnabled()).toBe(false);
expect(view.saveStatus()).toContain('This response has not been saved.'); expect(view.saveStatus()).toContain('This response has not been saved.');
// Response is whitespace --> save/submit buttons disabled // Response is whitespace --> save/submit buttons disabled
view.response(' \n \n '); view.response([' \n \n ', ' ']);
view.handleResponseChanged(); view.handleResponseChanged();
expect(view.submitEnabled()).toBe(false); expect(view.submitEnabled()).toBe(false);
expect(view.saveEnabled()).toBe(false); expect(view.saveEnabled()).toBe(false);
expect(view.saveStatus()).toContain('This response has not been saved.'); expect(view.saveStatus()).toContain('This response has not been saved.');
// Response is not blank --> submit button enabled // Response is not blank --> submit button enabled
view.response('Test response'); view.response(['Test response 1', ' ']);
view.handleResponseChanged(); view.handleResponseChanged();
expect(view.submitEnabled()).toBe(true); expect(view.submitEnabled()).toBe(true);
expect(view.saveEnabled()).toBe(true); expect(view.saveEnabled()).toBe(true);
...@@ -159,7 +165,7 @@ describe("OpenAssessment.ResponseView", function() { ...@@ -159,7 +165,7 @@ describe("OpenAssessment.ResponseView", function() {
expect(view.saveStatus()).toContain('saved but not submitted'); expect(view.saveStatus()).toContain('saved but not submitted');
// Response is not blank --> submit button enabled // Response is not blank --> submit button enabled
view.response('Test response'); view.response(['Test response 1', 'Test response 2']);
view.save(); view.save();
expect(view.submitEnabled()).toBe(true); expect(view.submitEnabled()).toBe(true);
expect(view.saveEnabled()).toBe(false); expect(view.saveEnabled()).toBe(false);
...@@ -168,21 +174,21 @@ describe("OpenAssessment.ResponseView", function() { ...@@ -168,21 +174,21 @@ describe("OpenAssessment.ResponseView", function() {
it("shows unsaved draft only when response text has changed", function() { it("shows unsaved draft only when response text has changed", function() {
// Save the initial response // Save the initial response
view.response('Lorem ipsum'); view.response(['Test response 1', 'Test response 2']);
view.save(); view.save();
expect(view.saveEnabled()).toBe(false); expect(view.saveEnabled()).toBe(false);
expect(view.saveStatus()).toContain('saved but not submitted'); expect(view.saveStatus()).toContain('saved but not submitted');
// Keep the text the same, but trigger an update // Keep the text the same, but trigger an update
// Should still be saved // Should still be saved
view.response('Lorem ipsum'); view.response(['Test response 1', 'Test response 2']);
view.handleResponseChanged(); view.handleResponseChanged();
expect(view.saveEnabled()).toBe(false); expect(view.saveEnabled()).toBe(false);
expect(view.saveStatus()).toContain('saved but not submitted'); expect(view.saveStatus()).toContain('saved but not submitted');
// Change the text // Change the text
// This should cause it to change to unsaved draft // This should cause it to change to unsaved draft
view.response('changed '); view.response(['Test response 1', 'Test response 3']);
view.handleResponseChanged(); view.handleResponseChanged();
expect(view.saveEnabled()).toBe(true); expect(view.saveEnabled()).toBe(true);
expect(view.saveStatus()).toContain('This response has not been saved.'); expect(view.saveStatus()).toContain('This response has not been saved.');
...@@ -190,16 +196,16 @@ describe("OpenAssessment.ResponseView", function() { ...@@ -190,16 +196,16 @@ describe("OpenAssessment.ResponseView", function() {
it("sends the saved submission to the server", function() { it("sends the saved submission to the server", function() {
spyOn(server, 'save').andCallThrough(); spyOn(server, 'save').andCallThrough();
view.response('Test response'); view.response(['Test response 1', 'Test response 2']);
view.save(); view.save();
expect(server.save).toHaveBeenCalledWith('Test response'); expect(server.save).toHaveBeenCalledWith(['Test response 1', 'Test response 2']);
}); });
it("submits a response to the server", function() { it("submits a response to the server", function() {
spyOn(server, 'submit').andCallThrough(); spyOn(server, 'submit').andCallThrough();
view.response('Test response'); view.response(['Test response 1', 'Test response 2']);
view.submit(); view.submit();
expect(server.submit).toHaveBeenCalledWith('Test response'); expect(server.submit).toHaveBeenCalledWith(['Test response 1', 'Test response 2']);
}); });
it("allows the user to cancel before submitting", function() { it("allows the user to cancel before submitting", function() {
...@@ -208,7 +214,7 @@ describe("OpenAssessment.ResponseView", function() { ...@@ -208,7 +214,7 @@ describe("OpenAssessment.ResponseView", function() {
spyOn(server, 'submit').andCallThrough(); spyOn(server, 'submit').andCallThrough();
// Start a submission // Start a submission
view.response('Test response'); view.response(['Test response 1', 'Test response 2']);
view.submit(); view.submit();
// Expect that the submission was not sent to the server // Expect that the submission was not sent to the server
...@@ -222,7 +228,7 @@ describe("OpenAssessment.ResponseView", function() { ...@@ -222,7 +228,7 @@ describe("OpenAssessment.ResponseView", function() {
return $.Deferred(function(defer) {}).promise(); return $.Deferred(function(defer) {}).promise();
}); });
view.response('Test response'); view.response(['Test response 1', 'Test response 2']);
view.submit(); view.submit();
expect(view.submitEnabled()).toBe(false); expect(view.submitEnabled()).toBe(false);
}); });
...@@ -235,7 +241,7 @@ describe("OpenAssessment.ResponseView", function() { ...@@ -235,7 +241,7 @@ describe("OpenAssessment.ResponseView", function() {
}).promise(); }).promise();
}); });
view.response('Test response'); view.response(['Test response 1', 'Test response 2']);
view.submit(); view.submit();
// Expect the submit button to have been re-enabled // Expect the submit button to have been re-enabled
...@@ -248,7 +254,7 @@ describe("OpenAssessment.ResponseView", function() { ...@@ -248,7 +254,7 @@ describe("OpenAssessment.ResponseView", function() {
spyOn(server, 'submit').andCallThrough(); spyOn(server, 'submit').andCallThrough();
// Start a submission // Start a submission
view.response('Test response'); view.response(['Test response 1', 'Test response 2']);
view.submit(); view.submit();
// Expect the submit button to be re-enabled // Expect the submit button to be re-enabled
...@@ -265,7 +271,7 @@ describe("OpenAssessment.ResponseView", function() { ...@@ -265,7 +271,7 @@ describe("OpenAssessment.ResponseView", function() {
spyOn(view, 'load'); spyOn(view, 'load');
spyOn(baseView, 'loadAssessmentModules'); spyOn(baseView, 'loadAssessmentModules');
view.response('Test response'); view.response(['Test response 1', 'Test response 2']);
view.submit(); view.submit();
// Expect the current and next step to have been reloaded // Expect the current and next step to have been reloaded
...@@ -278,7 +284,7 @@ describe("OpenAssessment.ResponseView", function() { ...@@ -278,7 +284,7 @@ describe("OpenAssessment.ResponseView", function() {
expect(view.unsavedWarningEnabled()).toBe(false); expect(view.unsavedWarningEnabled()).toBe(false);
// Change the text, then expect the unsaved warning to be enabled. // Change the text, then expect the unsaved warning to be enabled.
view.response('Lorem ipsum'); view.response(['Lorem ipsum 1', 'Lorem ipsum 2']);
view.handleResponseChanged(); view.handleResponseChanged();
// Expect the unsaved work warning to be enabled // Expect the unsaved work warning to be enabled
...@@ -287,7 +293,7 @@ describe("OpenAssessment.ResponseView", function() { ...@@ -287,7 +293,7 @@ describe("OpenAssessment.ResponseView", function() {
it("disables the unsaved work warning when the user saves a response", function() { it("disables the unsaved work warning when the user saves a response", function() {
// Change the text, then expect the unsaved warning to be enabled. // Change the text, then expect the unsaved warning to be enabled.
view.response('Lorem ipsum'); view.response(['Lorem ipsum 1', 'Lorem ipsum 2']);
view.handleResponseChanged(); view.handleResponseChanged();
expect(view.unsavedWarningEnabled()).toBe(true); expect(view.unsavedWarningEnabled()).toBe(true);
...@@ -298,7 +304,7 @@ describe("OpenAssessment.ResponseView", function() { ...@@ -298,7 +304,7 @@ describe("OpenAssessment.ResponseView", function() {
it("disables the unsaved work warning when the user submits a response", function() { it("disables the unsaved work warning when the user submits a response", function() {
// Change the text, then expect the unsaved warning to be enabled. // Change the text, then expect the unsaved warning to be enabled.
view.response('Lorem ipsum'); view.response(['Lorem ipsum 1', 'Lorem ipsum 2']);
view.handleResponseChanged(); view.handleResponseChanged();
expect(view.unsavedWarningEnabled()).toBe(true); expect(view.unsavedWarningEnabled()).toBe(true);
...@@ -315,7 +321,7 @@ describe("OpenAssessment.ResponseView", function() { ...@@ -315,7 +321,7 @@ describe("OpenAssessment.ResponseView", function() {
expect(view.saveStatus()).toContain('not been saved'); expect(view.saveStatus()).toContain('not been saved');
// Change the response // Change the response
view.response('Lorem ipsum'); view.response(['Lorem ipsum 1', 'Lorem ipsum 2']);
view.handleResponseChanged(); view.handleResponseChanged();
// Usually autosave would be called by a timer. // Usually autosave would be called by a timer.
...@@ -357,7 +363,7 @@ describe("OpenAssessment.ResponseView", function() { ...@@ -357,7 +363,7 @@ describe("OpenAssessment.ResponseView", function() {
spyOn(server, 'save').andCallFake(function() { return errorPromise; }); spyOn(server, 'save').andCallFake(function() { return errorPromise; });
// Change the response and save it // Change the response and save it
view.response('Lorem ipsum'); view.response(['Lorem ipsum 1', 'Lorem ipsum 2']);
view.handleResponseChanged(); view.handleResponseChanged();
view.save(); view.save();
...@@ -378,7 +384,7 @@ describe("OpenAssessment.ResponseView", function() { ...@@ -378,7 +384,7 @@ describe("OpenAssessment.ResponseView", function() {
view.AUTO_SAVE_WAIT = 900000; view.AUTO_SAVE_WAIT = 900000;
// Change the response // Change the response
view.response('Lorem ipsum'); view.response(['Lorem ipsum 1', 'Lorem ipsum 2']);
view.handleResponseChanged(); view.handleResponseChanged();
// Autosave // Autosave
......
...@@ -269,7 +269,7 @@ OpenAssessment.ResponseView.prototype = { ...@@ -269,7 +269,7 @@ OpenAssessment.ResponseView.prototype = {
**/ **/
response: function(texts) { response: function(texts) {
var sel = $('.submission__answer__part__text__value', this.element); var sel = $('.submission__answer__part__text__value', this.element);
if (typeof text === 'undefined') { if (typeof texts === 'undefined') {
return sel.map(function() { return sel.map(function() {
return $.trim($(this).val()); return $.trim($(this).val());
}).get(); }).get();
...@@ -320,14 +320,16 @@ OpenAssessment.ResponseView.prototype = { ...@@ -320,14 +320,16 @@ OpenAssessment.ResponseView.prototype = {
**/ **/
handleResponseChanged: function() { handleResponseChanged: function() {
// Enable the save/submit button only for non-blank responses // Enable the save/submit button only for non-blank responses
var isBlank = ($.trim(this.response()) !== ''); var isNotBlank = !this.response().every(function(element, index, array) {
this.submitEnabled(isBlank); return $.trim(element) == '';
});
this.submitEnabled(isNotBlank);
// Update the save button, save status, and "unsaved changes" warning // Update the save button, save status, and "unsaved changes" warning
// only if the response has changed // only if the response has changed
if (this.responseChanged()) { if (this.responseChanged()) {
this.saveEnabled(isBlank); this.saveEnabled(isNotBlank);
this.previewEnabled(isBlank); this.previewEnabled(isNotBlank);
this.saveStatus(gettext('This response has not been saved.')); this.saveStatus(gettext('This response has not been saved.'));
this.unsavedWarningEnabled(true); this.unsavedWarningEnabled(true);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment