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,85 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_admin'
3
+
4
+ describe DashOverlord::UseCases::V1::Clients::Create::Base do
5
+ def make_the_call(params = {})
6
+ @context = described_class.perform \
7
+ client_attributes: (params || {}), session: admin_session
8
+
9
+ raise_context_unknown_error @context
10
+
11
+ @response = app_response @context
12
+ end
13
+
14
+ def client_attributes(*args)
15
+ attributes = attributes_for(*args).slice \
16
+ :id,
17
+ :uid,
18
+ :name
19
+
20
+ attributes
21
+ end
22
+
23
+ include_examples 'authenticated admin use_case'
24
+
25
+ context 'when current_admin exists' do
26
+ before { @current_admin = create('v1/admin', :streetbees) }
27
+
28
+ context 'when sending valid params' do
29
+ before do
30
+ make_the_call client_attributes('v1/client', :unilever)
31
+ end
32
+
33
+ it 'response.http_status should return 201' do
34
+ expect(@response.http_status).to be 201
35
+ end
36
+
37
+ it 'response.data should return Client details' do
38
+ client = DashOverlord::Models::V1::Client.last
39
+
40
+ attributes = client_attributes('v1/client', :unilever)
41
+ expect(@response.data).to match a_hash_including({
42
+ 'code' => 201,
43
+ 'status' => 'created',
44
+ 'data' => { id: client.id }.merge(attributes)
45
+ })
46
+ end
47
+ end
48
+
49
+ context 'when sending invalid params' do
50
+ before do
51
+ make_the_call
52
+ end
53
+
54
+ it 'response.http_status should return 422' do
55
+ expect(@response.http_status).to be 422
56
+ end
57
+
58
+ it 'response.data should return Client details' do
59
+ expect(@response.data).to match a_hash_including({
60
+ 'code' => 422,
61
+ 'status' => 'unprocessable_entity',
62
+ 'data' => a_hash_including({
63
+ 'errors' => a_hash_including(
64
+ 'name' => [I18n.t('errors.messages.blank')]
65
+ )
66
+ })
67
+ })
68
+ end
69
+ end
70
+
71
+ context 'when trying to overwrite the uid' do
72
+ before do
73
+ make_the_call name: 'Unilever', uid: 'vodafone'
74
+ end
75
+
76
+ it 'existing Client must belong to current_admin' do
77
+ client = DashOverlord::Models::V1::Client.last
78
+
79
+ attributes = client_attributes('v1/client', :unilever)
80
+
81
+ expect(client.uid).to eq attributes[:uid]
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_admin'
3
+
4
+ describe DashOverlord::UseCases::V1::Clients::Delete::Base do
5
+ def make_the_call(client_id, params = {})
6
+ @context = described_class.perform \
7
+ session: admin_session,
8
+ client_id: client_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/client')
23
+ @client = create('v1/client', :unilever)
24
+
25
+ make_the_call @client.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 Client should be deleted' do
33
+ expect(DashOverlord::Models::V1::Client.count).to be 1
34
+ end
35
+
36
+ it 'response.data should not return Client 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/client')
48
+ @client = create('v1/client', :unilever)
49
+
50
+ make_the_call @client.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 Client should be deleted' do
58
+ expect(DashOverlord::Models::V1::Client.count).to be 1
59
+ end
60
+
61
+ it 'response.data should not return Client 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::Clients::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 clients 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 { create('v1/client') }
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 { create('v1/client') }
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 { create('v1/client', :unilever) }
96
+ 15.times { create('v1/client') }
97
+
98
+ make_the_call filter_query: { name_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,70 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_admin'
3
+
4
+ describe DashOverlord::UseCases::V1::Clients::Show::Base do
5
+ def make_the_call(id, params = {})
6
+ @context = described_class.perform \
7
+ client_id: id, session: admin_session
8
+
9
+ raise_context_unknown_error @context
10
+
11
+ @response = app_response @context
12
+ end
13
+
14
+ def client_attributes(*args)
15
+ attributes = attributes_for(*args).slice \
16
+ :id,
17
+ :uid,
18
+ :name
19
+
20
+ attributes
21
+ end
22
+
23
+ include_examples 'authenticated admin use_case'
24
+
25
+ context 'when current_admin exists' do
26
+ before { @current_admin = create('v1/admin', :streetbees) }
27
+
28
+ context 'when requesting an non existing Client' do
29
+ before do
30
+ make_the_call -1
31
+ end
32
+
33
+ it 'response.http_status should return 404' do
34
+ expect(@response.http_status).to be 404
35
+ end
36
+
37
+ it 'response.data should return a 404 message' do
38
+ expect(@response.data).to match a_hash_including({
39
+ 'code' => 404,
40
+ 'message' => I18n.t('v1.clients.not_found'),
41
+ 'status' => 'not_found'
42
+ })
43
+ end
44
+ end
45
+
46
+ context 'when requesting an existing Client' do
47
+ before do
48
+ @client = create('v1/client', :unilever)
49
+
50
+ make_the_call @client.id
51
+ end
52
+
53
+ it 'response.http_status should return 200' do
54
+ expect(@response.http_status).to be 200
55
+ end
56
+
57
+ it 'response.data should return Client details' do
58
+ attributes = client_attributes('v1/client', :unilever)
59
+
60
+ attributes[:id] = @client.id
61
+
62
+ expect(@response.data).to match a_hash_including({
63
+ 'code' => 200,
64
+ 'status' => 'ok',
65
+ 'data' => a_hash_including(attributes)
66
+ })
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,112 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_admin'
3
+
4
+ describe DashOverlord::UseCases::V1::Clients::Update::Base do
5
+ def make_the_call(id, params = {})
6
+ @context = described_class.perform \
7
+ client_id: id, client_attributes: (params || {}), session: admin_session
8
+
9
+ raise_context_unknown_error @context
10
+
11
+ @response = app_response @context
12
+ end
13
+
14
+ def client_attributes(*args)
15
+ attributes = attributes_for(*args).slice \
16
+ :id,
17
+ :uid,
18
+ :name
19
+
20
+ attributes
21
+ end
22
+
23
+ include_examples 'authenticated admin use_case'
24
+
25
+ context 'when current_admin exists' do
26
+ before { @current_admin = create('v1/admin', :streetbees) }
27
+
28
+ context 'when sending valid params' do
29
+ before do
30
+ @client = create('v1/client', :unilever)
31
+
32
+ make_the_call @client.id, client_attributes('v1/client', :vodafone)
33
+ end
34
+
35
+ it 'response.http_status should return 200' do
36
+ expect(@response.http_status).to be 200
37
+ end
38
+
39
+ it 'response.data should return Client details' do
40
+ existing_client = DashOverlord::Models::V1::Client.last
41
+
42
+ attributes = client_attributes('v1/client', :vodafone)
43
+
44
+ expect(@response.data).to match a_hash_including({
45
+ 'code' => 200,
46
+ 'status' => 'ok',
47
+ 'data' => { id: existing_client.id }.merge(attributes)
48
+ })
49
+ end
50
+ end
51
+
52
+ context 'when requesting an non existing Client' do
53
+ before do
54
+ make_the_call -1
55
+ end
56
+
57
+ it 'response.http_status should return 404' do
58
+ expect(@response.http_status).to be 404
59
+ end
60
+
61
+ it 'response.data should return a 404 message' do
62
+ expect(@response.data).to match a_hash_including({
63
+ 'code' => 404,
64
+ 'message' => I18n.t('v1.clients.not_found'),
65
+ 'status' => 'not_found'
66
+ })
67
+ end
68
+ end
69
+
70
+ context 'when sending invalid params' do
71
+ before do
72
+ @client = create('v1/client', :unilever)
73
+
74
+ make_the_call @client.id, name: ''
75
+ end
76
+
77
+ it 'response.http_status should return 422' do
78
+ expect(@response.http_status).to be 422
79
+ end
80
+
81
+ it 'response.data should return Client details' do
82
+ attributes = client_attributes('v1/client', :vodafone)
83
+
84
+ expect(@response.data).to match a_hash_including({
85
+ 'code' => 422,
86
+ 'status' => 'unprocessable_entity',
87
+ 'data' => a_hash_including({
88
+ 'errors' => a_hash_including(
89
+ 'name' => [I18n.t('errors.messages.blank')]
90
+ )
91
+ })
92
+ })
93
+ end
94
+ end
95
+
96
+ context 'when trying to overwrite the uid' do
97
+ before do
98
+ @client = create('v1/client', :unilever)
99
+
100
+ make_the_call @client.id, name: 'Vodafone', uid: 'unilever'
101
+ end
102
+
103
+ it 'existing Client must belong to current_admin' do
104
+ client = DashOverlord::Models::V1::Client.last
105
+
106
+ attributes = client_attributes('v1/client', :vodafone)
107
+
108
+ expect(client.uid).to eq attributes[:uid]
109
+ end
110
+ end
111
+ end
112
+ end