Commit 78deaed2 by Waqas Khalid

Merge pull request #6445 from MatMoore/forum_vote_race_condition

Vote buttons should be disabled while in use
parents 847f56d1 d857695d
...@@ -195,3 +195,4 @@ Dino Cikatić <dcikatic@edx.org> ...@@ -195,3 +195,4 @@ Dino Cikatić <dcikatic@edx.org>
Davorin Šego <dsego@edx.org> Davorin Šego <dsego@edx.org>
Marko Jevtić <mjevtic@edx.org> Marko Jevtić <mjevtic@edx.org>
Ahsan Ulhaq <ahsan@edx.org> Ahsan Ulhaq <ahsan@edx.org>
Mat Moore <mat@mooresoftware.co.uk>
...@@ -25,3 +25,24 @@ describe 'DiscussionUtil', -> ...@@ -25,3 +25,24 @@ describe 'DiscussionUtil', ->
# if the ajax call ends in failure, the model state should be reverted # if the ajax call ends in failure, the model state should be reverted
deferred.reject() deferred.reject()
expect(model.attributes).toEqual({hello: false, number: 42}) expect(model.attributes).toEqual({hello: false, number: 42})
it "rolls back the changes if the associated element is disabled", ->
spyOn(DiscussionUtil, "safeAjax").andCallThrough()
model = new Backbone.Model({hello: false, number: 42})
updates = {hello: "world"}
# This is the element that is disabled/enabled while the ajax request is
# in progress
$elem = jasmine.createSpyObj('$elem', ['attr'])
$elem.attr.andReturn(true)
res = DiscussionUtil.updateWithUndo(model, updates, {foo: "bar", $elem:$elem}, "error message")
expect($elem.attr).toHaveBeenCalledWith("disabled")
expect(DiscussionUtil.safeAjax).toHaveBeenCalled()
expect(model.attributes).toEqual({hello: false, number: 42})
failed = false
res.fail(() => failed = true)
expect(failed).toBe(true);
...@@ -134,8 +134,12 @@ class @DiscussionUtil ...@@ -134,8 +134,12 @@ class @DiscussionUtil
@safeAjax: (params) -> @safeAjax: (params) ->
$elem = params.$elem $elem = params.$elem
if $elem and $elem.attr("disabled") if $elem and $elem.attr("disabled")
return deferred = $.Deferred()
deferred.reject()
return deferred.promise()
params["url"] = URI(params["url"]).addSearch ajax: 1 params["url"] = URI(params["url"]).addSearch ajax: 1
params["beforeSend"] = -> params["beforeSend"] = ->
if $elem if $elem
......
...@@ -127,7 +127,7 @@ if Backbone? ...@@ -127,7 +127,7 @@ if Backbone?
$loading: elem $loading: elem
takeFocus: true takeFocus: true
complete: => complete: =>
@responseRequest = null @responsesRequest = null
success: (data, textStatus, xhr) => success: (data, textStatus, xhr) =>
Content.loadContentInfos(data['annotated_content_info']) Content.loadContentInfos(data['annotated_content_info'])
if @isQuestion() if @isQuestion()
......
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