diff options
-rw-r--r-- | app/models/user.rb | 3 | ||||
-rw-r--r-- | features/recruits_who_answered_all_questions.feature | 2 | ||||
-rw-r--r-- | spec/models/user_spec.rb | 16 | ||||
-rw-r--r-- | spec/support/factory_orders.rb | 11 |
4 files changed, 18 insertions, 14 deletions
diff --git a/app/models/user.rb b/app/models/user.rb index dff9295..87d9024 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -57,7 +57,8 @@ class User < ActiveRecord::Base AND NOT EXISTS (SELECT questions.id FROM questions INNER JOIN user_question_groups ON questions.id = user_question_groups.question_id WHERE user_question_groups.user_id = users.id AND NOT EXISTS ( - SELECT answers.id FROM answers WHERE answers.question_id = questions.id AND answers.owner_id = users.id))" + SELECT answers.id FROM answers WHERE answers.question_id = questions.id AND answers.owner_id = users.id)) + AND id IN (SELECT user_id FROM user_categories)" # --- Signup lifecycle --- # lifecycle do diff --git a/features/recruits_who_answered_all_questions.feature b/features/recruits_who_answered_all_questions.feature index d5861c0..33f5110 100644 --- a/features/recruits_who_answered_all_questions.feature +++ b/features/recruits_who_answered_all_questions.feature @@ -8,10 +8,8 @@ Feature: Viewing recruits who answered all questions And recruit "recruit1" in following categories: |some cat| And user "recruit1" answered all questions in "some cat" - And a user "recruit2" who is "recruit" When I am on ready recruits page Then I should see "recruit1" within ".user .collection" - And I should see "recruit2" within ".user .collection" Scenario: Go to ready recruits from homepage Given a question "some question" in category "some cat" diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 4fdbbcf..76a1a45 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -123,10 +123,15 @@ describe User do Factory(:recruit).answered_all_questions?.should be_true end + it "should not consider recruits with no categories as answered all" do + r = Factory(:recruit) + r.categories.should be_empty + User.recruits_answered_all.count.should == 0 + end + it "should return proper recruits with all questions` answered" do - # recruits that should be returned - correct_answered_all = [Factory(:recruit)] - correct_answered_all.push recruit_with_answers_in_categories.recruit + # recruit that should be returned + correct_answered_all = [recruit_with_answers_in_categories.recruit] # and some other users recruit_with_answered_and_unanswered_questions @@ -134,10 +139,7 @@ describe User do Factory(:mentor) Factory(:recruiter) - answered_all = User.recruits_answered_all - - (answered_all - correct_answered_all).should be_empty - (correct_answered_all - answered_all).should be_empty + User.recruits_answered_all.should == correct_answered_all end it "should allow recruiters to change nick of other users" do diff --git a/spec/support/factory_orders.rb b/spec/support/factory_orders.rb index 9548330..2847809 100644 --- a/spec/support/factory_orders.rb +++ b/spec/support/factory_orders.rb @@ -56,20 +56,23 @@ def recruit_with_answers_in_categories(mentor = nil, n_categories = 5, n_ans_in_ r.answers_in_cat = [] r.all_answers = [] for i in 1..n_categories - r.categories.push Factory(:category) + c = Factory(:category) + r.categories.push c + r.recruit.categories.push c + r.answers_in_cat.push [] for i in 1..n_ans_in_cat - question = Factory(:question_category, :category => r.categories.last).question + question = Factory(:question_category, :category => c).question r.all_answers.push Factory(:answer, :owner => r.recruit, :question => question) r.answers_in_cat.last.push r.all_answers.last # group of two questions, answered group = Factory(:question_group) question = Factory(:question_category, - :category => r.categories.last, + :category => c, :question => Factory(:question, :question_group => group)).question Factory(:question_category, - :category => r.categories.last, + :category => c, :question => Factory(:question, :question_group => group)) Factory(:user_question_group, :user => r.recruit, :question => question) r.all_answers.push Factory(:answer, :owner => r.recruit, :question => question) |