diff --git a/common/lib/xmodule/xmodule/js/spec/combinedopenended/display_spec.coffee b/common/lib/xmodule/xmodule/js/spec/combinedopenended/display_spec.coffee index c45b26ddcd..d4aa2b5b6c 100644 --- a/common/lib/xmodule/xmodule/js/spec/combinedopenended/display_spec.coffee +++ b/common/lib/xmodule/xmodule/js/spec/combinedopenended/display_spec.coffee @@ -3,6 +3,7 @@ describe 'CombinedOpenEnded', -> spyOn Logger, 'log' # load up some fixtures loadFixtures 'combined-open-ended.html' + jasmine.Clock.useMock() @element = $('.course-content') @@ -27,3 +28,25 @@ describe 'CombinedOpenEnded', -> expect(@combined.answer_area.attr("disabled")).toBe("disabled") expect(@combined.submit_button.val()).toBe("Submit assessment") + describe 'poll', -> + beforeEach => + # setup the spies + @combined = new CombinedOpenEnded @element + spyOn(@combined, 'reload').andCallFake -> return 0 + window.setTimeout = jasmine.createSpy().andCallFake (callback, timeout) -> return 5 + + it 'we are setting the timeout', => + fakeResponseContinue = state: 'not done' + spyOn($, 'postWithPrefix').andCallFake (url, callback) -> callback(fakeResponseContinue) + @combined.poll() + expect(window.setTimeout).toHaveBeenCalledWith(@combined.poll, 10000) + expect(window.queuePollerID).toBe(5) + + it 'we are stopping polling properly', => + $.postWithPrefix = jasmine.createSpy("$.postWithPrefix") + fakeResponseDone = state: "done" + $.postWithPrefix.andCallFake (url, callback) -> callback(fakeResponseDone) + @combined.poll() + expect(window.queuePollerID).toBeUndefined() + expect(window.setTimeout).not.toHaveBeenCalled() + expect(@combined.reload).toHaveBeenCalled() diff --git a/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee b/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee index dc5c2bc329..594efe2f9b 100644 --- a/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee @@ -281,6 +281,10 @@ class @CombinedOpenEnded $.postWithPrefix "#{@ajax_url}/check_for_score", (response) => if response.state == "done" or response.state=="post_assessment" delete window.queuePollerID - location.reload() + @reload() else window.queuePollerID = window.setTimeout(@poll, 10000) + + # wrap this so that it can be mocked + reload: -> + location.reload()