@@ -152,6 +152,17 @@ describe("OpenAssessment.ResponseView", function() {
152152 stubConfirm = didConfirm ;
153153 } ;
154154
155+ /**
156+ Helper function to assert response buttons are all consistent and in an expected state
157+ (disabled or enabled).
158+ **/
159+ var expectResponseFieldsEnabled = function ( view , expectedEnabled ) {
160+ expect ( view . baseView . buttonEnabled ( '.step--response__submit' ) ) . toBe ( expectedEnabled ) ;
161+ expect ( view . baseView . buttonEnabled ( '.step--response .file__upload' ) ) . toBe ( expectedEnabled ) ;
162+ expect ( view . baseView . buttonEnabled ( '.step--response .delete__uploaded__file' ) ) . toBe ( expectedEnabled ) ;
163+ expect ( view . baseView . buttonEnabled ( '.step--response .submission__answer__upload' ) ) . toBe ( expectedEnabled ) ;
164+ } ;
165+
155166 // Store window URL object for replacing after tests;
156167 const windowURL = window . URL ;
157168 const mockURL = {
@@ -239,21 +250,21 @@ describe("OpenAssessment.ResponseView", function() {
239250 // response is blank
240251 view . response ( [ '' , '' ] ) ;
241252 view . handleResponseChanged ( ) ;
242- expect ( view . submitEnabled ( ) ) . toBe ( true ) ;
253+ expectResponseFieldsEnabled ( view , true ) ;
243254 expect ( view . isValidForSubmit ( ) ) . toBe ( false ) ;
244255 expect ( view . saveStatus ( ) ) . toContain ( 'This response has not been saved' ) ;
245256
246257 // response is whitespace
247258 view . response ( [ ' \n \n ' , ' ' ] ) ;
248259 view . handleResponseChanged ( ) ;
249- expect ( view . submitEnabled ( ) ) . toBe ( true ) ;
260+ expectResponseFieldsEnabled ( view , true ) ;
250261 expect ( view . isValidForSubmit ( ) ) . toBe ( false ) ;
251262 expect ( view . saveStatus ( ) ) . toContain ( 'This response has not been saved' ) ;
252263
253264 // response is not blank
254265 view . response ( [ 'Test response 1' , ' ' ] ) ;
255266 view . handleResponseChanged ( ) ;
256- expect ( view . submitEnabled ( ) ) . toBe ( true ) ;
267+ expectResponseFieldsEnabled ( view , true ) ;
257268 expect ( view . isValidForSubmit ( ) ) . toBe ( true ) ;
258269 expect ( view . saveStatus ( ) ) . toContain ( 'Saving draft' ) ;
259270 } ) ;
@@ -262,14 +273,14 @@ describe("OpenAssessment.ResponseView", function() {
262273 view . textResponse = 'optional' ;
263274 view . fileUploadResponse = 'required' ;
264275
265- expect ( view . submitEnabled ( ) ) . toBe ( true ) ;
276+ expectResponseFieldsEnabled ( view , true ) ;
266277 expect ( view . isValidForSubmit ( ) ) . toBe ( false ) ;
267278
268279 var files = [ { type : 'application/pdf' , size : 1024 , name : 'application.pdf' , data : '' } ] ;
269280 view . prepareUpload ( files , 'pdf-and-image' , [ 'test description' ] ) ;
270281 view . uploadFiles ( ) ;
271282
272- expect ( view . submitEnabled ( ) ) . toBe ( true ) ;
283+ expectResponseFieldsEnabled ( view , true ) ;
273284 expect ( view . isValidForSubmit ( ) ) . toBe ( true ) ;
274285 } ) ;
275286
@@ -336,7 +347,7 @@ describe("OpenAssessment.ResponseView", function() {
336347 expect ( server . submit ) . not . toHaveBeenCalled ( ) ;
337348 } ) ;
338349
339- it ( "disables the submit button on submission" , function ( ) {
350+ it ( "disables the response buttons on submission" , function ( ) {
340351 // Prevent the server's response from resolving,
341352 // so we can see what happens before view gets re-rendered.
342353 spyOn ( server , 'submit' ) . and . callFake ( function ( ) {
@@ -345,10 +356,10 @@ describe("OpenAssessment.ResponseView", function() {
345356
346357 view . response ( [ 'Test response 1' , 'Test response 2' ] ) ;
347358 view . handleSubmitClicked ( ) ;
348- expect ( view . submitEnabled ( ) ) . toBe ( false ) ;
359+ expectResponseFieldsEnabled ( view , false ) ;
349360 } ) ;
350361
351- it ( "re-enables the submit button on submission error" , function ( ) {
362+ it ( "re-enables the response buttons on submission error" , function ( ) {
352363 // Simulate a server error
353364 spyOn ( server , 'submit' ) . and . callFake ( function ( ) {
354365 return $ . Deferred ( function ( defer ) {
@@ -359,11 +370,11 @@ describe("OpenAssessment.ResponseView", function() {
359370 view . response ( [ 'Test response 1' , 'Test response 2' ] ) ;
360371 view . handleSubmitClicked ( ) ;
361372
362- // Expect the submit button to have been re-enabled
363- expect ( view . submitEnabled ( ) ) . toBe ( true ) ;
373+ // Expect the response buttons to have been re-enabled
374+ expectResponseFieldsEnabled ( view , true ) ;
364375 } ) ;
365376
366- it ( "re-enables the submit button after cancelling" , function ( ) {
377+ it ( "re-enables the response buttons after cancelling" , function ( ) {
367378 // Simulate the user cancelling the submission
368379 setStubConfirm ( false ) ;
369380 spyOn ( server , 'submit' ) . and . callThrough ( ) ;
@@ -372,8 +383,8 @@ describe("OpenAssessment.ResponseView", function() {
372383 view . response ( [ 'Test response 1' , 'Test response 2' ] ) ;
373384 view . handleSubmitClicked ( ) ;
374385
375- // Expect the submit button to be re-enabled
376- expect ( view . submitEnabled ( ) ) . toBe ( true ) ;
386+ // Expect the response buttons to be re-enabled
387+ expectResponseFieldsEnabled ( view , true ) ;
377388 } ) ;
378389
379390 it ( "moves to the next step on duplicate submission error" , function ( ) {
@@ -620,7 +631,7 @@ describe("OpenAssessment.ResponseView", function() {
620631 view . prepareUpload ( files , 'image' , [ 'i1' , 'i2' ] ) ;
621632 view . uploadFiles ( )
622633 expect ( view . isValidForSubmit ( ) ) . toBe ( true ) ;
623- expect ( view . submitEnabled ( ) ) . toBe ( true ) ;
634+ expectResponseFieldsEnabled ( view , true ) ;
624635 expect ( view . files . length ) . toEqual ( 2 ) ;
625636 view . prepareUpload ( files , 'image' , [ 'i1' , 'i2' ] ) ;
626637 view . uploadFiles ( )
@@ -641,7 +652,7 @@ describe("OpenAssessment.ResponseView", function() {
641652 view . prepareUpload ( files , 'image' , [ 'i1' , 'i2' , 'i1' , 'i2' , 'i1' , 'i2' , 'i1' , 'i2' , 'i1' , 'i2' , 'i1' , 'i2' ,
642653 'i1' , 'i2' , 'i1' , 'i2' , 'i1' , 'i2' , 'i1' , 'i2' , ] ) ;
643654 expect ( view . isValidForSubmit ( ) ) . toBe ( false ) ;
644- expect ( view . submitEnabled ( ) ) . toBe ( true ) ;
655+ expectResponseFieldsEnabled ( view , true ) ;
645656 expect ( view . getSavedFileCount ( ) ) . toEqual ( 20 ) ;
646657 var files2 = [ ] ;
647658 for ( i = 0 ; i < 2 ; i ++ ) {
0 commit comments