fat_free_crm 0.17.3 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of fat_free_crm might be problematic. Click here for more details.

Files changed (195) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +11 -0
  3. data/.rubocop.yml +1 -1
  4. data/.rubocop_todo.yml +30 -8
  5. data/.travis.yml +14 -9
  6. data/CHANGELOG.md +43 -7
  7. data/CONTRIBUTORS.md +95 -53
  8. data/Gemfile +11 -7
  9. data/Gemfile.lock +83 -83
  10. data/README.md +7 -4
  11. data/app/assets/javascripts/crm.js.coffee +3 -3
  12. data/app/assets/javascripts/crm_select2.js.coffee +15 -14
  13. data/app/controllers/admin/field_groups_controller.rb +8 -1
  14. data/app/controllers/admin/fields_controller.rb +4 -4
  15. data/app/controllers/admin/groups_controller.rb +1 -1
  16. data/app/controllers/admin/tags_controller.rb +1 -1
  17. data/app/controllers/application_controller.rb +11 -0
  18. data/app/controllers/authentications_controller.rb +1 -1
  19. data/app/controllers/comments_controller.rb +15 -7
  20. data/app/controllers/entities/campaigns_controller.rb +7 -2
  21. data/app/controllers/entities/leads_controller.rb +9 -2
  22. data/app/controllers/entities/opportunities_controller.rb +13 -2
  23. data/app/controllers/entities_controller.rb +10 -5
  24. data/app/controllers/lists_controller.rb +5 -1
  25. data/app/controllers/tasks_controller.rb +15 -1
  26. data/app/helpers/accounts_helper.rb +1 -1
  27. data/app/helpers/application_helper.rb +2 -2
  28. data/app/helpers/leads_helper.rb +1 -1
  29. data/app/helpers/opportunities_helper.rb +56 -3
  30. data/app/helpers/tags_helper.rb +1 -1
  31. data/app/models/entities/lead.rb +0 -7
  32. data/app/models/entities/opportunity.rb +3 -2
  33. data/app/models/observers/opportunity_observer.rb +4 -4
  34. data/app/models/users/ability.rb +3 -4
  35. data/app/views/campaigns/_metrics.html.haml +3 -3
  36. data/app/views/home/_opportunity.html.haml +4 -19
  37. data/app/views/opportunities/_index_long.html.haml +1 -24
  38. data/app/views/opportunities/_sidebar_show.html.haml +3 -3
  39. data/app/views/opportunities/_top_section.html.haml +1 -1
  40. data/db/schema.rb +0 -3
  41. data/fat_free_crm.gemspec +1 -1
  42. data/lib/fat_free_crm/core_ext/string.rb +1 -1
  43. data/lib/fat_free_crm/engine.rb +2 -2
  44. data/lib/fat_free_crm/fields.rb +1 -1
  45. data/lib/fat_free_crm/permissions.rb +0 -14
  46. data/lib/fat_free_crm/version.rb +2 -2
  47. data/lib/tasks/ffcrm/setup.rake +4 -4
  48. data/spec/controllers/admin/users_controller_spec.rb +27 -27
  49. data/spec/controllers/authentications_controller_spec.rb +7 -7
  50. data/spec/controllers/comments_controller_spec.rb +13 -13
  51. data/spec/controllers/emails_controller_spec.rb +2 -2
  52. data/spec/controllers/entities/accounts_controller_spec.rb +56 -56
  53. data/spec/controllers/entities/campaigns_controller_spec.rb +66 -66
  54. data/spec/controllers/entities/contacts_controller_spec.rb +67 -67
  55. data/spec/controllers/entities/leads_controller_spec.rb +125 -125
  56. data/spec/controllers/entities/opportunities_controller_spec.rb +100 -100
  57. data/spec/controllers/home_controller_spec.rb +26 -26
  58. data/spec/controllers/passwords_controller_spec.rb +1 -1
  59. data/spec/controllers/tasks_controller_spec.rb +37 -37
  60. data/spec/controllers/users_controller_spec.rb +18 -18
  61. data/spec/factories/account_factories.rb +8 -8
  62. data/spec/factories/campaign_factories.rb +5 -5
  63. data/spec/factories/contact_factories.rb +10 -10
  64. data/spec/factories/field_factories.rb +7 -7
  65. data/spec/factories/lead_factories.rb +8 -8
  66. data/spec/factories/list_factories.rb +1 -1
  67. data/spec/factories/opportunity_factories.rb +6 -6
  68. data/spec/factories/sequences.rb +1 -1
  69. data/spec/factories/setting_factories.rb +3 -3
  70. data/spec/factories/shared_factories.rb +14 -14
  71. data/spec/factories/subscription_factories.rb +1 -1
  72. data/spec/factories/tag_factories.rb +1 -1
  73. data/spec/factories/task_factories.rb +4 -4
  74. data/spec/factories/user_factories.rb +13 -13
  75. data/spec/features/accounts_spec.rb +17 -4
  76. data/spec/features/admin/groups_spec.rb +1 -1
  77. data/spec/features/admin/users_spec.rb +1 -1
  78. data/spec/features/campaigns_spec.rb +4 -4
  79. data/spec/features/contacts_spec.rb +10 -4
  80. data/spec/features/dashboard_spec.rb +7 -7
  81. data/spec/features/leads_spec.rb +4 -4
  82. data/spec/features/opportunities_overview_spec.rb +15 -15
  83. data/spec/features/opportunities_spec.rb +34 -8
  84. data/spec/features/support/autocomlete_helper.rb +17 -0
  85. data/spec/features/support/browser.rb +3 -8
  86. data/spec/features/support/helpers.rb +1 -1
  87. data/spec/features/tasks_spec.rb +4 -4
  88. data/spec/helpers/admin/field_groups_helper_spec.rb +1 -1
  89. data/spec/helpers/application_helper_spec.rb +1 -1
  90. data/spec/helpers/tasks_helper_spec.rb +1 -1
  91. data/spec/helpers/users_helper_spec.rb +3 -3
  92. data/spec/lib/comment_extensions_spec.rb +1 -1
  93. data/spec/lib/mail_processor/base_spec.rb +3 -3
  94. data/spec/lib/mail_processor/comment_replies_spec.rb +3 -3
  95. data/spec/lib/mail_processor/dropbox_spec.rb +16 -16
  96. data/spec/lib/permissions_spec.rb +7 -25
  97. data/spec/mailers/user_mailer_spec.rb +7 -7
  98. data/spec/models/entities/account_spec.rb +31 -32
  99. data/spec/models/entities/campaign_spec.rb +18 -25
  100. data/spec/models/entities/contact_spec.rb +18 -21
  101. data/spec/models/entities/lead_spec.rb +9 -11
  102. data/spec/models/entities/opportunity_spec.rb +45 -45
  103. data/spec/models/fields/custom_field_spec.rb +17 -17
  104. data/spec/models/list_spec.rb +2 -2
  105. data/spec/models/observers/entity_observer_spec.rb +6 -6
  106. data/spec/models/polymorphic/address_spec.rb +1 -1
  107. data/spec/models/polymorphic/avatar_spec.rb +5 -5
  108. data/spec/models/polymorphic/comment_spec.rb +5 -5
  109. data/spec/models/polymorphic/task_spec.rb +65 -58
  110. data/spec/models/polymorphic/version_spec.rb +26 -26
  111. data/spec/models/setting_spec.rb +2 -2
  112. data/spec/models/users/preference_spec.rb +6 -6
  113. data/spec/models/users/user_spec.rb +26 -26
  114. data/spec/shared/models.rb +22 -22
  115. data/spec/spec_helper.rb +2 -2
  116. data/spec/support/auth_macros.rb +1 -1
  117. data/spec/support/macros.rb +3 -3
  118. data/spec/views/accounts/_edit.haml_spec.rb +1 -1
  119. data/spec/views/accounts/create.js.haml_spec.rb +2 -2
  120. data/spec/views/accounts/destroy.js.haml_spec.rb +1 -1
  121. data/spec/views/accounts/edit.js.haml_spec.rb +2 -2
  122. data/spec/views/accounts/index.haml_spec.rb +2 -2
  123. data/spec/views/accounts/index.js.haml_spec.rb +1 -1
  124. data/spec/views/accounts/show.haml_spec.rb +4 -4
  125. data/spec/views/accounts/update.js.haml_spec.rb +1 -1
  126. data/spec/views/admin/field_groups/create.js.haml_spec.rb +1 -1
  127. data/spec/views/admin/field_groups/destroy.js.haml_spec.rb +1 -1
  128. data/spec/views/admin/field_groups/edit.js.haml_spec.rb +1 -1
  129. data/spec/views/admin/field_groups/new.js.haml_spec.rb +1 -1
  130. data/spec/views/admin/field_groups/update.js.haml_spec.rb +1 -1
  131. data/spec/views/admin/users/create.js.haml_spec.rb +2 -2
  132. data/spec/views/admin/users/destroy.js.haml_spec.rb +2 -2
  133. data/spec/views/admin/users/edit.js.haml_spec.rb +2 -2
  134. data/spec/views/admin/users/index.haml_spec.rb +1 -1
  135. data/spec/views/admin/users/index.js.haml_spec.rb +2 -2
  136. data/spec/views/admin/users/reactivate.js.haml_spec.rb +1 -1
  137. data/spec/views/admin/users/suspend.js.haml_spec.rb +1 -1
  138. data/spec/views/admin/users/update.js.haml_spec.rb +1 -1
  139. data/spec/views/application/auto_complete.haml_spec.rb +3 -3
  140. data/spec/views/campaigns/_edit.haml_spec.rb +1 -1
  141. data/spec/views/campaigns/create.js.haml_spec.rb +3 -3
  142. data/spec/views/campaigns/destroy.js.haml_spec.rb +1 -1
  143. data/spec/views/campaigns/edit.js.haml_spec.rb +2 -2
  144. data/spec/views/campaigns/index.haml_spec.rb +1 -1
  145. data/spec/views/campaigns/index.js.haml_spec.rb +1 -1
  146. data/spec/views/campaigns/show.haml_spec.rb +4 -4
  147. data/spec/views/campaigns/update.js.haml_spec.rb +1 -1
  148. data/spec/views/contacts/_edit.haml_spec.rb +7 -7
  149. data/spec/views/contacts/_new.haml_spec.rb +1 -1
  150. data/spec/views/contacts/create.js.haml_spec.rb +4 -4
  151. data/spec/views/contacts/destroy.js.haml_spec.rb +1 -1
  152. data/spec/views/contacts/edit.js.haml_spec.rb +3 -3
  153. data/spec/views/contacts/index.haml_spec.rb +1 -1
  154. data/spec/views/contacts/index.js.html_spec.rb +1 -1
  155. data/spec/views/contacts/new.js.haml_spec.rb +1 -1
  156. data/spec/views/contacts/show.haml_spec.rb +3 -3
  157. data/spec/views/contacts/update.js.haml_spec.rb +2 -2
  158. data/spec/views/home/index.haml_spec.rb +1 -1
  159. data/spec/views/home/index.js.haml_spec.rb +1 -1
  160. data/spec/views/home/options.js.haml_spec.rb +2 -2
  161. data/spec/views/leads/_convert.haml_spec.rb +3 -3
  162. data/spec/views/leads/_edit.haml_spec.rb +2 -2
  163. data/spec/views/leads/_new.haml_spec.rb +2 -2
  164. data/spec/views/leads/_sidebar_show.haml_spec.rb +5 -5
  165. data/spec/views/leads/convert.js.haml_spec.rb +4 -4
  166. data/spec/views/leads/create.js.haml_spec.rb +5 -5
  167. data/spec/views/leads/destroy.js.haml_spec.rb +2 -2
  168. data/spec/views/leads/edit.js.haml_spec.rb +4 -4
  169. data/spec/views/leads/index.haml_spec.rb +1 -1
  170. data/spec/views/leads/index.js.haml_spec.rb +1 -1
  171. data/spec/views/leads/new.js.haml_spec.rb +1 -1
  172. data/spec/views/leads/promote.js.haml_spec.rb +7 -7
  173. data/spec/views/leads/reject.js.haml_spec.rb +2 -2
  174. data/spec/views/leads/show.haml_spec.rb +2 -2
  175. data/spec/views/leads/update.js.haml_spec.rb +4 -4
  176. data/spec/views/opportunities/_edit.haml_spec.rb +7 -7
  177. data/spec/views/opportunities/_new.haml_spec.rb +2 -2
  178. data/spec/views/opportunities/create.js.haml_spec.rb +6 -6
  179. data/spec/views/opportunities/destroy.js.haml_spec.rb +3 -3
  180. data/spec/views/opportunities/edit.js.haml_spec.rb +3 -3
  181. data/spec/views/opportunities/index.haml_spec.rb +1 -1
  182. data/spec/views/opportunities/index.js.haml_spec.rb +1 -1
  183. data/spec/views/opportunities/new.js.haml_spec.rb +1 -1
  184. data/spec/views/opportunities/show.haml_spec.rb +3 -3
  185. data/spec/views/opportunities/update.js.haml_spec.rb +4 -4
  186. data/spec/views/tasks/_edit.haml_spec.rb +1 -1
  187. data/spec/views/tasks/complete.js.haml_spec.rb +4 -4
  188. data/spec/views/tasks/create.js.haml_spec.rb +6 -6
  189. data/spec/views/tasks/destroy.js.haml_spec.rb +2 -2
  190. data/spec/views/tasks/index.haml_spec.rb +4 -4
  191. data/spec/views/tasks/new.js.haml_spec.rb +1 -1
  192. data/spec/views/tasks/uncomplete.js.haml_spec.rb +2 -2
  193. data/spec/views/tasks/update.js.haml_spec.rb +18 -18
  194. data/spec/views/users/upload_avatar.js.haml_spec.rb +2 -2
  195. metadata +5 -3
@@ -16,14 +16,14 @@ describe HomeController do
16
16
  end
17
17
 
18
18
  it "should get a list of activities" do
19
- activity = FactoryGirl.create(:version, item: FactoryGirl.create(:account, user: current_user))
19
+ activity = create(:version, item: create(:account, user: current_user))
20
20
  expect(controller).to receive(:get_activities).once.and_return([activity])
21
21
  get :index
22
22
  expect(assigns[:activities]).to eq([activity])
23
23
  end
24
24
 
25
25
  it "should not include views in the list of activities" do
26
- FactoryGirl.create(:version, item: FactoryGirl.create(:account, user: @current_user), event: "view")
26
+ create(:version, item: create(:account, user: @current_user), event: "view")
27
27
  expect(controller).to receive(:get_activities).once.and_return([])
28
28
 
29
29
  get :index
@@ -31,21 +31,21 @@ describe HomeController do
31
31
  end
32
32
 
33
33
  it "should get a list of my tasks ordered by due_at" do
34
- task_1 = FactoryGirl.create(:task, name: "Your first task", bucket: "due_asap", assigned_to: current_user.id)
35
- task_2 = FactoryGirl.create(:task, name: "Another task for you", bucket: "specific_time", calendar: 5.days.from_now.to_s, assigned_to: current_user.id)
36
- task_3 = FactoryGirl.create(:task, name: "Third Task", bucket: "due_next_week", assigned_to: current_user.id)
37
- task_4 = FactoryGirl.create(:task, name: "i've assigned it to myself", user: current_user, calendar: 20.days.from_now.to_s, assigned_to: nil, bucket: "specific_time")
34
+ task_1 = create(:task, name: "Your first task", bucket: "due_asap", assigned_to: current_user.id)
35
+ task_2 = create(:task, name: "Another task for you", bucket: "specific_time", calendar: 5.days.from_now.to_s, assigned_to: current_user.id)
36
+ task_3 = create(:task, name: "Third Task", bucket: "due_next_week", assigned_to: current_user.id)
37
+ task_4 = create(:task, name: "i've assigned it to myself", user: current_user, calendar: 20.days.from_now.to_s, assigned_to: nil, bucket: "specific_time")
38
38
 
39
- FactoryGirl.create(:task, name: "Someone else's Task", user_id: current_user.id, bucket: "due_asap", assigned_to: FactoryGirl.create(:user).id)
40
- FactoryGirl.create(:task, name: "Not my task", bucket: "due_asap", assigned_to: FactoryGirl.create(:user).id)
39
+ create(:task, name: "Someone else's Task", user_id: current_user.id, bucket: "due_asap", assigned_to: create(:user).id)
40
+ create(:task, name: "Not my task", bucket: "due_asap", assigned_to: create(:user).id)
41
41
 
42
42
  get :index
43
43
  expect(assigns[:my_tasks]).to eq([task_1, task_2, task_3, task_4])
44
44
  end
45
45
 
46
46
  it "should not display completed tasks" do
47
- my_task = FactoryGirl.create(:task, user_id: current_user.id, name: "Your first task", bucket: "due_asap", assigned_to: current_user.id)
48
- FactoryGirl.create(:task, user_id: current_user.id, name: "Completed task", bucket: "due_asap", completed_at: 1.days.ago, completed_by: current_user.id, assigned_to: current_user.id)
47
+ my_task = create(:task, user_id: current_user.id, name: "Your first task", bucket: "due_asap", assigned_to: current_user.id)
48
+ create(:task, user_id: current_user.id, name: "Completed task", bucket: "due_asap", completed_at: 1.days.ago, completed_by: current_user.id, assigned_to: current_user.id)
49
49
 
50
50
  get :index
51
51
 
@@ -53,26 +53,26 @@ describe HomeController do
53
53
  end
54
54
 
55
55
  it "should get a list of my opportunities ordered by closes_on" do
56
- opportunity_1 = FactoryGirl.create(:opportunity, name: "Your first opportunity", closes_on: 15.days.from_now, assigned_to: current_user.id, stage: 'proposal')
57
- opportunity_2 = FactoryGirl.create(:opportunity, name: "Another opportunity for you", closes_on: 10.days.from_now, assigned_to: current_user.id, stage: 'proposal')
58
- opportunity_3 = FactoryGirl.create(:opportunity, name: "Third Opportunity", closes_on: 5.days.from_now, assigned_to: current_user.id, stage: 'proposal')
59
- opportunity_4 = FactoryGirl.create(:opportunity, name: "Fourth Opportunity", closes_on: 50.days.from_now, assigned_to: nil, user_id: current_user.id, stage: 'proposal')
56
+ opportunity_1 = create(:opportunity, name: "Your first opportunity", closes_on: 15.days.from_now, assigned_to: current_user.id, stage: 'proposal')
57
+ opportunity_2 = create(:opportunity, name: "Another opportunity for you", closes_on: 10.days.from_now, assigned_to: current_user.id, stage: 'proposal')
58
+ opportunity_3 = create(:opportunity, name: "Third Opportunity", closes_on: 5.days.from_now, assigned_to: current_user.id, stage: 'proposal')
59
+ opportunity_4 = create(:opportunity, name: "Fourth Opportunity", closes_on: 50.days.from_now, assigned_to: nil, user_id: current_user.id, stage: 'proposal')
60
60
 
61
- FactoryGirl.create(:opportunity_in_pipeline, name: "Someone else's Opportunity", assigned_to: FactoryGirl.create(:user).id, stage: 'proposal')
62
- FactoryGirl.create(:opportunity_in_pipeline, name: "Not my opportunity", assigned_to: FactoryGirl.create(:user).id, stage: 'proposal')
61
+ create(:opportunity_in_pipeline, name: "Someone else's Opportunity", assigned_to: create(:user).id, stage: 'proposal')
62
+ create(:opportunity_in_pipeline, name: "Not my opportunity", assigned_to: create(:user).id, stage: 'proposal')
63
63
 
64
64
  get :index
65
65
  expect(assigns[:my_opportunities]).to eq([opportunity_3, opportunity_2, opportunity_1, opportunity_4])
66
66
  end
67
67
 
68
68
  it "should get a list of my accounts ordered by name" do
69
- account_1 = FactoryGirl.create(:account, name: "Anderson", assigned_to: current_user.id)
70
- account_2 = FactoryGirl.create(:account, name: "Wilson", assigned_to: current_user.id)
71
- account_3 = FactoryGirl.create(:account, name: "Triple", assigned_to: current_user.id)
72
- account_4 = FactoryGirl.create(:account, name: "Double", assigned_to: nil, user_id: current_user.id)
69
+ account_1 = create(:account, name: "Anderson", assigned_to: current_user.id)
70
+ account_2 = create(:account, name: "Wilson", assigned_to: current_user.id)
71
+ account_3 = create(:account, name: "Triple", assigned_to: current_user.id)
72
+ account_4 = create(:account, name: "Double", assigned_to: nil, user_id: current_user.id)
73
73
 
74
- FactoryGirl.create(:account, name: "Someone else's Account", assigned_to: FactoryGirl.create(:user).id)
75
- FactoryGirl.create(:account, name: "Not my account", assigned_to: FactoryGirl.create(:user).id)
74
+ create(:account, name: "Someone else's Account", assigned_to: create(:user).id)
75
+ create(:account, name: "Not my account", assigned_to: create(:user).id)
76
76
 
77
77
  get :index
78
78
  expect(assigns[:my_accounts]).to eq([account_1, account_4, account_3, account_2])
@@ -87,9 +87,9 @@ describe HomeController do
87
87
  end
88
88
 
89
89
  it "should assign instance variables for user preferences" do
90
- @asset = FactoryGirl.create(:preference, user: current_user, name: "activity_asset", value: Base64.encode64(Marshal.dump("tasks")))
91
- @user = FactoryGirl.create(:preference, user: current_user, name: "activity_user", value: Base64.encode64(Marshal.dump("Billy Bones")))
92
- @duration = FactoryGirl.create(:preference, user: current_user, name: "activity_duration", value: Base64.encode64(Marshal.dump("two days")))
90
+ @asset = create(:preference, user: current_user, name: "activity_asset", value: Base64.encode64(Marshal.dump("tasks")))
91
+ @user = create(:preference, user: current_user, name: "activity_user", value: Base64.encode64(Marshal.dump("Billy Bones")))
92
+ @duration = create(:preference, user: current_user, name: "activity_duration", value: Base64.encode64(Marshal.dump("two days")))
93
93
 
94
94
  get :options, xhr: true
95
95
  expect(assigns[:asset]).to eq("tasks")
@@ -122,7 +122,7 @@ describe HomeController do
122
122
  end
123
123
 
124
124
  it "should get a list of activities" do
125
- @activity = FactoryGirl.create(:version, item: FactoryGirl.create(:account, user: current_user))
125
+ @activity = create(:version, item: create(:account, user: current_user))
126
126
  expect(controller).to receive(:get_activities).once.and_return([@activity])
127
127
 
128
128
  get :index
@@ -8,7 +8,7 @@
8
8
  require 'spec_helper'
9
9
 
10
10
  describe PasswordsController do
11
- let(:user) { FactoryGirl.build(:user) }
11
+ let(:user) { build(:user) }
12
12
 
13
13
  describe "update" do
14
14
  before(:each) do
@@ -24,9 +24,9 @@ describe TasksController do
24
24
  end
25
25
  hash[due] << case view
26
26
  when "pending"
27
- FactoryGirl.create(:task, user: user, bucket: due.to_s)
27
+ create(:task, user: user, bucket: due.to_s)
28
28
  when "assigned"
29
- FactoryGirl.create(:task, user: user, bucket: due.to_s, assigned_to: 1)
29
+ create(:task, user: user, bucket: due.to_s, assigned_to: 1)
30
30
  when "completed"
31
31
  completed_at = case due
32
32
  when :completed_today
@@ -40,7 +40,7 @@ describe TasksController do
40
40
  when :completed_last_month
41
41
  Date.today.beginning_of_month - 1.day
42
42
  end
43
- FactoryGirl.create(:task, user: user, bucket: due.to_s, completed_at: completed_at)
43
+ create(:task, user: user, bucket: due.to_s, completed_at: completed_at)
44
44
  end
45
45
  hash
46
46
  end
@@ -142,8 +142,8 @@ describe TasksController do
142
142
  #----------------------------------------------------------------------------
143
143
  describe "responding to GET new" do
144
144
  it "should expose a new task as @task and render [new] template" do
145
- account = FactoryGirl.create(:account, user: current_user)
146
- @task = FactoryGirl.build(:task, user: current_user, asset: account)
145
+ account = create(:account, user: current_user)
146
+ @task = build(:task, user: current_user, asset: account)
147
147
  allow(Task).to receive(:new).and_return(@task)
148
148
  @bucket = Setting.unroll(:task_bucket)[1..-1] << ["On Specific Date...", :specific_time]
149
149
  @category = Setting.unroll(:task_category)
@@ -156,7 +156,7 @@ describe TasksController do
156
156
  end
157
157
 
158
158
  it "should find related asset when necessary" do
159
- @asset = FactoryGirl.create(:account, id: 42)
159
+ @asset = create(:account, id: 42)
160
160
 
161
161
  get :new, params: { related: "account_42" }, xhr: true
162
162
  expect(assigns[:asset]).to eq(@asset)
@@ -165,7 +165,7 @@ describe TasksController do
165
165
 
166
166
  describe "(when creating related task)" do
167
167
  it "should redirect to parent asset's index page with the message if parent asset got deleted" do
168
- @account = FactoryGirl.create(:account)
168
+ @account = create(:account)
169
169
  @account.destroy
170
170
 
171
171
  get :new, params: { related: "account_#{@account.id}" }, xhr: true
@@ -174,7 +174,7 @@ describe TasksController do
174
174
  end
175
175
 
176
176
  it "should redirect to parent asset's index page with the message if parent asset got protected" do
177
- @account = FactoryGirl.create(:account, access: "Private")
177
+ @account = create(:account, access: "Private")
178
178
 
179
179
  get :new, params: { related: "account_#{@account.id}" }, xhr: true
180
180
  expect(flash[:warning]).not_to eq(nil)
@@ -187,8 +187,8 @@ describe TasksController do
187
187
  #----------------------------------------------------------------------------
188
188
  describe "responding to GET edit" do
189
189
  it "should expose the requested task as @task and render [edit] template" do
190
- @asset = FactoryGirl.create(:account, user: current_user)
191
- @task = FactoryGirl.create(:task, user: current_user, asset: @asset)
190
+ @asset = create(:account, user: current_user)
191
+ @task = create(:task, user: current_user, asset: @asset)
192
192
  @bucket = Setting.unroll(:task_bucket)[1..-1] << ["On Specific Date...", :specific_time]
193
193
  @category = Setting.unroll(:task_category)
194
194
 
@@ -201,8 +201,8 @@ describe TasksController do
201
201
  end
202
202
 
203
203
  it "should find previously open task when necessary" do
204
- @task = FactoryGirl.create(:task, user: current_user)
205
- @previous = FactoryGirl.create(:task, id: 999, user: current_user)
204
+ @task = create(:task, user: current_user)
205
+ @previous = create(:task, id: 999, user: current_user)
206
206
 
207
207
  get :edit, params: { id: @task.id, previous: 999 }, xhr: true
208
208
  expect(assigns[:task]).to eq(@task)
@@ -212,7 +212,7 @@ describe TasksController do
212
212
 
213
213
  describe "(task got deleted or reassigned)" do
214
214
  it "should reload current page with the flash message if the task got deleted" do
215
- @task = FactoryGirl.create(:task, user: FactoryGirl.create(:user), assignee: current_user)
215
+ @task = create(:task, user: create(:user), assignee: current_user)
216
216
  @task.destroy
217
217
 
218
218
  get :edit, params: { id: @task.id }, xhr: true
@@ -221,7 +221,7 @@ describe TasksController do
221
221
  end
222
222
 
223
223
  it "should reload current page with the flash message if the task got reassigned" do
224
- @task = FactoryGirl.create(:task, user: FactoryGirl.create(:user), assignee: FactoryGirl.create(:user))
224
+ @task = create(:task, user: create(:user), assignee: create(:user))
225
225
 
226
226
  get :edit, params: { id: @task.id }, xhr: true
227
227
  expect(flash[:warning]).not_to eq(nil)
@@ -231,8 +231,8 @@ describe TasksController do
231
231
 
232
232
  describe "(previous task got deleted or reassigned)" do
233
233
  before(:each) do
234
- @task = FactoryGirl.create(:task, user: current_user)
235
- @previous = FactoryGirl.create(:task, user: FactoryGirl.create(:user), assignee: current_user)
234
+ @task = create(:task, user: current_user)
235
+ @previous = create(:task, user: create(:user), assignee: current_user)
236
236
  end
237
237
 
238
238
  it "should notify the view if previous task got deleted" do
@@ -245,7 +245,7 @@ describe TasksController do
245
245
  end
246
246
 
247
247
  it "should notify the view if previous task got reassigned" do
248
- @previous.update_attribute(:assignee, FactoryGirl.create(:user))
248
+ @previous.update_attribute(:assignee, create(:user))
249
249
 
250
250
  get :edit, params: { id: @task.id, previous: @previous.id }, xhr: true
251
251
  expect(flash[:warning]).to eq(nil)
@@ -261,7 +261,7 @@ describe TasksController do
261
261
  describe "responding to POST create" do
262
262
  describe "with valid params" do
263
263
  it "should expose a newly created task as @task and render [create] template" do
264
- @task = FactoryGirl.build(:task, user: current_user)
264
+ @task = build(:task, user: current_user)
265
265
  allow(Task).to receive(:new).and_return(@task)
266
266
 
267
267
  post :create, params: { task: { name: "Hello world" } }, xhr: true
@@ -273,7 +273,7 @@ describe TasksController do
273
273
 
274
274
  ["", "?view=pending", "?view=assigned", "?view=completed"].each do |view|
275
275
  it "should update tasks sidebar when [create] is being called from [/tasks#{view}] page" do
276
- @task = FactoryGirl.build(:task, user: current_user)
276
+ @task = build(:task, user: current_user)
277
277
  allow(Task).to receive(:new).and_return(@task)
278
278
 
279
279
  request.env["HTTP_REFERER"] = "http://localhost/tasks#{view}"
@@ -285,7 +285,7 @@ describe TasksController do
285
285
 
286
286
  describe "with invalid params" do
287
287
  it "should expose a newly created but unsaved task as @lead and still render [create] template" do
288
- @task = FactoryGirl.build(:task, name: nil, user: current_user)
288
+ @task = build(:task, name: nil, user: current_user)
289
289
  allow(Task).to receive(:new).and_return(@task)
290
290
 
291
291
  post :create, params: { task: {} }, xhr: true
@@ -303,7 +303,7 @@ describe TasksController do
303
303
  describe "responding to PUT update" do
304
304
  describe "with valid params" do
305
305
  it "should update the requested task, expose it as @task, and render [update] template" do
306
- @task = FactoryGirl.create(:task, name: "Hi", user: current_user)
306
+ @task = create(:task, name: "Hi", user: current_user)
307
307
 
308
308
  put :update, params: { id: @task.id, task: { name: "Hello" } }, xhr: true
309
309
  expect(@task.reload.name).to eq("Hello")
@@ -315,7 +315,7 @@ describe TasksController do
315
315
 
316
316
  ["", "?view=pending", "?view=assigned", "?view=completed"].each do |view|
317
317
  it "should update tasks sidebar when [update] is being called from [/tasks#{view}] page" do
318
- @task = FactoryGirl.create(:task, name: "Hi", user: current_user)
318
+ @task = create(:task, name: "Hi", user: current_user)
319
319
 
320
320
  request.env["HTTP_REFERER"] = "http://localhost/tasks#{view}"
321
321
  put :update, params: { id: @task.id, task: { name: "Hello" } }, xhr: true
@@ -326,7 +326,7 @@ describe TasksController do
326
326
 
327
327
  describe "with invalid params" do
328
328
  it "should not update the task, but still expose it as @task and render [update] template" do
329
- @task = FactoryGirl.create(:task, name: "Hi", user: current_user)
329
+ @task = create(:task, name: "Hi", user: current_user)
330
330
 
331
331
  put :update, params: { id: @task.id, task: { name: nil } }, xhr: true
332
332
  expect(@task.reload.name).to eq("Hi")
@@ -339,7 +339,7 @@ describe TasksController do
339
339
 
340
340
  describe "task got deleted or reassigned" do
341
341
  it "should reload current page with the flash message if the task got deleted" do
342
- @task = FactoryGirl.create(:task, user: FactoryGirl.create(:user), assignee: current_user)
342
+ @task = create(:task, user: create(:user), assignee: current_user)
343
343
  @task.destroy
344
344
 
345
345
  put :update, params: { id: @task.id, task: { name: "Hello" } }, xhr: true
@@ -348,7 +348,7 @@ describe TasksController do
348
348
  end
349
349
 
350
350
  it "should reload current page with the flash message if the task got reassigned" do
351
- @task = FactoryGirl.create(:task, user: FactoryGirl.create(:user), assignee: FactoryGirl.create(:user))
351
+ @task = create(:task, user: create(:user), assignee: create(:user))
352
352
 
353
353
  put :update, params: { id: @task.id, task: { name: "Hello" } }, xhr: true
354
354
  expect(flash[:warning]).not_to eq(nil)
@@ -362,7 +362,7 @@ describe TasksController do
362
362
  #----------------------------------------------------------------------------
363
363
  describe "responding to DELETE destroy" do
364
364
  it "should destroy the requested task and render [destroy] template" do
365
- @task = FactoryGirl.create(:task, user: current_user)
365
+ @task = create(:task, user: current_user)
366
366
 
367
367
  delete :destroy, params: { id: @task.id, bucket: "due_asap" }, xhr: true
368
368
  expect(assigns(:task)).to eq(@task)
@@ -373,7 +373,7 @@ describe TasksController do
373
373
 
374
374
  ["", "?view=pending", "?view=assigned", "?view=completed"].each do |view|
375
375
  it "should update sidebar when [destroy] is being called from [/tasks#{view}]" do
376
- @task = FactoryGirl.create(:task, user: current_user)
376
+ @task = create(:task, user: current_user)
377
377
 
378
378
  request.env["HTTP_REFERER"] = "http://localhost/tasks#{view}"
379
379
  delete :destroy, params: { id: @task.id, bucket: "due_asap" }, xhr: true
@@ -382,7 +382,7 @@ describe TasksController do
382
382
  end
383
383
 
384
384
  it "should not update sidebar when [destroy] is being called from asset page" do
385
- @task = FactoryGirl.create(:task, user: current_user)
385
+ @task = create(:task, user: current_user)
386
386
 
387
387
  delete :destroy, params: { id: @task.id }, xhr: true
388
388
  expect(assigns[:task_total]).to eq(nil)
@@ -390,7 +390,7 @@ describe TasksController do
390
390
 
391
391
  describe "task got deleted or reassigned" do
392
392
  it "should reload current page with the flash message if the task got deleted" do
393
- @task = FactoryGirl.create(:task, user: FactoryGirl.create(:user), assignee: current_user)
393
+ @task = create(:task, user: create(:user), assignee: current_user)
394
394
  @task.destroy
395
395
 
396
396
  delete :destroy, params: { id: @task.id }, xhr: true
@@ -399,7 +399,7 @@ describe TasksController do
399
399
  end
400
400
 
401
401
  it "should reload current page with the flash message if the task got reassigned" do
402
- @task = FactoryGirl.create(:task, user: FactoryGirl.create(:user), assignee: FactoryGirl.create(:user))
402
+ @task = create(:task, user: create(:user), assignee: create(:user))
403
403
 
404
404
  delete :destroy, params: { id: @task.id }, xhr: true
405
405
  expect(flash[:warning]).not_to eq(nil)
@@ -413,7 +413,7 @@ describe TasksController do
413
413
  #----------------------------------------------------------------------------
414
414
  describe "responding to PUT complete" do
415
415
  it "should change task status, expose task as @task, and render [complete] template" do
416
- @task = FactoryGirl.create(:task, completed_at: nil, user: current_user)
416
+ @task = create(:task, completed_at: nil, user: current_user)
417
417
 
418
418
  put :complete, params: { id: @task.id }, xhr: true
419
419
  expect(@task.reload.completed_at).not_to eq(nil)
@@ -423,7 +423,7 @@ describe TasksController do
423
423
  end
424
424
 
425
425
  it "should change task status, expose task as @task, and render [complete] template where task.bucket = 'specific_time'" do
426
- @task = FactoryGirl.create(:task, completed_at: nil, user: current_user, bucket: "specific_time", calendar: "01/01/2010 1:00 AM")
426
+ @task = create(:task, completed_at: nil, user: current_user, bucket: "specific_time", calendar: "01/01/2010 1:00 AM")
427
427
 
428
428
  put :complete, params: { id: @task.id }, xhr: true
429
429
  expect(@task.reload.completed_at).not_to eq(nil)
@@ -433,7 +433,7 @@ describe TasksController do
433
433
  end
434
434
 
435
435
  it "should change update tasks sidebar if bucket is not empty" do
436
- @task = FactoryGirl.create(:task, completed_at: nil, user: current_user)
436
+ @task = create(:task, completed_at: nil, user: current_user)
437
437
 
438
438
  put :complete, params: { id: @task.id, bucket: "due_asap" }, xhr: true
439
439
  expect(assigns[:task_total]).to be_an_instance_of(HashWithIndifferentAccess)
@@ -441,7 +441,7 @@ describe TasksController do
441
441
 
442
442
  describe "task got deleted or reassigned" do
443
443
  it "should reload current page with the flash message if the task got deleted" do
444
- @task = FactoryGirl.create(:task, user: FactoryGirl.create(:user), assignee: current_user)
444
+ @task = create(:task, user: create(:user), assignee: current_user)
445
445
  @task.destroy
446
446
 
447
447
  put :complete, params: { id: @task.id }, xhr: true
@@ -450,7 +450,7 @@ describe TasksController do
450
450
  end
451
451
 
452
452
  it "should reload current page with the flash message if the task got reassigned" do
453
- @task = FactoryGirl.create(:task, user: FactoryGirl.create(:user), assignee: FactoryGirl.create(:user))
453
+ @task = create(:task, user: create(:user), assignee: create(:user))
454
454
 
455
455
  put :complete, params: { id: @task.id }, xhr: true
456
456
  expect(flash[:warning]).not_to eq(nil)
@@ -464,7 +464,7 @@ describe TasksController do
464
464
  #----------------------------------------------------------------------------
465
465
  describe "responding to PUT uncomplete" do
466
466
  it "should change task status, expose task as @task, and render template" do
467
- @task = FactoryGirl.create(:task, completed_at: Time.now, user: current_user)
467
+ @task = create(:task, completed_at: Time.now, user: current_user)
468
468
 
469
469
  put :uncomplete, params: { id: @task.id }, xhr: true
470
470
  expect(@task.reload.completed_at).to eq(nil)
@@ -475,7 +475,7 @@ describe TasksController do
475
475
 
476
476
  describe "task got deleted" do
477
477
  it "should reload current page with the flash message if the task got deleted" do
478
- @task = FactoryGirl.create(:task, user: FactoryGirl.create(:user), assignee: current_user, completed_at: Time.now)
478
+ @task = create(:task, user: create(:user), assignee: current_user, completed_at: Time.now)
479
479
  @task.destroy
480
480
 
481
481
  put :uncomplete, params: { id: @task.id }, xhr: true
@@ -92,7 +92,7 @@ describe UsersController do
92
92
  describe "if user is allowed to sign up" do
93
93
  it "should expose a new user as @user and render [new] template" do
94
94
  expect(User).to receive(:can_signup?).and_return(true)
95
- @user = FactoryGirl.build(:user)
95
+ @user = build(:user)
96
96
  allow(User).to receive(:new).and_return(@user)
97
97
 
98
98
  get :new
@@ -147,7 +147,7 @@ describe UsersController do
147
147
  @username = "none"
148
148
  @email = @username + "@example.com"
149
149
  @password = "secret"
150
- @user = FactoryGirl.build(:user, username: @username, email: @email)
150
+ @user = build(:user, username: @username, email: @email)
151
151
  allow(User).to receive(:new).and_return(@user)
152
152
  end
153
153
 
@@ -172,7 +172,7 @@ describe UsersController do
172
172
  describe "with invalid params" do
173
173
  it "assigns a newly created but unsaved user as @user and renders [new] template" do
174
174
  login_admin
175
- @user = FactoryGirl.build(:user, username: "", email: "")
175
+ @user = build(:user, username: "", email: "")
176
176
  allow(User).to receive(:new).and_return(@user)
177
177
 
178
178
  post :create, params: { user: {} }
@@ -253,7 +253,7 @@ describe UsersController do
253
253
  end
254
254
 
255
255
  it "should delete avatar if user chooses to use Gravatar" do
256
- @avatar = FactoryGirl.create(:avatar, user: @user, entity: @user)
256
+ @avatar = create(:avatar, user: @user, entity: @user)
257
257
 
258
258
  put :upload_avatar, params: { id: @user.id, gravatar: 1 }, xhr: true
259
259
  expect(@user.reload.avatar).to eq(nil)
@@ -261,7 +261,7 @@ describe UsersController do
261
261
  end
262
262
 
263
263
  it "should do nothing if user hasn't specified the avatar file to upload" do
264
- @avatar = FactoryGirl.create(:avatar, user: @user, entity: @user)
264
+ @avatar = create(:avatar, user: @user, entity: @user)
265
265
 
266
266
  put :upload_avatar, params: { id: @user.id }, xhr: true
267
267
  expect(@user.avatar).to eq(@avatar)
@@ -373,19 +373,19 @@ describe UsersController do
373
373
  end
374
374
 
375
375
  it "should assign @users_with_opportunities" do
376
- FactoryGirl.create(:opportunity, stage: "prospecting", assignee: @user)
376
+ create(:opportunity, stage: "prospecting", assignee: @user)
377
377
  get :opportunities_overview, xhr: true
378
378
  expect(assigns[:users_with_opportunities]).to eq([@current_user])
379
379
  end
380
380
 
381
381
  it "@users_with_opportunities should be ordered by name" do
382
- FactoryGirl.create(:opportunity, stage: "prospecting", assignee: @user)
382
+ create(:opportunity, stage: "prospecting", assignee: @user)
383
383
 
384
- user1 = FactoryGirl.create(:user, first_name: "Zebra", last_name: "Stripes")
385
- FactoryGirl.create(:opportunity, stage: "prospecting", assignee: user1)
384
+ user1 = create(:user, first_name: "Zebra", last_name: "Stripes")
385
+ create(:opportunity, stage: "prospecting", assignee: user1)
386
386
 
387
- user2 = FactoryGirl.create(:user, first_name: "Bilbo", last_name: "Magic")
388
- FactoryGirl.create(:opportunity, stage: "prospecting", assignee: user2)
387
+ user2 = create(:user, first_name: "Bilbo", last_name: "Magic")
388
+ create(:opportunity, stage: "prospecting", assignee: user2)
389
389
 
390
390
  get :opportunities_overview, xhr: true
391
391
 
@@ -393,9 +393,9 @@ describe UsersController do
393
393
  end
394
394
 
395
395
  it "should assign @unassigned_opportunities with only open unassigned opportunities" do
396
- @o1 = FactoryGirl.create(:opportunity, stage: "prospecting", assignee: nil)
397
- @o2 = FactoryGirl.create(:opportunity, stage: "won", assignee: nil)
398
- @o3 = FactoryGirl.create(:opportunity, stage: "prospecting", assignee: nil)
396
+ @o1 = create(:opportunity, stage: "prospecting", assignee: nil)
397
+ @o2 = create(:opportunity, stage: "won", assignee: nil)
398
+ @o3 = create(:opportunity, stage: "prospecting", assignee: nil)
399
399
 
400
400
  get :opportunities_overview, xhr: true
401
401
 
@@ -404,9 +404,9 @@ describe UsersController do
404
404
  end
405
405
 
406
406
  it "@unassigned_opportunities should be ordered by stage" do
407
- @o1 = FactoryGirl.create(:opportunity, stage: "proposal", assignee: nil)
408
- @o2 = FactoryGirl.create(:opportunity, stage: "prospecting", assignee: nil)
409
- @o3 = FactoryGirl.create(:opportunity, stage: "negotiation", assignee: nil)
407
+ @o1 = create(:opportunity, stage: "proposal", assignee: nil)
408
+ @o2 = create(:opportunity, stage: "prospecting", assignee: nil)
409
+ @o3 = create(:opportunity, stage: "negotiation", assignee: nil)
410
410
 
411
411
  get :opportunities_overview, xhr: true
412
412
 
@@ -419,7 +419,7 @@ describe UsersController do
419
419
  end
420
420
 
421
421
  it "should not include users who have no open assigned opportunities" do
422
- FactoryGirl.create(:opportunity, stage: "won", assignee: @user)
422
+ create(:opportunity, stage: "won", assignee: @user)
423
423
 
424
424
  get :opportunities_overview, xhr: true
425
425
  expect(assigns[:users_with_opportunities]).to eq([])