fat_free_crm 0.20.1 → 0.22.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 (352) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +170 -0
  3. data/README.md +3 -6
  4. data/app/assets/config/fat_free_crm.js +3 -0
  5. data/app/assets/config/manifest.js +1 -0
  6. data/app/controllers/admin/field_groups_controller.rb +0 -2
  7. data/app/controllers/admin/tags_controller.rb +1 -1
  8. data/app/controllers/admin/users_controller.rb +1 -1
  9. data/app/controllers/application_controller.rb +11 -0
  10. data/app/controllers/comments_controller.rb +2 -0
  11. data/app/controllers/emails_controller.rb +2 -0
  12. data/app/controllers/entities/accounts_controller.rb +3 -1
  13. data/app/controllers/entities/campaigns_controller.rb +3 -1
  14. data/app/controllers/entities/contacts_controller.rb +3 -1
  15. data/app/controllers/entities/leads_controller.rb +4 -2
  16. data/app/controllers/entities/opportunities_controller.rb +3 -1
  17. data/app/controllers/entities_controller.rb +2 -0
  18. data/app/controllers/home_controller.rb +2 -0
  19. data/app/controllers/lists_controller.rb +2 -0
  20. data/app/controllers/tasks_controller.rb +3 -1
  21. data/app/controllers/users_controller.rb +2 -0
  22. data/app/helpers/accounts_helper.rb +2 -0
  23. data/app/helpers/application_helper.rb +22 -3
  24. data/app/helpers/tasks_helper.rb +1 -2
  25. data/app/models/entities/account.rb +1 -1
  26. data/app/models/entities/campaign.rb +1 -1
  27. data/app/models/entities/contact.rb +1 -1
  28. data/app/models/entities/lead.rb +1 -1
  29. data/app/models/entities/opportunity.rb +1 -1
  30. data/app/models/fields/custom_field.rb +2 -2
  31. data/app/models/observers/entity_observer.rb +1 -1
  32. data/app/models/polymorphic/avatar.rb +1 -30
  33. data/app/models/polymorphic/comment.rb +1 -1
  34. data/app/models/polymorphic/task.rb +1 -0
  35. data/app/models/setting.rb +4 -5
  36. data/app/models/users/user.rb +1 -1
  37. data/app/views/home/index.xls.builder +1 -0
  38. data/app/views/shared/_address.html.haml +1 -1
  39. data/bin/bundle +108 -2
  40. data/bin/rails +3 -3
  41. data/bin/rake +2 -2
  42. data/bin/setup +12 -15
  43. data/config/application.rb +22 -4
  44. data/config/boot.rb +3 -5
  45. data/config/cable.yml +10 -0
  46. data/config/database.yml +26 -0
  47. data/config/environment.rb +4 -3
  48. data/config/environments/development.rb +47 -11
  49. data/config/environments/production.rb +17 -15
  50. data/config/environments/test.rb +19 -9
  51. data/config/initializers/action_mailer.rb +1 -0
  52. data/config/initializers/content_security_policy.rb +21 -26
  53. data/config/initializers/custom_field_ransack_translations.rb +1 -0
  54. data/config/initializers/filter_parameter_logging.rb +6 -2
  55. data/config/initializers/inflections.rb +4 -4
  56. data/config/initializers/permissions_policy.rb +12 -0
  57. data/config/puma.rb +2 -2
  58. data/config/storage.yml +34 -0
  59. data/db/demo/field_groups.yml +2 -1
  60. data/db/migrate/20100928030617_drop_openid_tables.rb +2 -1
  61. data/db/migrate/20230526211831_create_active_storage_tables.active_storage.rb +51 -0
  62. data/db/migrate/20230526212613_convert_to_active_storage.rb +107 -0
  63. data/db/schema.rb +108 -76
  64. data/db/seeds/fields.rb +7 -21
  65. data/lib/development_tasks/license.rake +10 -10
  66. data/lib/fat_free_crm/callback.rb +2 -3
  67. data/lib/fat_free_crm/errors.rb +2 -10
  68. data/lib/fat_free_crm/exceptions.rb +1 -0
  69. data/lib/fat_free_crm/fields.rb +4 -5
  70. data/lib/fat_free_crm/gem_dependencies.rb +0 -1
  71. data/lib/fat_free_crm/i18n.rb +1 -1
  72. data/lib/fat_free_crm/mail_processor/dropbox.rb +1 -1
  73. data/lib/fat_free_crm/version.rb +3 -3
  74. data/public/avatars/User/2/large_rails.png +0 -0
  75. data/public/avatars/User/2/medium_rails.png +0 -0
  76. data/public/avatars/User/2/small_rails.png +0 -0
  77. data/public/avatars/User/2/thumb_rails.png +0 -0
  78. data/public/avatars/User/3/large_rails.png +0 -0
  79. data/public/avatars/User/3/medium_rails.png +0 -0
  80. data/public/avatars/User/3/original_rails.png +0 -0
  81. data/public/avatars/User/3/small_rails.png +0 -0
  82. data/public/avatars/User/3/thumb_rails.png +0 -0
  83. data/public/avatars/User/4/large_rails.png +0 -0
  84. data/public/avatars/User/4/medium_rails.png +0 -0
  85. data/public/avatars/User/4/original_rails.png +0 -0
  86. data/public/avatars/User/4/small_rails.png +0 -0
  87. data/public/avatars/User/4/thumb_rails.png +0 -0
  88. data/public/avatars/User/6/large_rails.png +0 -0
  89. data/public/avatars/User/6/medium_rails.png +0 -0
  90. data/public/avatars/User/6/original_rails.png +0 -0
  91. data/public/avatars/User/6/small_rails.png +0 -0
  92. data/public/avatars/User/6/thumb_rails.png +0 -0
  93. data/public/avatars/User/7/large_rails.png +0 -0
  94. data/public/avatars/User/7/medium_rails.png +0 -0
  95. data/public/avatars/User/7/original_rails.png +0 -0
  96. data/public/avatars/User/7/small_rails.png +0 -0
  97. data/public/avatars/User/7/thumb_rails.png +0 -0
  98. metadata +73 -288
  99. data/.docker/nginx/sites-enabled/ffcrm.conf +0 -8
  100. data/.github/workflows/brakeman-analysis.yml +0 -46
  101. data/.github/workflows/rubocop-analysis.yml +0 -40
  102. data/.github/workflows/ruby.yml +0 -52
  103. data/.gitignore +0 -39
  104. data/.rubocop.yml +0 -73
  105. data/.rubocop_todo.yml +0 -286
  106. data/.teatro.yml +0 -3
  107. data/.travis.yml +0 -60
  108. data/CONTRIBUTORS.md +0 -135
  109. data/Capfile +0 -27
  110. data/Dockerfile +0 -51
  111. data/Gemfile +0 -106
  112. data/Gemfile.lock +0 -529
  113. data/Guardfile +0 -26
  114. data/Procfile +0 -1
  115. data/SECURITY.md +0 -11
  116. data/Vagrantfile +0 -92
  117. data/config/initializers/new_framework_defaults_6_0.rb +0 -46
  118. data/custom_plan.rb +0 -11
  119. data/docker-compose.yml +0 -27
  120. data/fat_free_crm.gemspec +0 -62
  121. data/lib/tasks/.gitkeep +0 -0
  122. data/lib/tasks/.gitkeep~master +0 -0
  123. data/script/rails +0 -8
  124. data/spec/controllers/admin/groups_controller_spec.rb +0 -11
  125. data/spec/controllers/admin/users_controller_spec.rb +0 -251
  126. data/spec/controllers/applications_controller_spec.rb +0 -43
  127. data/spec/controllers/comments_controller_spec.rb +0 -195
  128. data/spec/controllers/emails_controller_spec.rb +0 -37
  129. data/spec/controllers/entities/accounts_controller_spec.rb +0 -607
  130. data/spec/controllers/entities/campaigns_controller_spec.rb +0 -645
  131. data/spec/controllers/entities/contacts_controller_spec.rb +0 -705
  132. data/spec/controllers/entities/leads_controller_spec.rb +0 -1009
  133. data/spec/controllers/entities/opportunities_controller_spec.rb +0 -904
  134. data/spec/controllers/entities_controller_spec.rb +0 -47
  135. data/spec/controllers/home_controller_spec.rb +0 -235
  136. data/spec/controllers/lists_controller_spec.rb +0 -11
  137. data/spec/controllers/tasks_controller_spec.rb +0 -517
  138. data/spec/controllers/users_controller_spec.rb +0 -375
  139. data/spec/factories/account_factories.rb +0 -40
  140. data/spec/factories/campaign_factories.rb +0 -30
  141. data/spec/factories/contact_factories.rb +0 -45
  142. data/spec/factories/field_factories.rb +0 -40
  143. data/spec/factories/lead_factories.rb +0 -36
  144. data/spec/factories/list_factories.rb +0 -13
  145. data/spec/factories/opportunity_factories.rb +0 -39
  146. data/spec/factories/sequences.rb +0 -32
  147. data/spec/factories/setting_factories.rb +0 -15
  148. data/spec/factories/shared_factories.rb +0 -70
  149. data/spec/factories/subscription_factories.rb +0 -13
  150. data/spec/factories/tag_factories.rb +0 -12
  151. data/spec/factories/task_factories.rb +0 -29
  152. data/spec/factories/user_factories.rb +0 -66
  153. data/spec/features/acceptance_helper.rb +0 -11
  154. data/spec/features/accounts_spec.rb +0 -126
  155. data/spec/features/admin/groups_spec.rb +0 -31
  156. data/spec/features/admin/users_spec.rb +0 -40
  157. data/spec/features/campaigns_spec.rb +0 -104
  158. data/spec/features/contacts_spec.rb +0 -134
  159. data/spec/features/dashboard_spec.rb +0 -67
  160. data/spec/features/devise/sign_in_spec.rb +0 -58
  161. data/spec/features/devise/sign_up_spec.rb +0 -36
  162. data/spec/features/leads_spec.rb +0 -138
  163. data/spec/features/opportunities_overview_spec.rb +0 -88
  164. data/spec/features/opportunities_spec.rb +0 -132
  165. data/spec/features/support/autocomlete_helper.rb +0 -17
  166. data/spec/features/support/browser.rb +0 -28
  167. data/spec/features/support/headless.rb +0 -19
  168. data/spec/features/support/paths.rb +0 -48
  169. data/spec/features/support/selector_helpers.rb +0 -36
  170. data/spec/features/tasks_spec.rb +0 -94
  171. data/spec/helpers/accounts_helper_spec.rb +0 -73
  172. data/spec/helpers/admin/field_groups_helper_spec.rb +0 -20
  173. data/spec/helpers/admin/plugins_helper_spec.rb +0 -11
  174. data/spec/helpers/admin/settings_helper_spec.rb +0 -11
  175. data/spec/helpers/admin/users_helper_spec.rb +0 -11
  176. data/spec/helpers/application_helper_spec.rb +0 -86
  177. data/spec/helpers/authentications_helper_spec.rb +0 -16
  178. data/spec/helpers/campaigns_helper_spec.rb +0 -16
  179. data/spec/helpers/comments_helper_spec.rb +0 -16
  180. data/spec/helpers/contacts_helper_spec.rb +0 -16
  181. data/spec/helpers/emails_helper_spec.rb +0 -11
  182. data/spec/helpers/fields_helper_spec.rb +0 -12
  183. data/spec/helpers/groups_helper_spec.rb +0 -21
  184. data/spec/helpers/home_helper_spec.rb +0 -16
  185. data/spec/helpers/leads_helper_spec.rb +0 -16
  186. data/spec/helpers/lists_helper_spec.rb +0 -21
  187. data/spec/helpers/opportunities_helper_spec.rb +0 -16
  188. data/spec/helpers/passwords_helper_spec.rb +0 -16
  189. data/spec/helpers/tasks_helper_spec.rb +0 -20
  190. data/spec/helpers/users_helper_spec.rb +0 -39
  191. data/spec/lib/comment_extensions_spec.rb +0 -42
  192. data/spec/lib/core_ext/string_spec.rb +0 -23
  193. data/spec/lib/errors_spec.rb +0 -32
  194. data/spec/lib/fields_spec.rb +0 -101
  195. data/spec/lib/mail_processor/base_spec.rb +0 -169
  196. data/spec/lib/mail_processor/comment_replies_spec.rb +0 -70
  197. data/spec/lib/mail_processor/dropbox_spec.rb +0 -306
  198. data/spec/lib/mail_processor/sample_emails/dropbox.rb +0 -173
  199. data/spec/lib/permissions_spec.rb +0 -155
  200. data/spec/lib/secret_token_generator_spec.rb +0 -69
  201. data/spec/lib/view_factory_spec.rb +0 -69
  202. data/spec/mailers/devise_mailer_spec.rb +0 -35
  203. data/spec/mailers/subscription_mailer_spec.rb +0 -48
  204. data/spec/mailers/user_mailer_spec.rb +0 -115
  205. data/spec/models/entities/account_contact_spec.rb +0 -34
  206. data/spec/models/entities/account_opportunity_spec.rb +0 -34
  207. data/spec/models/entities/account_spec.rb +0 -206
  208. data/spec/models/entities/campaign_spec.rb +0 -131
  209. data/spec/models/entities/contact_opportunity_spec.rb +0 -34
  210. data/spec/models/entities/contact_spec.rb +0 -314
  211. data/spec/models/entities/lead_spec.rb +0 -102
  212. data/spec/models/entities/opportunity_spec.rb +0 -299
  213. data/spec/models/fields/custom_field_date_pair_spec.rb +0 -92
  214. data/spec/models/fields/custom_field_pair_spec.rb +0 -76
  215. data/spec/models/fields/custom_field_spec.rb +0 -129
  216. data/spec/models/fields/field_group_spec.rb +0 -29
  217. data/spec/models/fields/field_spec.rb +0 -69
  218. data/spec/models/list_spec.rb +0 -19
  219. data/spec/models/observers/entity_observer_spec.rb +0 -74
  220. data/spec/models/polymorphic/address_spec.rb +0 -34
  221. data/spec/models/polymorphic/avatar_spec.rb +0 -46
  222. data/spec/models/polymorphic/comment_spec.rb +0 -45
  223. data/spec/models/polymorphic/email_spec.rb +0 -53
  224. data/spec/models/polymorphic/task_spec.rb +0 -395
  225. data/spec/models/polymorphic/version_spec.rb +0 -241
  226. data/spec/models/setting_spec.rb +0 -77
  227. data/spec/models/users/abilities/user_ability_spec.rb +0 -70
  228. data/spec/models/users/group_spec.rb +0 -11
  229. data/spec/models/users/permission_spec.rb +0 -58
  230. data/spec/models/users/preference_spec.rb +0 -71
  231. data/spec/models/users/user_spec.rb +0 -238
  232. data/spec/routing/accounts_routing_spec.rb +0 -60
  233. data/spec/routing/admin/users_routing_spec.rb +0 -40
  234. data/spec/routing/campaigns_routing_spec.rb +0 -64
  235. data/spec/routing/comments_routing_spec.rb +0 -32
  236. data/spec/routing/contacts_routing_spec.rb +0 -60
  237. data/spec/routing/emails_routing_spec.rb +0 -40
  238. data/spec/routing/leads_routing_spec.rb +0 -88
  239. data/spec/routing/opportunities_routing_spec.rb +0 -64
  240. data/spec/routing/tasks_routing_spec.rb +0 -68
  241. data/spec/routing/users_routing_spec.rb +0 -106
  242. data/spec/shared/controllers.rb +0 -99
  243. data/spec/shared/models.rb +0 -141
  244. data/spec/spec_helper.rb +0 -117
  245. data/spec/support/assert_select.rb +0 -167
  246. data/spec/support/devise_helpers.rb +0 -28
  247. data/spec/support/feature_helpers.rb +0 -32
  248. data/spec/support/macros.rb +0 -49
  249. data/spec/support/mail_processor_mocks.rb +0 -37
  250. data/spec/support/uploaded_file.rb +0 -10
  251. data/spec/views/accounts/_edit.haml_spec.rb +0 -43
  252. data/spec/views/accounts/_new.haml_spec.rb +0 -42
  253. data/spec/views/accounts/create.js.haml_spec.rb +0 -52
  254. data/spec/views/accounts/destroy.js.haml_spec.rb +0 -34
  255. data/spec/views/accounts/edit.js.haml_spec.rb +0 -66
  256. data/spec/views/accounts/index.haml_spec.rb +0 -43
  257. data/spec/views/accounts/index.js.haml_spec.rb +0 -34
  258. data/spec/views/accounts/new.js.haml_spec.rb +0 -44
  259. data/spec/views/accounts/show.haml_spec.rb +0 -38
  260. data/spec/views/accounts/update.js.haml_spec.rb +0 -93
  261. data/spec/views/admin/field_groups/create.js.haml_spec.rb +0 -30
  262. data/spec/views/admin/field_groups/destroy.js.haml_spec.rb +0 -31
  263. data/spec/views/admin/field_groups/edit.js.haml_spec.rb +0 -24
  264. data/spec/views/admin/field_groups/new.js.haml_spec.rb +0 -25
  265. data/spec/views/admin/field_groups/update.js.haml_spec.rb +0 -29
  266. data/spec/views/admin/users/_create.haml_spec.rb +0 -23
  267. data/spec/views/admin/users/create.js.haml_spec.rb +0 -41
  268. data/spec/views/admin/users/destroy.js.haml_spec.rb +0 -47
  269. data/spec/views/admin/users/edit.js.haml_spec.rb +0 -44
  270. data/spec/views/admin/users/index.haml_spec.rb +0 -22
  271. data/spec/views/admin/users/index.js.haml_spec.rb +0 -26
  272. data/spec/views/admin/users/new.js.haml_spec.rb +0 -34
  273. data/spec/views/admin/users/reactivate.js.haml_spec.rb +0 -22
  274. data/spec/views/admin/users/show.haml_spec.rb +0 -18
  275. data/spec/views/admin/users/suspend.js.haml_spec.rb +0 -22
  276. data/spec/views/admin/users/update.js.haml_spec.rb +0 -37
  277. data/spec/views/application/auto_complete.haml_spec.rb +0 -48
  278. data/spec/views/campaigns/_edit.haml_spec.rb +0 -44
  279. data/spec/views/campaigns/_new.haml_spec.rb +0 -41
  280. data/spec/views/campaigns/create.js.haml_spec.rb +0 -49
  281. data/spec/views/campaigns/destroy.js.haml_spec.rb +0 -31
  282. data/spec/views/campaigns/edit.js.haml_spec.rb +0 -66
  283. data/spec/views/campaigns/index.haml_spec.rb +0 -37
  284. data/spec/views/campaigns/index.js.haml_spec.rb +0 -34
  285. data/spec/views/campaigns/new.js.haml_spec.rb +0 -50
  286. data/spec/views/campaigns/show.haml_spec.rb +0 -38
  287. data/spec/views/campaigns/update.js.haml_spec.rb +0 -78
  288. data/spec/views/comments/edit.js.haml_spec.rb +0 -30
  289. data/spec/views/contacts/_edit.haml_spec.rb +0 -73
  290. data/spec/views/contacts/_new.haml_spec.rb +0 -52
  291. data/spec/views/contacts/create.js.haml_spec.rb +0 -65
  292. data/spec/views/contacts/destroy.js.haml_spec.rb +0 -45
  293. data/spec/views/contacts/edit.js.haml_spec.rb +0 -74
  294. data/spec/views/contacts/index.haml_spec.rb +0 -37
  295. data/spec/views/contacts/index.js.html_spec.rb +0 -34
  296. data/spec/views/contacts/new.js.haml_spec.rb +0 -47
  297. data/spec/views/contacts/show.haml_spec.rb +0 -35
  298. data/spec/views/contacts/update.js.haml_spec.rb +0 -128
  299. data/spec/views/home/index.haml_spec.rb +0 -36
  300. data/spec/views/home/index.js.haml_spec.rb +0 -33
  301. data/spec/views/home/options.js.haml_spec.rb +0 -53
  302. data/spec/views/leads/_convert.haml_spec.rb +0 -30
  303. data/spec/views/leads/_edit.haml_spec.rb +0 -47
  304. data/spec/views/leads/_new.haml_spec.rb +0 -45
  305. data/spec/views/leads/_sidebar_show.haml_spec.rb +0 -31
  306. data/spec/views/leads/convert.js.haml_spec.rb +0 -79
  307. data/spec/views/leads/create.js.haml_spec.rb +0 -67
  308. data/spec/views/leads/destroy.js.haml_spec.rb +0 -47
  309. data/spec/views/leads/edit.js.haml_spec.rb +0 -76
  310. data/spec/views/leads/index.haml_spec.rb +0 -37
  311. data/spec/views/leads/index.js.haml_spec.rb +0 -34
  312. data/spec/views/leads/new.js.haml_spec.rb +0 -47
  313. data/spec/views/leads/promote.js.haml_spec.rb +0 -135
  314. data/spec/views/leads/reject.js.haml_spec.rb +0 -45
  315. data/spec/views/leads/show.haml_spec.rb +0 -32
  316. data/spec/views/leads/update.js.haml_spec.rb +0 -118
  317. data/spec/views/opportunities/_edit.haml_spec.rb +0 -70
  318. data/spec/views/opportunities/_new.haml_spec.rb +0 -51
  319. data/spec/views/opportunities/create.js.haml_spec.rb +0 -86
  320. data/spec/views/opportunities/destroy.js.haml_spec.rb +0 -64
  321. data/spec/views/opportunities/edit.js.haml_spec.rb +0 -75
  322. data/spec/views/opportunities/index.haml_spec.rb +0 -38
  323. data/spec/views/opportunities/index.js.haml_spec.rb +0 -35
  324. data/spec/views/opportunities/new.js.haml_spec.rb +0 -54
  325. data/spec/views/opportunities/show.haml_spec.rb +0 -35
  326. data/spec/views/opportunities/update.js.haml_spec.rb +0 -143
  327. data/spec/views/tasks/_edit.haml_spec.rb +0 -50
  328. data/spec/views/tasks/complete.js.haml_spec.rb +0 -67
  329. data/spec/views/tasks/create.js.haml_spec.rb +0 -119
  330. data/spec/views/tasks/destroy.js.haml_spec.rb +0 -57
  331. data/spec/views/tasks/edit.js.haml_spec.rb +0 -76
  332. data/spec/views/tasks/index.haml_spec.rb +0 -46
  333. data/spec/views/tasks/new.js.haml_spec.rb +0 -49
  334. data/spec/views/tasks/uncomplete.js.haml_spec.rb +0 -45
  335. data/spec/views/tasks/update.js.haml_spec.rb +0 -140
  336. data/spec/views/users/avatar.js.haml_spec.rb +0 -35
  337. data/spec/views/users/change_password.js.haml_spec.rb +0 -51
  338. data/spec/views/users/edit.js.haml_spec.rb +0 -35
  339. data/spec/views/users/password.js.haml_spec.rb +0 -36
  340. data/spec/views/users/update.js.haml_spec.rb +0 -46
  341. data/spec/views/users/upload_avatar.js.haml_spec.rb +0 -45
  342. data/vendor/gems/globby-0.1.2/LICENSE.txt +0 -20
  343. data/vendor/gems/globby-0.1.2/README.md +0 -65
  344. data/vendor/gems/globby-0.1.2/Rakefile +0 -9
  345. data/vendor/gems/globby-0.1.2/lib/globby/glob.rb +0 -90
  346. data/vendor/gems/globby-0.1.2/lib/globby/globject.rb +0 -18
  347. data/vendor/gems/globby-0.1.2/lib/globby/result.rb +0 -20
  348. data/vendor/gems/globby-0.1.2/lib/globby.rb +0 -47
  349. data/vendor/gems/globby-0.1.2/spec/gitignore_spec.rb +0 -109
  350. data/vendor/gems/globby-0.1.2/spec/globby_spec.rb +0 -93
  351. data/zeus.json +0 -22
  352. /data/{spec/fixtures/rails.png → public/avatars/User/2/original_rails.png} +0 -0
@@ -1,375 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright (c) 2008-2013 Michael Dvorkin and contributors.
4
- #
5
- # Fat Free CRM is freely distributable under the terms of MIT license.
6
- # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
7
- #------------------------------------------------------------------------------
8
- require 'spec_helper'
9
-
10
- describe UsersController do
11
- # GET /users/1
12
- # GET /users/1.xml HTML
13
- #----------------------------------------------------------------------------
14
- describe "responding to GET show" do
15
- before(:each) do
16
- login
17
- end
18
-
19
- it "should render [show] template" do
20
- get :show, params: { id: current_user.id }
21
- expect(assigns[:user]).to eq(current_user)
22
- expect(response).to render_template("users/show")
23
- end
24
-
25
- it "should expose current user as @user if no specific user was requested" do
26
- get :show
27
- expect(assigns[:user]).to eq(current_user)
28
- expect(response).to render_template("users/show")
29
- end
30
-
31
- it "should show user if admin user" do
32
- @user = create(:user)
33
- login_admin
34
- get :show, params: { id: @user.id }
35
- expect(assigns[:user]).to eq(@user)
36
- expect(response).to render_template("users/show")
37
- end
38
-
39
- it "should not show user if not admin user" do
40
- @user = create(:user)
41
- get :show, params: { id: @user.id }
42
- expect(response).to redirect_to(root_url)
43
- end
44
-
45
- describe "with mime type of JSON" do
46
- before(:each) do
47
- request.env["HTTP_ACCEPT"] = "application/json"
48
- end
49
-
50
- it "should render the requested user as JSON" do
51
- expect(User).to receive(:find).and_return(current_user)
52
- expect_any_instance_of(User).to receive(:to_json).and_return("generated JSON")
53
- get :show, params: { id: current_user.id }
54
- expect(response.body).to eq("generated JSON")
55
- end
56
-
57
- it "should render current user as JSON if no specific user was requested" do
58
- expect_any_instance_of(User).to receive(:to_json).and_return("generated JSON")
59
-
60
- get :show
61
- expect(response.body).to eq("generated JSON")
62
- end
63
- end
64
-
65
- describe "with mime type of xml" do
66
- before(:each) do
67
- request.env["HTTP_ACCEPT"] = "application/xml"
68
- end
69
-
70
- it "should render the requested user as XML" do
71
- expect(User).to receive(:find).and_return(current_user)
72
- expect_any_instance_of(User).to receive(:to_xml).and_return("generated XML")
73
-
74
- get :show, params: { id: current_user.id }
75
- expect(response.body).to eq("generated XML")
76
- end
77
-
78
- it "should render current user as XML if no specific user was requested" do
79
- expect_any_instance_of(User).to receive(:to_xml).and_return("generated XML")
80
-
81
- get :show
82
- expect(response.body).to eq("generated XML")
83
- end
84
- end
85
- end
86
-
87
- # GET /users/1/edit AJAX
88
- #----------------------------------------------------------------------------
89
- describe "responding to GET edit" do
90
- it "should expose current user as @user and render [edit] template" do
91
- login
92
- @user = current_user
93
- get :edit, params: { id: @user.id }, xhr: true
94
- expect(assigns[:user]).to eq(current_user)
95
- expect(response).to render_template("users/edit")
96
- end
97
-
98
- it "should not allow current user to edit another user" do
99
- @user = create(:user)
100
- login
101
- get :edit, params: { id: @user.id }, xhr: true
102
- expect(response.body).to eql("window.location.reload();")
103
- end
104
-
105
- it "should allow admin to edit another user" do
106
- login_admin
107
- @user = create(:user)
108
- get :edit, params: { id: @user.id }, xhr: true
109
- expect(assigns[:user]).to eq(@user)
110
- expect(response).to render_template("users/edit")
111
- end
112
- end
113
-
114
- # PUT /users/1
115
- # PUT /users/1.xml AJAX
116
- #----------------------------------------------------------------------------
117
- describe "responding to PUT update" do
118
- before(:each) do
119
- login
120
- @user = current_user
121
- end
122
-
123
- describe "with valid params" do
124
- it "should update user information and render [update] template" do
125
- put :update, params: { id: @user.id, user: { first_name: "Billy", last_name: "Bones" } }, xhr: true
126
- @user.reload
127
- expect(@user.first_name).to eq("Billy")
128
- expect(@user.last_name).to eq("Bones")
129
- expect(assigns[:user]).to eq(@user)
130
- expect(response).to render_template("users/update")
131
- end
132
- end
133
-
134
- describe "with a email with whitespace" do
135
- it "should update the user information and render [update] template" do
136
- put :update, params: { id: @user.id, user: { first_name: "Billy", last_name: "Bones", alt_email: " john@email.com " } }, xhr: true
137
- @user.reload
138
- expect(@user.first_name).to eq("Billy")
139
- expect(@user.last_name).to eq("Bones")
140
- expect(assigns[:user]).to eq(@user)
141
- expect(response).to render_template("users/update")
142
- expect(@user.alt_email).to eq("john@email.com")
143
- end
144
- end
145
-
146
- describe "with invalid params" do
147
- it "should not update the user information and redraw [update] template" do
148
- put :update, params: { id: @user.id, user: { first_name: nil } }, xhr: true
149
- expect(@user.reload.first_name).to eq(current_user.first_name)
150
- expect(assigns[:user]).to eq(@user)
151
- expect(response).to render_template("users/update")
152
- end
153
- end
154
- end
155
-
156
- # DELETE /users/1
157
- # DELETE /users/1.xml HTML and AJAX (not directly exposed yet)
158
- #----------------------------------------------------------------------------
159
- describe "responding to DELETE destroy" do
160
- before(:each) do
161
- login
162
- end
163
-
164
- it "should destroy the requested user" do
165
- end
166
-
167
- it "should redirect to the users list" do
168
- end
169
- end
170
-
171
- # GET /users/1/avatar
172
- # GET /users/1/avatar.xml AJAX
173
- #----------------------------------------------------------------------------
174
- describe "responding to GET avatar" do
175
- before(:each) do
176
- login
177
- @user = current_user
178
- end
179
-
180
- it "should expose current user as @user and render [avatar] template" do
181
- get :avatar, params: { id: @user.id }, xhr: true
182
- expect(assigns[:user]).to eq(current_user)
183
- expect(response).to render_template("users/avatar")
184
- end
185
- end
186
-
187
- # PUT /users/1/upload_avatar
188
- # PUT /users/1/upload_avatar.xml AJAX
189
- #----------------------------------------------------------------------------
190
- describe "responding to PUT update_avatar" do
191
- before(:each) do
192
- login
193
- @user = current_user
194
- end
195
-
196
- it "should delete avatar if user chooses to use Gravatar" do
197
- @avatar = create(:avatar, user: @user, entity: @user)
198
-
199
- put :upload_avatar, params: { id: @user.id, gravatar: 1 }, xhr: true
200
- expect(@user.reload.avatar).to eq(nil)
201
- expect(response).to render_template("users/upload_avatar")
202
- end
203
-
204
- it "should do nothing if user hasn't specified the avatar file to upload" do
205
- @avatar = create(:avatar, user: @user, entity: @user)
206
-
207
- put :upload_avatar, params: { id: @user.id }, xhr: true
208
- expect(@user.avatar).to eq(@avatar)
209
- expect(response).to render_template("users/upload_avatar")
210
- end
211
-
212
- it "should save the user avatar if it was successfully uploaded and resized" do
213
- @image = fixture_file_upload('/rails.png', 'image/png')
214
-
215
- put :upload_avatar, params: { id: @user.id, avatar: { image: @image } }, xhr: true
216
- expect(@user.avatar).not_to eq(nil)
217
- expect(@user.avatar.image_file_size).to eq(@image.size)
218
- expect(@user.avatar.image_file_name).to eq(@image.original_filename)
219
- expect(@user.avatar.image_content_type).to eq(@image.content_type)
220
- expect(response).to render_template("users/upload_avatar")
221
- end
222
-
223
- # -------------------------- Fix later --------------------------------
224
- # it "should return errors if the avatar failed to get uploaded and resized" do
225
- # @image = fixture_file_upload("spec/fixtures/rails.png", "image/png")
226
- # @user.stub(:save).and_return(false) # make it fail
227
-
228
- # put :upload_avatar, :id => @user.id, :avatar => { :image => @image }
229
- # @user.avatar.errors.should_not be_empty
230
- # @user.avatar.should have(1).error # .error_on(:image)
231
- # response.should render_template("users/upload_avatar")
232
- # end
233
- end
234
-
235
- # GET /users/1/password
236
- # GET /users/1/password.xml AJAX
237
- #----------------------------------------------------------------------------
238
- describe "responding to GET avatar" do
239
- before(:each) do
240
- login
241
- @user = current_user
242
- end
243
-
244
- it "should expose current user as @user and render [pssword] template" do
245
- get :password, params: { id: @user.id }, xhr: true
246
- expect(assigns[:user]).to eq(current_user)
247
- expect(response).to render_template("users/password")
248
- end
249
- end
250
-
251
- # PUT /users/1/change_password
252
- # PUT /users/1/change_password.xml AJAX
253
- #----------------------------------------------------------------------------
254
- describe "responding to PUT change_password" do
255
- before(:each) do
256
- @old_password = 'foobar123'
257
- @user = FactoryBot.create(:user, password: @old_password, password_confirmation: @old_password)
258
- perform_login(@user)
259
- @old_encrypted_password = @user.encrypted_password
260
- @new_password = 'secret?!'
261
- end
262
-
263
- it "should set new user password" do
264
- put :change_password, params: { id: @user.id, current_password: @old_password, user: { password: @new_password, password_confirmation: @new_password } }, xhr: true
265
- expect(assigns[:user]).to eq(@user)
266
- expect(assigns[:user].password).to eq('secret?!')
267
- expect(assigns[:user].errors).to be_empty
268
- expect(assigns[:user].reload.encrypted_password).to_not eq(@old_encrypted_password) # password change
269
- expect(response).to render_template("users/change_password")
270
- end
271
-
272
- it "should not allow to change password if current password is blank" do
273
- current_user.encrypted_password = nil
274
- put :change_password, params: { id: @user.id, current_password: "", user: { password: @new_password, password_confirmation: @new_password } }, xhr: true
275
- expect(assigns[:user].password).to eq(nil)
276
- expect(assigns[:user].errors.size).to eq(1) # .error_on(:current_password)
277
- expect(assigns[:user].reload.encrypted_password).to eq(@old_encrypted_password) # password stays the same
278
- expect(response).to render_template("users/change_password")
279
- end
280
-
281
- it "should not change user password if password field is blank" do
282
- put :change_password, params: { id: @user.id, current_password: @old_password, user: { password: "", password_confirmation: "" } }, xhr: true
283
- expect(assigns[:user]).to eq(current_user)
284
- expect(assigns[:user].password).to eq(nil)
285
- expect(assigns[:user].errors).to be_empty # no errors
286
- expect(assigns[:user].reload.encrypted_password).to eq(@old_encrypted_password) # password stays the same
287
- expect(response).to render_template("users/change_password")
288
- end
289
-
290
- it "should require valid current password" do
291
- put :change_password, params: { id: @user.id, current_password: "what?!", user: { password: @new_password, password_confirmation: @new_password } }, xhr: true
292
- expect(assigns[:user].password).to eq(nil)
293
- expect(assigns[:user].errors.size).to eq(1) # .error_on(:current_password)
294
- expect(assigns[:user].reload.encrypted_password).to eq(@old_encrypted_password) # password stays the same
295
- expect(response).to render_template("users/change_password")
296
- end
297
-
298
- it "should require new password and password confirmation to match" do
299
- put :change_password, params: { id: @user.id, current_password: @old_password, user: { password: @new_password, password_confirmation: "none" } }, xhr: true
300
- expect(assigns[:user].password).to eq('secret?!')
301
- expect(assigns[:user].errors.size).to eq(1) # .error_on(:current_password)
302
- expect(assigns[:user].reload.encrypted_password).to eq(@old_encrypted_password) # password stays the same
303
- expect(response).to render_template("users/change_password")
304
- end
305
- end
306
-
307
- # GET /users/opportunities
308
- # GET /users/opportunities.xml HTML
309
- #----------------------------------------------------------------------------
310
- describe "responding to GET opportunities_overview" do
311
- before(:each) do
312
- login
313
- @user = current_user
314
- @user.update(first_name: "Apple", last_name: "Boy")
315
- end
316
-
317
- it "should assign @users_with_opportunities" do
318
- create(:opportunity, stage: "prospecting", assignee: @user)
319
- get :opportunities_overview, xhr: true
320
- expect(assigns[:users_with_opportunities]).to eq([@user])
321
- end
322
-
323
- it "@users_with_opportunities should be ordered by name" do
324
- create(:opportunity, stage: "prospecting", assignee: @user)
325
-
326
- user1 = create(:user, first_name: "Zebra", last_name: "Stripes")
327
- create(:opportunity, stage: "prospecting", assignee: user1)
328
-
329
- user2 = create(:user, first_name: "Bilbo", last_name: "Magic")
330
- create(:opportunity, stage: "prospecting", assignee: user2)
331
-
332
- get :opportunities_overview, xhr: true
333
-
334
- expect(assigns[:users_with_opportunities]).to eq([@user, user2, user1])
335
- end
336
-
337
- it "should assign @unassigned_opportunities with only open unassigned opportunities" do
338
- @o1 = create(:opportunity, stage: "prospecting", assignee: nil)
339
- @o2 = create(:opportunity, stage: "won", assignee: nil)
340
- @o3 = create(:opportunity, stage: "prospecting", assignee: nil)
341
-
342
- get :opportunities_overview, xhr: true
343
-
344
- expect(assigns[:unassigned_opportunities]).to include(@o1, @o3)
345
- expect(assigns[:unassigned_opportunities]).not_to include(@o2)
346
- end
347
-
348
- it "@unassigned_opportunities should be ordered by stage" do
349
- @o1 = create(:opportunity, stage: "proposal", assignee: nil)
350
- @o2 = create(:opportunity, stage: "prospecting", assignee: nil)
351
- @o3 = create(:opportunity, stage: "negotiation", assignee: nil)
352
-
353
- get :opportunities_overview, xhr: true
354
-
355
- expect(assigns[:unassigned_opportunities]).to eq([@o3, @o1, @o2])
356
- end
357
-
358
- it "should not include users who have no assigned opportunities" do
359
- get :opportunities_overview, xhr: true
360
- expect(assigns[:users_with_opportunities]).to eq([])
361
- end
362
-
363
- it "should not include users who have no open assigned opportunities" do
364
- create(:opportunity, stage: "won", assignee: @user)
365
-
366
- get :opportunities_overview, xhr: true
367
- expect(assigns[:users_with_opportunities]).to eq([])
368
- end
369
-
370
- it "should render opportunities overview" do
371
- get :opportunities_overview, xhr: true
372
- expect(response).to render_template("users/opportunities_overview")
373
- end
374
- end
375
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright (c) 2008-2013 Michael Dvorkin and contributors.
4
- #
5
- # Fat Free CRM is freely distributable under the terms of MIT license.
6
- # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
7
- #------------------------------------------------------------------------------
8
- FactoryBot.define do
9
- factory :account do
10
- user
11
- assigned_to { nil }
12
- name { FFaker::Company.name + rand(100).to_s }
13
- access { "Public" }
14
- website { FactoryBot.generate(:website) }
15
- email { FFaker::Internet.email }
16
- toll_free_phone { FFaker::PhoneNumber.phone_number }
17
- phone { FFaker::PhoneNumber.phone_number }
18
- fax { FFaker::PhoneNumber.phone_number }
19
- background_info { FFaker::Lorem.paragraph[0, 255] }
20
- deleted_at { nil }
21
- updated_at { FactoryBot.generate(:time) }
22
- created_at { FactoryBot.generate(:time) }
23
- end
24
-
25
- factory :account_contact do
26
- account
27
- contact
28
- deleted_at { nil }
29
- updated_at { FactoryBot.generate(:time) }
30
- created_at { FactoryBot.generate(:time) }
31
- end
32
-
33
- factory :account_opportunity do
34
- account
35
- opportunity
36
- deleted_at { nil }
37
- updated_at { FactoryBot.generate(:time) }
38
- created_at { FactoryBot.generate(:time) }
39
- end
40
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright (c) 2008-2013 Michael Dvorkin and contributors.
4
- #
5
- # Fat Free CRM is freely distributable under the terms of MIT license.
6
- # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
7
- #------------------------------------------------------------------------------
8
- FactoryBot.define do
9
- factory :campaign do
10
- user
11
- name { FFaker::Lorem.sentence[0, 64] }
12
- assigned_to { nil }
13
- access { "Public" }
14
- status { %w[planned started completed planned started completed on_hold called_off].sample }
15
- budget { rand(500) }
16
- target_leads { rand(200) }
17
- target_conversion { rand(20) }
18
- target_revenue { rand(1000) }
19
- leads_count { rand(200) }
20
- opportunities_count { rand(20) }
21
- revenue { rand(1000) }
22
- ends_on { FactoryBot.generate(:date) }
23
- starts_on { FactoryBot.generate(:date) }
24
- objectives { FFaker::Lorem.paragraph[0, 255] }
25
- background_info { FFaker::Lorem.paragraph[0, 255] }
26
- deleted_at { nil }
27
- updated_at { FactoryBot.generate(:time) }
28
- created_at { FactoryBot.generate(:time) }
29
- end
30
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright (c) 2008-2013 Michael Dvorkin and contributors.
4
- #
5
- # Fat Free CRM is freely distributable under the terms of MIT license.
6
- # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
7
- #------------------------------------------------------------------------------
8
- FactoryBot.define do
9
- factory :contact do
10
- user
11
- lead
12
- assigned_to { nil }
13
- reports_to { nil }
14
- first_name { FFaker::Name.first_name }
15
- last_name { FFaker::Name.last_name }
16
- access { "Public" }
17
- title { FactoryBot.generate(:title) }
18
- department { FFaker::Name.name + " Dept." }
19
- source { %w[campaign cold_call conference online referral self web word_of_mouth other].sample }
20
- email { FFaker::Internet.email }
21
- alt_email { FFaker::Internet.email }
22
- phone { FFaker::PhoneNumber.phone_number }
23
- mobile { FFaker::PhoneNumber.phone_number }
24
- fax { FFaker::PhoneNumber.phone_number }
25
- blog { FactoryBot.generate(:website) }
26
- facebook { FactoryBot.generate(:website) }
27
- linkedin { FactoryBot.generate(:website) }
28
- twitter { FactoryBot.generate(:website) }
29
- do_not_call { false }
30
- born_on { "1992-10-10" }
31
- background_info { FFaker::Lorem.paragraph[0, 255] }
32
- deleted_at { nil }
33
- updated_at { FactoryBot.generate(:time) }
34
- created_at { FactoryBot.generate(:time) }
35
- end
36
-
37
- factory :contact_opportunity do
38
- contact
39
- opportunity
40
- role { "foo" }
41
- deleted_at { nil }
42
- updated_at { FactoryBot.generate(:time) }
43
- created_at { FactoryBot.generate(:time) }
44
- end
45
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright (c) 2008-2013 Michael Dvorkin and contributors.
4
- #
5
- # Fat Free CRM is freely distributable under the terms of MIT license.
6
- # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
7
- #------------------------------------------------------------------------------
8
- FactoryBot.define do
9
- sequence :klass_name do |_x|
10
- %w[Contact Account Opportunity Lead Campaign].sample
11
- end
12
-
13
- sequence(:field_position) { |x| x }
14
-
15
- sequence :field_label do |x|
16
- FFaker::Internet.user_name + x.to_s
17
- end
18
-
19
- factory :field_group do
20
- klass_name { FactoryBot.generate(:klass_name) }
21
- label { FactoryBot.generate(:field_label) }
22
- tag
23
- end
24
-
25
- factory :field do
26
- type { "Field" }
27
- field_group
28
- position { FactoryBot.generate(:field_position) }
29
- label { FactoryBot.generate(:field_label) }
30
- name { |f| f.label.downcase.gsub(/[^a-z0-9]+/, '_') }
31
- as { "string" }
32
- minlength { rand(100) }
33
- updated_at { FactoryBot.generate(:time) }
34
- created_at { FactoryBot.generate(:time) }
35
- end
36
-
37
- factory :custom_field do
38
- type { "CustomField" }
39
- end
40
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright (c) 2008-2013 Michael Dvorkin and contributors.
4
- #
5
- # Fat Free CRM is freely distributable under the terms of MIT license.
6
- # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
7
- #------------------------------------------------------------------------------
8
- FactoryBot.define do
9
- factory :lead do
10
- user
11
- campaign
12
- assigned_to { nil }
13
- first_name { FFaker::Name.first_name }
14
- last_name { FFaker::Name.last_name }
15
- access { "Public" }
16
- company { FFaker::Company.name }
17
- title { FactoryBot.generate(:title) }
18
- source { %w[campaign cold_call conference online referral self web word_of_mouth other].sample }
19
- status { %w[new contacted converted rejected].sample }
20
- rating { 1 }
21
- referred_by { FFaker::Name.name }
22
- do_not_call { false }
23
- blog { FactoryBot.generate(:website) }
24
- linkedin { FactoryBot.generate(:website) }
25
- facebook { FactoryBot.generate(:website) }
26
- twitter { FactoryBot.generate(:website) }
27
- email { FFaker::Internet.email }
28
- alt_email { FFaker::Internet.email }
29
- phone { FFaker::PhoneNumber.phone_number }
30
- mobile { FFaker::PhoneNumber.phone_number }
31
- background_info { FFaker::Lorem.paragraph[0, 255] }
32
- deleted_at { nil }
33
- updated_at { FactoryBot.generate(:time) }
34
- created_at { FactoryBot.generate(:time) }
35
- end
36
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright (c) 2008-2013 Michael Dvorkin and contributors.
4
- #
5
- # Fat Free CRM is freely distributable under the terms of MIT license.
6
- # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
7
- #------------------------------------------------------------------------------
8
- FactoryBot.define do
9
- factory :list do
10
- name { "Foo List" }
11
- url { "/controller/action" }
12
- end
13
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright (c) 2008-2013 Michael Dvorkin and contributors.
4
- #
5
- # Fat Free CRM is freely distributable under the terms of MIT license.
6
- # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
7
- #------------------------------------------------------------------------------
8
- FactoryBot.define do
9
- sequence :opportunity_status do |_s|
10
- %w[prospecting analysis presentation proposal negotiation final_review won lost].sample
11
- end
12
-
13
- sequence :opportunity_open_status do |_s|
14
- %w[prospecting analysis presentation proposal negotiation final_review].sample
15
- end
16
-
17
- factory :opportunity do
18
- user
19
- campaign
20
- account
21
- assigned_to { nil }
22
- name { FFaker::Lorem.sentence[0, 64] }
23
- access { "Public" }
24
- source { %w[campaign cold_call conference online referral self web word_of_mouth other].sample }
25
- stage { FactoryBot.generate(:opportunity_status) }
26
- probability { rand(50) }
27
- amount { rand(1000) }
28
- discount { rand(100) }
29
- closes_on { FactoryBot.generate(:date) }
30
- background_info { FFaker::Lorem.paragraph[0, 255] }
31
- deleted_at { nil }
32
- updated_at { FactoryBot.generate(:time) }
33
- created_at { FactoryBot.generate(:time) }
34
- end
35
-
36
- factory :opportunity_in_pipeline, parent: :opportunity do
37
- stage { FactoryBot.generate(:opportunity_open_status) }
38
- end
39
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright (c) 2008-2013 Michael Dvorkin and contributors.
4
- #
5
- # Fat Free CRM is freely distributable under the terms of MIT license.
6
- # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
7
- #------------------------------------------------------------------------------
8
- FactoryBot.define do
9
- sequence :address do |_n|
10
- FFaker::Address.street_address + " " + FFaker::Address.secondary_address + "\n" + FFaker::Address.city + ", " + FFaker::AddressUS.state_abbr + " " + FFaker::AddressUS.zip_code
11
- end
12
-
13
- sequence :username do |n|
14
- FFaker::Internet.user_name + n.to_s # make sure it's unique by appending sequence number
15
- end
16
-
17
- sequence :website do |_n|
18
- "http://www." + FFaker::Internet.domain_name
19
- end
20
-
21
- sequence :title do |_n|
22
- ["", "Director", "Sales Manager", "Executive Assistant", "Marketing Manager", "Project Manager", "Product Manager", "Engineer"].sample
23
- end
24
-
25
- sequence :time do |n|
26
- Time.now - n.hours
27
- end
28
-
29
- sequence :date do |n|
30
- Date.today - n.days
31
- end
32
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright (c) 2008-2013 Michael Dvorkin and contributors.
4
- #
5
- # Fat Free CRM is freely distributable under the terms of MIT license.
6
- # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
7
- #------------------------------------------------------------------------------
8
- FactoryBot.define do
9
- factory :setting do
10
- name { "foo" }
11
- value { nil }
12
- updated_at { FactoryBot.generate(:time) }
13
- created_at { FactoryBot.generate(:time) }
14
- end
15
- end