Commit d0e9f5a930f43d1a5f9085f4aa29d237c8e8a488
1 parent
d1af06d3
Exists in
master
and in
1 other branch
Fixing edge case when prompts are deactivated after being added to queue
Showing
2 changed files
with
14 additions
and
2 deletions
Show diff stats
app/models/question.rb
| ... | ... | @@ -413,8 +413,11 @@ class Question < ActiveRecord::Base |
| 413 | 413 | end |
| 414 | 414 | |
| 415 | 415 | def pop_prompt_queue |
| 416 | - prompt_id = $redis.lpop(self.pq_key) | |
| 417 | - prompt = prompt_id.nil? ? nil : Prompt.find(prompt_id.to_i) | |
| 416 | + begin | |
| 417 | + prompt_id = $redis.lpop(self.pq_key) | |
| 418 | + prompt = prompt_id.nil? ? nil : Prompt.find(prompt_id.to_i) | |
| 419 | + end until (prompt.nil? || prompt.active?) | |
| 420 | + prompt | |
| 418 | 421 | end |
| 419 | 422 | |
| 420 | 423 | def record_prompt_cache_miss | ... | ... |
spec/models/question_spec.rb
| ... | ... | @@ -199,6 +199,15 @@ describe Question do |
| 199 | 199 | |
| 200 | 200 | @catchup_q.pop_prompt_queue.should == nil |
| 201 | 201 | end |
| 202 | + it "should not return prompts from queue that are deactivated" do | |
| 203 | + @catchup_q.clear_prompt_queue | |
| 204 | + @catchup_q.pop_prompt_queue.should == nil | |
| 205 | + prompt1 = @catchup_q.add_prompt_to_queue | |
| 206 | + | |
| 207 | + prompt = Prompt.find(prompt1) | |
| 208 | + prompt.left_choice.deactivate! | |
| 209 | + @catchup_q.choose_prompt.should_not == prompt1 | |
| 210 | + end | |
| 202 | 211 | end |
| 203 | 212 | |
| 204 | 213 | context "exporting data" do | ... | ... |