elasticord 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +5 -0
  3. data/Gemfile.lock +160 -0
  4. data/README.md +35 -0
  5. data/Rakefile +30 -0
  6. data/bin/setup_config_files.sh +19 -0
  7. data/config/boot.rb +39 -0
  8. data/dash_overlord.gemspec +39 -0
  9. data/db/migrate/20160321174733_devise_create_users.rb +43 -0
  10. data/db/migrate/20161014155300_create_bee_videos.rb +21 -0
  11. data/db/migrate/20161014160600_create_subtitle_lines.rb +11 -0
  12. data/db/migrate/20161017103500_add_width_and_height_to_bee_videos.rb +21 -0
  13. data/db/migrate/20161017161300_add_start_and_end_time_to_subtitle_lines.rb +17 -0
  14. data/db/migrate/20161017185300_add_fulltext_search_to_subtitle_lines.rb +13 -0
  15. data/db/migrate/20161018150400_add_subtitle_url_to_bee_videos.rb +5 -0
  16. data/db/migrate/20161026162500_add_country_category_and_extra_to_bee_videos.rb +7 -0
  17. data/db/migrate/20161124152600_add_segment_uid_to_bee_videos.rb +5 -0
  18. data/db/migrate/20161223113800_add_user_data_to_bee_videos.rb +17 -0
  19. data/db/migrate/20170105102428_add_segment_uid_to_subtitle_lines.rb +5 -0
  20. data/db/migrate/20170209171700_add_client_id_to_users.rb +5 -0
  21. data/db/migrate/20170209173800_create_admins.rb +8 -0
  22. data/db/migrate/20170209190400_create_clients.rb +8 -0
  23. data/db/migrate/20170210110800_create_chart_configs.rb +35 -0
  24. data/elasticord.gemspec +26 -0
  25. data/lib/dash_overlord.rb +16 -0
  26. data/lib/dash_overlord/config.rb +39 -0
  27. data/lib/dash_overlord/entities/base.rb +13 -0
  28. data/lib/dash_overlord/entities/v1/base.rb +10 -0
  29. data/lib/dash_overlord/entities/v1/chart_source.rb +10 -0
  30. data/lib/dash_overlord/entities/v1/meta_data.rb +10 -0
  31. data/lib/dash_overlord/locales/v1/en/admins.yml +7 -0
  32. data/lib/dash_overlord/locales/v1/en/chart_configs.yml +7 -0
  33. data/lib/dash_overlord/locales/v1/en/clients.yml +7 -0
  34. data/lib/dash_overlord/locales/v1/en/en.yml +213 -0
  35. data/lib/dash_overlord/locales/v1/en/users.yml +9 -0
  36. data/lib/dash_overlord/models/base.rb +12 -0
  37. data/lib/dash_overlord/models/v1/admin.rb +10 -0
  38. data/lib/dash_overlord/models/v1/answer.rb +10 -0
  39. data/lib/dash_overlord/models/v1/base.rb +11 -0
  40. data/lib/dash_overlord/models/v1/basic_user.rb +34 -0
  41. data/lib/dash_overlord/models/v1/bee_video.rb +30 -0
  42. data/lib/dash_overlord/models/v1/chart_config.rb +48 -0
  43. data/lib/dash_overlord/models/v1/client.rb +10 -0
  44. data/lib/dash_overlord/models/v1/dynamo_db/base.rb +98 -0
  45. data/lib/dash_overlord/models/v1/dynamo_db/migration.rb +52 -0
  46. data/lib/dash_overlord/models/v1/dynamo_db/video.rb +11 -0
  47. data/lib/dash_overlord/models/v1/elastic_search.rb +12 -0
  48. data/lib/dash_overlord/models/v1/subtitle_line.rb +21 -0
  49. data/lib/dash_overlord/models/v1/user.rb +10 -0
  50. data/lib/dash_overlord/requirable.rb +110 -0
  51. data/lib/dash_overlord/serializers/base.rb +127 -0
  52. data/lib/dash_overlord/serializers/v1/admins/base.rb +15 -0
  53. data/lib/dash_overlord/serializers/v1/admins/log_in.rb +13 -0
  54. data/lib/dash_overlord/serializers/v1/admins/show.rb +13 -0
  55. data/lib/dash_overlord/serializers/v1/base.rb +17 -0
  56. data/lib/dash_overlord/serializers/v1/chart_configs/base.rb +15 -0
  57. data/lib/dash_overlord/serializers/v1/chart_configs/create.rb +13 -0
  58. data/lib/dash_overlord/serializers/v1/chart_configs/delete.rb +12 -0
  59. data/lib/dash_overlord/serializers/v1/chart_configs/index.rb +15 -0
  60. data/lib/dash_overlord/serializers/v1/chart_configs/show.rb +59 -0
  61. data/lib/dash_overlord/serializers/v1/chart_configs/update.rb +12 -0
  62. data/lib/dash_overlord/serializers/v1/clients/base.rb +15 -0
  63. data/lib/dash_overlord/serializers/v1/clients/create.rb +13 -0
  64. data/lib/dash_overlord/serializers/v1/clients/delete.rb +12 -0
  65. data/lib/dash_overlord/serializers/v1/clients/index.rb +15 -0
  66. data/lib/dash_overlord/serializers/v1/clients/show.rb +15 -0
  67. data/lib/dash_overlord/serializers/v1/clients/update.rb +12 -0
  68. data/lib/dash_overlord/serializers/v1/meta_data/pagination.rb +19 -0
  69. data/lib/dash_overlord/serializers/v1/meta_data/pagination_with_filters.rb +13 -0
  70. data/lib/dash_overlord/serializers/v1/subtitle_lines/base.rb +15 -0
  71. data/lib/dash_overlord/serializers/v1/subtitle_lines/show.rb +35 -0
  72. data/lib/dash_overlord/serializers/v1/users/base.rb +15 -0
  73. data/lib/dash_overlord/serializers/v1/users/create.rb +13 -0
  74. data/lib/dash_overlord/serializers/v1/users/delete.rb +12 -0
  75. data/lib/dash_overlord/serializers/v1/users/index.rb +15 -0
  76. data/lib/dash_overlord/serializers/v1/users/log_in.rb +13 -0
  77. data/lib/dash_overlord/serializers/v1/users/show.rb +13 -0
  78. data/lib/dash_overlord/serializers/v1/users/update.rb +12 -0
  79. data/lib/dash_overlord/serializers/v1/videos/base.rb +15 -0
  80. data/lib/dash_overlord/serializers/v1/videos/index.rb +15 -0
  81. data/lib/dash_overlord/serializers/v1/videos/show.rb +43 -0
  82. data/lib/dash_overlord/use_cases/base.rb +87 -0
  83. data/lib/dash_overlord/use_cases/context.rb +72 -0
  84. data/lib/dash_overlord/use_cases/v1/admins/find_current_admin.rb +15 -0
  85. data/lib/dash_overlord/use_cases/v1/admins/log_in/base.rb +26 -0
  86. data/lib/dash_overlord/use_cases/v1/admins/show_current_admin/base.rb +22 -0
  87. data/lib/dash_overlord/use_cases/v1/admins/show_current_admin/find_current_admin.rb +21 -0
  88. data/lib/dash_overlord/use_cases/v1/admins/show_current_admin/get_current_admin.rb +20 -0
  89. data/lib/dash_overlord/use_cases/v1/base.rb +8 -0
  90. data/lib/dash_overlord/use_cases/v1/chart_configs/cache_answer_values/base.rb +19 -0
  91. data/lib/dash_overlord/use_cases/v1/chart_configs/cache_answer_values/build_cache.rb +85 -0
  92. data/lib/dash_overlord/use_cases/v1/chart_configs/create/assign_attributes_to_chart_config.rb +48 -0
  93. data/lib/dash_overlord/use_cases/v1/chart_configs/create/base.rb +34 -0
  94. data/lib/dash_overlord/use_cases/v1/chart_configs/create/build_chart_config.rb +17 -0
  95. data/lib/dash_overlord/use_cases/v1/chart_configs/create/validate_chart_config.rb +76 -0
  96. data/lib/dash_overlord/use_cases/v1/chart_configs/delete/base.rb +26 -0
  97. data/lib/dash_overlord/use_cases/v1/chart_configs/delete/delete_chart_config.rb +24 -0
  98. data/lib/dash_overlord/use_cases/v1/chart_configs/get_chart_config.rb +16 -0
  99. data/lib/dash_overlord/use_cases/v1/chart_configs/index/base.rb +24 -0
  100. data/lib/dash_overlord/use_cases/v1/chart_configs/index/find_chart_configs.rb +17 -0
  101. data/lib/dash_overlord/use_cases/v1/chart_configs/index/search_and_paginate_chart_configs.rb +17 -0
  102. data/lib/dash_overlord/use_cases/v1/chart_configs/save_chart_config.rb +19 -0
  103. data/lib/dash_overlord/use_cases/v1/chart_configs/show/base.rb +23 -0
  104. data/lib/dash_overlord/use_cases/v1/chart_configs/show/find_chart_config.rb +21 -0
  105. data/lib/dash_overlord/use_cases/v1/chart_configs/update/base.rb +32 -0
  106. data/lib/dash_overlord/use_cases/v1/clients/create/assign_attributes_to_client.rb +27 -0
  107. data/lib/dash_overlord/use_cases/v1/clients/create/base.rb +29 -0
  108. data/lib/dash_overlord/use_cases/v1/clients/create/build_client.rb +17 -0
  109. data/lib/dash_overlord/use_cases/v1/clients/create/validate_client.rb +25 -0
  110. data/lib/dash_overlord/use_cases/v1/clients/delete/base.rb +26 -0
  111. data/lib/dash_overlord/use_cases/v1/clients/delete/delete_client.rb +22 -0
  112. data/lib/dash_overlord/use_cases/v1/clients/index/base.rb +24 -0
  113. data/lib/dash_overlord/use_cases/v1/clients/index/find_clients.rb +17 -0
  114. data/lib/dash_overlord/use_cases/v1/clients/index/search_and_paginate_clients.rb +17 -0
  115. data/lib/dash_overlord/use_cases/v1/clients/save_client.rb +19 -0
  116. data/lib/dash_overlord/use_cases/v1/clients/show/base.rb +23 -0
  117. data/lib/dash_overlord/use_cases/v1/clients/show/find_client.rb +21 -0
  118. data/lib/dash_overlord/use_cases/v1/clients/show/get_client.rb +17 -0
  119. data/lib/dash_overlord/use_cases/v1/clients/update/base.rb +27 -0
  120. data/lib/dash_overlord/use_cases/v1/dummy_data/create/charts/base.rb +38 -0
  121. data/lib/dash_overlord/use_cases/v1/dummy_data/create/charts/build.rb +64 -0
  122. data/lib/dash_overlord/use_cases/v1/repositories/dynamo_db/client.rb +39 -0
  123. data/lib/dash_overlord/use_cases/v1/repositories/dynamo_db/create/batch.rb +46 -0
  124. data/lib/dash_overlord/use_cases/v1/repositories/dynamo_db/query/table.rb +25 -0
  125. data/lib/dash_overlord/use_cases/v1/shared/log_in/assign_attributes_to_user_model.rb +28 -0
  126. data/lib/dash_overlord/use_cases/v1/shared/log_in/base.rb +21 -0
  127. data/lib/dash_overlord/use_cases/v1/shared/log_in/build_user_model.rb +19 -0
  128. data/lib/dash_overlord/use_cases/v1/shared/log_in/get_existing_user_model.rb +20 -0
  129. data/lib/dash_overlord/use_cases/v1/shared/log_in/switch_user_model_by_existing_user_model.rb +17 -0
  130. data/lib/dash_overlord/use_cases/v1/shared/log_in/validate_user_model.rb +52 -0
  131. data/lib/dash_overlord/use_cases/v1/shared/search_and_paginate/apply_filters.rb +25 -0
  132. data/lib/dash_overlord/use_cases/v1/shared/search_and_paginate/apply_full_text_search.rb +22 -0
  133. data/lib/dash_overlord/use_cases/v1/shared/search_and_paginate/apply_pagination.rb +72 -0
  134. data/lib/dash_overlord/use_cases/v1/shared/search_and_paginate/base.rb +36 -0
  135. data/lib/dash_overlord/use_cases/v1/users/create/assign_attributes_to_user.rb +26 -0
  136. data/lib/dash_overlord/use_cases/v1/users/create/base.rb +29 -0
  137. data/lib/dash_overlord/use_cases/v1/users/create/build_user.rb +17 -0
  138. data/lib/dash_overlord/use_cases/v1/users/create/validate_user.rb +27 -0
  139. data/lib/dash_overlord/use_cases/v1/users/delete/base.rb +26 -0
  140. data/lib/dash_overlord/use_cases/v1/users/delete/delete_user.rb +22 -0
  141. data/lib/dash_overlord/use_cases/v1/users/find_current_user.rb +15 -0
  142. data/lib/dash_overlord/use_cases/v1/users/index/base.rb +23 -0
  143. data/lib/dash_overlord/use_cases/v1/users/index/search_and_paginate_users.rb +17 -0
  144. data/lib/dash_overlord/use_cases/v1/users/log_in/base.rb +26 -0
  145. data/lib/dash_overlord/use_cases/v1/users/save_user.rb +23 -0
  146. data/lib/dash_overlord/use_cases/v1/users/show/base.rb +23 -0
  147. data/lib/dash_overlord/use_cases/v1/users/show/find_user.rb +21 -0
  148. data/lib/dash_overlord/use_cases/v1/users/show/get_user.rb +17 -0
  149. data/lib/dash_overlord/use_cases/v1/users/show_current_user/base.rb +22 -0
  150. data/lib/dash_overlord/use_cases/v1/users/show_current_user/find_current_user.rb +21 -0
  151. data/lib/dash_overlord/use_cases/v1/users/show_current_user/get_current_user.rb +20 -0
  152. data/lib/dash_overlord/use_cases/v1/users/update/base.rb +27 -0
  153. data/lib/dash_overlord/use_cases/v1/videos/index/base.rb +31 -0
  154. data/lib/dash_overlord/use_cases/v1/videos/index/dynamodb/base.rb +19 -0
  155. data/lib/dash_overlord/use_cases/v1/videos/index/dynamodb/search_and_paginate_videos.rb +20 -0
  156. data/lib/dash_overlord/use_cases/v1/videos/index/elastic_search/base.rb +19 -0
  157. data/lib/dash_overlord/use_cases/v1/videos/index/elastic_search/search_and_paginate_videos.rb +97 -0
  158. data/lib/dash_overlord/use_cases/v1/videos/index/postgres/base.rb +22 -0
  159. data/lib/dash_overlord/use_cases/v1/videos/index/postgres/build_video_searched_subtitles.rb +42 -0
  160. data/lib/dash_overlord/use_cases/v1/videos/index/postgres/get_filters.rb +91 -0
  161. data/lib/dash_overlord/use_cases/v1/videos/index/postgres/hhc.json +206 -0
  162. data/lib/dash_overlord/use_cases/v1/videos/index/postgres/search_and_paginate_videos.rb +35 -0
  163. data/lib/dash_overlord/use_cases/v1/videos/index/postgres/search_on_subtitle_lines.rb +26 -0
  164. data/lib/dash_overlord/version.rb +3 -0
  165. data/lib/elasticord.rb +24 -0
  166. data/lib/elasticord/base.rb +80 -0
  167. data/lib/elasticord/config.rb +23 -0
  168. data/lib/elasticord/orm/create.rb +32 -0
  169. data/lib/elasticord/orm/delete.rb +23 -0
  170. data/lib/elasticord/orm/get.rb +34 -0
  171. data/lib/elasticord/orm/index.rb +15 -0
  172. data/lib/elasticord/version.rb +3 -0
  173. data/lib/tasks/create_dummy_data.rake +11 -0
  174. data/spec/dash_overlord/use_cases/v1/admins/log_in_spec.rb +105 -0
  175. data/spec/dash_overlord/use_cases/v1/admins/show_current_admin_spec.rb +51 -0
  176. data/spec/dash_overlord/use_cases/v1/chart_configs/create_spec.rb +77 -0
  177. data/spec/dash_overlord/use_cases/v1/chart_configs/delete_spec.rb +70 -0
  178. data/spec/dash_overlord/use_cases/v1/chart_configs/index_spec.rb +126 -0
  179. data/spec/dash_overlord/use_cases/v1/chart_configs/show_spec.rb +73 -0
  180. data/spec/dash_overlord/use_cases/v1/chart_configs/update_spec.rb +104 -0
  181. data/spec/dash_overlord/use_cases/v1/clients/create_spec.rb +85 -0
  182. data/spec/dash_overlord/use_cases/v1/clients/delete_spec.rb +70 -0
  183. data/spec/dash_overlord/use_cases/v1/clients/index_spec.rb +121 -0
  184. data/spec/dash_overlord/use_cases/v1/clients/show_spec.rb +70 -0
  185. data/spec/dash_overlord/use_cases/v1/clients/update_spec.rb +112 -0
  186. data/spec/dash_overlord/use_cases/v1/users/create_spec.rb +89 -0
  187. data/spec/dash_overlord/use_cases/v1/users/delete_spec.rb +70 -0
  188. data/spec/dash_overlord/use_cases/v1/users/index_spec.rb +121 -0
  189. data/spec/dash_overlord/use_cases/v1/users/log_in_spec.rb +105 -0
  190. data/spec/dash_overlord/use_cases/v1/users/show_current_admin_spec.rb +51 -0
  191. data/spec/dash_overlord/use_cases/v1/users/show_spec.rb +69 -0
  192. data/spec/dash_overlord/use_cases/v1/users/update_spec.rb +119 -0
  193. data/spec/dash_overlord/use_cases/v1/videos/index/base_spec.rb +39 -0
  194. data/spec/dash_overlord/use_cases/v1/videos/index/dynamo_db_spec.rb +84 -0
  195. data/spec/dash_overlord/use_cases/v1/videos/index/elastic_search_spec.rb +121 -0
  196. data/spec/dash_overlord/use_cases/v1/videos/index/postgres_spec.rb +116 -0
  197. data/spec/elasticord/base_spec.rb +242 -0
  198. data/spec/factories/v1/admins.rb +8 -0
  199. data/spec/factories/v1/bee_videos.rb +18 -0
  200. data/spec/factories/v1/chart_configs.rb +23 -0
  201. data/spec/factories/v1/clients.rb +13 -0
  202. data/spec/factories/v1/users.rb +15 -0
  203. data/spec/spec_helper.rb +49 -0
  204. data/spec/support/helpers.rb +65 -0
  205. data/spec/support/shared_missing_admin.rb +39 -0
  206. data/spec/support/shared_missing_user.rb +39 -0
  207. data/tasks/console.rake +10 -0
  208. metadata +325 -0
@@ -0,0 +1,89 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_admin'
3
+
4
+ describe DashOverlord::UseCases::V1::Users::Create::Base do
5
+ def make_the_call(params = {})
6
+ @context = described_class.perform \
7
+ user_attributes: (params || {}), session: admin_session
8
+
9
+ raise_context_unknown_error @context
10
+
11
+ @response = app_response @context
12
+ end
13
+
14
+ def user_attributes(*args)
15
+ attributes = attributes_for(*args).slice \
16
+ :id,
17
+ :email
18
+
19
+ attributes
20
+ end
21
+
22
+ include_examples 'authenticated admin use_case'
23
+
24
+ context 'when current_admin exists' do
25
+ before { @current_admin = create('v1/admin', :streetbees) }
26
+
27
+ context 'when sending valid params' do
28
+ before do
29
+ make_the_call email: 'admin@unilever.com', password: '123456'
30
+ end
31
+
32
+ it 'response.http_status should return 201' do
33
+ expect(@response.http_status).to be 201
34
+ end
35
+
36
+ it 'response.data should return User details' do
37
+ user = DashOverlord::Models::V1::User.last
38
+
39
+ attributes = user_attributes('v1/user', :unilever)
40
+ expect(@response.data).to match a_hash_including({
41
+ 'code' => 201,
42
+ 'status' => 'created',
43
+ 'data' => { id: user.id }.merge(attributes)
44
+ })
45
+ end
46
+
47
+ it 'existing User password must be corrrect' do
48
+ user = DashOverlord::Models::V1::User.last
49
+
50
+ expect(user.secured_password).to eq '123456'
51
+ end
52
+ end
53
+
54
+ context 'when sending invalid params' do
55
+ before do
56
+ make_the_call
57
+ end
58
+
59
+ it 'response.http_status should return 422' do
60
+ expect(@response.http_status).to be 422
61
+ end
62
+
63
+ it 'response.data should return User details' do
64
+ expect(@response.data).to match a_hash_including({
65
+ 'code' => 422,
66
+ 'status' => 'unprocessable_entity',
67
+ 'data' => a_hash_including({
68
+ 'errors' => a_hash_including(
69
+ 'email' => [I18n.t('errors.messages.blank')],
70
+ 'password' => [I18n.t('errors.messages.blank')]
71
+ )
72
+ })
73
+ })
74
+ end
75
+ end
76
+
77
+ context 'when trying to overwrite the admin field' do
78
+ before do
79
+ make_the_call email: 'admin@unilever.com', password: '123456', admin: true
80
+ end
81
+
82
+ it 'existing User must belong to current_admin' do
83
+ user = DashOverlord::Models::V1::User.last
84
+
85
+ expect(user.admin).to be_falsey
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_admin'
3
+
4
+ describe DashOverlord::UseCases::V1::Users::Delete::Base do
5
+ def make_the_call(user_id, params = {})
6
+ @context = described_class.perform \
7
+ session: admin_session,
8
+ user_id: user_id
9
+
10
+ raise_context_unknown_error @context
11
+
12
+ @response = app_response @context
13
+ end
14
+
15
+ include_examples 'authenticated admin use_case'
16
+
17
+ context 'when current_admin exists' do
18
+ before { @current_admin = create('v1/admin', :streetbees) }
19
+
20
+ context 'when no record exists' do
21
+ before do
22
+ create('v1/user')
23
+ @user = create('v1/user', :unilever)
24
+
25
+ make_the_call @user.id
26
+ end
27
+
28
+ it 'response.http_status should return 202' do
29
+ expect(@response.http_status).to be 202
30
+ end
31
+
32
+ it 'No extra User should be deleted' do
33
+ expect(DashOverlord::Models::V1::User.count).to be 1
34
+ end
35
+
36
+ it 'response.data should not return User details' do
37
+ expect(@response.data).to match a_hash_including({
38
+ 'code' => 202,
39
+ 'status' => 'accepted',
40
+ 'data' => nil
41
+ })
42
+ end
43
+ end
44
+
45
+ context 'when a record exists' do
46
+ before do
47
+ create('v1/user')
48
+ @user = create('v1/user', :unilever)
49
+
50
+ make_the_call @user.id
51
+ end
52
+
53
+ it 'response.http_status should return 202' do
54
+ expect(@response.http_status).to be 202
55
+ end
56
+
57
+ it 'No extra User should be deleted' do
58
+ expect(DashOverlord::Models::V1::User.count).to be 1
59
+ end
60
+
61
+ it 'response.data should not return User details' do
62
+ expect(@response.data).to match a_hash_including({
63
+ 'code' => 202,
64
+ 'status' => 'accepted',
65
+ 'data' => nil
66
+ })
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,121 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_admin'
3
+
4
+ describe DashOverlord::UseCases::V1::Users::Index::Base do
5
+ def make_the_call(params = nil)
6
+ @context = described_class.perform \
7
+ (params || {}).merge({ session: admin_session })
8
+
9
+ raise_context_unknown_error @context
10
+
11
+ @response = app_response @context
12
+ end
13
+
14
+ include_examples 'authenticated admin use_case'
15
+
16
+ context 'when current_admin exists' do
17
+ before { @current_admin = create('v1/admin', :streetbees) }
18
+
19
+ context 'when no users are available' do
20
+ before { make_the_call }
21
+
22
+ it 'response.status should return 200' do
23
+ expect(@response.http_status).to be 200
24
+ end
25
+
26
+ it 'should return pagination meta_data' do
27
+ expect(@response.data).to match a_hash_including({
28
+ 'meta' => a_hash_including({
29
+ 'page' => 1,
30
+ 'per_page'=> 10,
31
+ 'total_pages' => 0,
32
+ 'total_results' => 0
33
+ }),
34
+ 'data' => []
35
+ })
36
+ end
37
+ end
38
+
39
+ context 'when no filter params are used' do
40
+ before do
41
+ 20.times { |index| create('v1/user', email: "#{index}@streetbees.com") }
42
+
43
+ make_the_call
44
+ end
45
+
46
+ it 'response.status should return 200' do
47
+ expect(@response.http_status).to be 200
48
+ end
49
+
50
+ it 'should return pagination meta_data' do
51
+ expect(@response.data).to match a_hash_including({
52
+ 'meta' => a_hash_including({
53
+ 'page' => 1,
54
+ 'per_page'=> 10,
55
+ 'total_pages' => 2,
56
+ 'total_results' => 20
57
+ })
58
+ })
59
+ end
60
+
61
+ it 'should return 10 results' do
62
+ expect(@response.data['data'].length).to be 10
63
+ end
64
+ end
65
+
66
+ context 'when filtering by page = 0' do
67
+ before do
68
+ 20.times { |index| create('v1/user', email: "#{index}@streetbees.com") }
69
+
70
+ make_the_call page: 0
71
+ end
72
+
73
+ it 'response.status should return 200' do
74
+ expect(@response.http_status).to be 200
75
+ end
76
+
77
+ it 'should return pagination meta_data' do
78
+ expect(@response.data).to match a_hash_including({
79
+ 'meta' => a_hash_including({
80
+ 'page' => 0,
81
+ 'per_page'=> 0,
82
+ 'total_pages' => 0,
83
+ 'total_results' => 20
84
+ })
85
+ })
86
+ end
87
+
88
+ it 'should return 20 results' do
89
+ expect(@response.data['data'].length).to be 20
90
+ end
91
+ end
92
+
93
+ context 'when filtering by something' do
94
+ before do
95
+ 5.times { |index| create('v1/user', email: "#{index}@unilever.com") }
96
+ 15.times { |index| create('v1/user', email: "#{index}@streetbees.com") }
97
+
98
+ make_the_call filter_query: { email_cont: 'uni' }
99
+ end
100
+
101
+ it 'response.status should return 200' do
102
+ expect(@response.http_status).to be 200
103
+ end
104
+
105
+ it 'should return pagination meta_data' do
106
+ expect(@response.data).to match a_hash_including({
107
+ 'meta' => a_hash_including({
108
+ 'page' => 1,
109
+ 'per_page'=> 10,
110
+ 'total_pages' => 1,
111
+ 'total_results' => 5
112
+ })
113
+ })
114
+ end
115
+
116
+ it 'should return 5 results' do
117
+ expect(@response.data['data'].length).to be 5
118
+ end
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,105 @@
1
+ require 'spec_helper'
2
+
3
+ describe DashOverlord::UseCases::V1::Users::LogIn::Base do
4
+ def make_the_call(params = {})
5
+ @context = described_class.perform \
6
+ user_attributes: params
7
+
8
+ raise_context_unknown_error @context
9
+
10
+ @response = app_response @context
11
+ end
12
+
13
+ context 'when sending valid params' do
14
+ before do
15
+ @user = create('v1/user', :unilever)
16
+
17
+ make_the_call email: 'admin@unilever.com', password: 'password'
18
+ end
19
+
20
+ it 'response.http_status should return 200' do
21
+ expect(@response.http_status).to be 200
22
+ end
23
+
24
+ it 'response.data should return User details' do
25
+ expect(@response.data).to match a_hash_including({
26
+ 'code' => 200,
27
+ 'status' => 'ok',
28
+ 'data' => a_hash_including({ id: @user.id })
29
+ })
30
+ end
31
+ end
32
+
33
+ context 'when not sending any params' do
34
+ before do
35
+ make_the_call
36
+ end
37
+
38
+ it 'response.http_status should return 422' do
39
+ expect(@response.http_status).to be 422
40
+ end
41
+
42
+ it 'response.data should return User details' do
43
+ expect(@response.data).to match a_hash_including({
44
+ 'code' => 422,
45
+ 'status' => 'unprocessable_entity',
46
+ 'data' => a_hash_including({
47
+ 'errors' => a_hash_including(
48
+ 'email' => [I18n.t('errors.messages.blank')],
49
+ 'password' => [I18n.t('errors.messages.blank')]
50
+ )
51
+ })
52
+ })
53
+ end
54
+ end
55
+
56
+ context 'when sending invalid password' do
57
+ before do
58
+ @user = create('v1/user', :unilever)
59
+
60
+ make_the_call email: 'admin@unilever.com', password: 'fake'
61
+ end
62
+
63
+ it 'response.http_status should return 422' do
64
+ expect(@response.http_status).to be 422
65
+ end
66
+
67
+ it 'response.data should return User details' do
68
+ expect(@response.data).to match a_hash_including({
69
+ 'code' => 422,
70
+ 'status' => 'unprocessable_entity',
71
+ 'data' => a_hash_including({
72
+ 'errors' => a_hash_including(
73
+ 'email' => [I18n.t('v1.users.bad_credentials')],
74
+ 'password' => [I18n.t('v1.users.bad_credentials')]
75
+ )
76
+ })
77
+ })
78
+ end
79
+ end
80
+
81
+ context 'when sending invalid email' do
82
+ before do
83
+ @user = create('v1/user', :unilever)
84
+
85
+ make_the_call email: 'fake', password: 'password'
86
+ end
87
+
88
+ it 'response.http_status should return 422' do
89
+ expect(@response.http_status).to be 422
90
+ end
91
+
92
+ it 'response.data should return User details' do
93
+ expect(@response.data).to match a_hash_including({
94
+ 'code' => 422,
95
+ 'status' => 'unprocessable_entity',
96
+ 'data' => a_hash_including({
97
+ 'errors' => a_hash_including(
98
+ 'email' => [I18n.t('v1.users.bad_credentials')],
99
+ 'password' => [I18n.t('v1.users.bad_credentials')]
100
+ )
101
+ })
102
+ })
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_user'
3
+
4
+ describe DashOverlord::UseCases::V1::Users::ShowCurrentUser::Base do
5
+ def make_the_call(params = {})
6
+ @context = described_class.perform \
7
+ session: user_session
8
+
9
+ raise_context_unknown_error @context
10
+
11
+ @response = app_response @context
12
+ end
13
+
14
+ def user_attributes(*args)
15
+ attributes = attributes_for(*args).slice \
16
+ :id,
17
+ :email
18
+
19
+ attributes
20
+ end
21
+
22
+ include_examples 'authenticated user use_case'
23
+
24
+ context 'when current_user exists' do
25
+ before { @current_user = create('v1/user', :unilever) }
26
+
27
+ context 'when requesting an existing user' do
28
+ before do
29
+ @user = create('v1/user')
30
+
31
+ make_the_call
32
+ end
33
+
34
+ it 'response.http_status should return 200' do
35
+ expect(@response.http_status).to be 200
36
+ end
37
+
38
+ it 'response.data should return User details' do
39
+ attributes = user_attributes('v1/user', :unilever)
40
+
41
+ attributes[:id] = @current_user.id
42
+
43
+ expect(@response.data).to match a_hash_including({
44
+ 'code' => 200,
45
+ 'status' => 'ok',
46
+ 'data' => a_hash_including(attributes)
47
+ })
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_admin'
3
+
4
+ describe DashOverlord::UseCases::V1::Users::Show::Base do
5
+ def make_the_call(id, params = {})
6
+ @context = described_class.perform \
7
+ user_id: id, session: admin_session
8
+
9
+ raise_context_unknown_error @context
10
+
11
+ @response = app_response @context
12
+ end
13
+
14
+ def user_attributes(*args)
15
+ attributes = attributes_for(*args).slice \
16
+ :id,
17
+ :email
18
+
19
+ attributes
20
+ end
21
+
22
+ include_examples 'authenticated admin use_case'
23
+
24
+ context 'when current_admin exists' do
25
+ before { @current_admin = create('v1/admin', :streetbees) }
26
+
27
+ context 'when requesting an non existing user' do
28
+ before do
29
+ make_the_call -1
30
+ end
31
+
32
+ it 'response.http_status should return 404' do
33
+ expect(@response.http_status).to be 404
34
+ end
35
+
36
+ it 'response.data should return a 404 message' do
37
+ expect(@response.data).to match a_hash_including({
38
+ 'code' => 404,
39
+ 'message' => I18n.t('v1.users.not_found'),
40
+ 'status' => 'not_found'
41
+ })
42
+ end
43
+ end
44
+
45
+ context 'when requesting an existing user' do
46
+ before do
47
+ @user = create('v1/user', :unilever)
48
+
49
+ make_the_call @user.id
50
+ end
51
+
52
+ it 'response.http_status should return 200' do
53
+ expect(@response.http_status).to be 200
54
+ end
55
+
56
+ it 'response.data should return User details' do
57
+ attributes = user_attributes('v1/user', :unilever)
58
+
59
+ attributes[:id] = @user.id
60
+
61
+ expect(@response.data).to match a_hash_including({
62
+ 'code' => 200,
63
+ 'status' => 'ok',
64
+ 'data' => a_hash_including(attributes)
65
+ })
66
+ end
67
+ end
68
+ end
69
+ end