aboutsummaryrefslogtreecommitdiff
blob: 28478092824484bef4c4e25dd94b717e94ecdbce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# returns r, and:
#   r.recruit     - recruit
#   r.answered    - array of questions r.recruit answered
#   r.unanswered  - array of questions r.recruit didn't answer
# r.answered and r.unanswered are in categories r.recruit is assigned
# (one answered and one unanswered question per category)
def recruit_with_answered_and_unanswered_questions(n=5)
    r = Struct.new(:recruit, :answered, :unanswered).new
    r.recruit     = Factory(:recruit)
    r.answered    = []
    r.unanswered  = []
    for i in 1..n
      # answered and unanswered ungrouped questions
      category =        Factory(:category)
      r.answered.push   Factory(:question_category, :category => category).question
      r.unanswered.push Factory(:question_category, :category => category).question

      Factory(:answer, :owner => r.recruit, :question => r.answered.last)

      # and answered and unanswered question in one group
      group =           Factory(:question_group)
      r.answered.push   Factory(:question_category,
                                :category => category,
                                :question => Factory(:question, :question_group => group)
                               ).question
                        Factory(:user_question_group, :user => r.recruit, :question => r.answered.last)
      # This question isn't unanswered! This is question user can't answer
                        Factory(:question_category,
                                :category => category,
                                :question => Factory(:question, :question_group => group))
      # add a unanswered grouped question
      r.unanswered.push Factory(:question_category,
                                :category => category,
                                :question => Factory(:question, :question_group => Factory(:question_group))
                               ).question
                        Factory(:user_question_group, :user => r.recruit, :question => r.unanswered.last)

      Factory(:answer, :owner => r.recruit, :question => r.answered.last)

      r.recruit.categories.push category
    end
    r
end

def recruit_with_answers_in_categories(mentor = nil, n_categories = 5, n_ans_in_cat = 3)
  r = Struct.new(:recruit, :mentor, :categories, :answers_in_cat, :all_answers,
                  :groups, :grouped_unanswered, :grouped_not_connected).new
  if mentor.nil?
    r.mentor        = Factory(:mentor)
  else
    r.mentor        = mentor
  end

  r.recruit         = Factory(:recruit, :mentor => r.mentor)
  r.categories      = []
  r.answers_in_cat  = []
  r.all_answers     = []
  for i in 1..n_categories
    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 => 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 => c,
                                            :question => Factory(:question, :question_group => group)).question
                                    Factory(:question_category,
                                            :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)
      r.answers_in_cat.last.push  r.all_answers.last
    end
  end

  r.all_answers.push        Factory(:answer,:question => Factory(:question, :question_group => Factory(:question_group)), :owner => r.recruit)
  unanswered                = Factory(:question, :question_group => Factory(:question_group))
  r.grouped_not_connected   = Factory(:question, :question_group => r.all_answers.last.question.question_group)

  r.groups                  = [r.all_answers.last.question.question_group, unanswered.question_group]
  r
end

def fabricate_users(*roles)
  r = []
  for role in roles
    r.push Factory(role)
  end
  r
end

def fabricate_all_roles()
  fabricate_users(:recruit, :mentor, :recruiter, :administrator)
end