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,119 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_admin'
3
+
4
+ describe DashOverlord::UseCases::V1::Users::Update::Base do
5
+ def make_the_call(id, params = {})
6
+ @context = described_class.perform \
7
+ user_id: id, 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
+ @user = create('v1/user', :unilever)
30
+
31
+ make_the_call @user.id, email: 'admin@vodafone.com', password: '123456'
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
+ existing_user = DashOverlord::Models::V1::User.last
40
+
41
+ attributes = user_attributes('v1/user', :vodafone)
42
+
43
+ expect(@response.data).to match a_hash_including({
44
+ 'code' => 200,
45
+ 'status' => 'ok',
46
+ 'data' => { id: existing_user.id }.merge(attributes)
47
+ })
48
+ end
49
+
50
+ it 'existing User password must be corrrect' do
51
+ user = DashOverlord::Models::V1::User.last
52
+
53
+ expect(user.secured_password).to eq '123456'
54
+ end
55
+ end
56
+
57
+ context 'when requesting an non existing user' do
58
+ before do
59
+ make_the_call -1
60
+ end
61
+
62
+ it 'response.http_status should return 404' do
63
+ expect(@response.http_status).to be 404
64
+ end
65
+
66
+ it 'response.data should return a 404 message' do
67
+ expect(@response.data).to match a_hash_including({
68
+ 'code' => 404,
69
+ 'message' => I18n.t('v1.users.not_found'),
70
+ 'status' => 'not_found'
71
+ })
72
+ end
73
+ end
74
+
75
+ context 'when sending invalid params' do
76
+ before do
77
+ @user = create('v1/user', :unilever)
78
+
79
+ make_the_call @user.id, email: '', password: ''
80
+ end
81
+
82
+ it 'response.http_status should return 422' do
83
+ expect(@response.http_status).to be 422
84
+ end
85
+
86
+ it 'response.data should return User details' do
87
+ attributes = user_attributes('v1/user', :vodafone)
88
+
89
+ expect(@response.data).to match a_hash_including({
90
+ 'code' => 422,
91
+ 'status' => 'unprocessable_entity',
92
+ 'data' => a_hash_including({
93
+ 'errors' => a_hash_including(
94
+ 'email' => [I18n.t('errors.messages.blank')],
95
+ 'password' => [I18n.t('errors.messages.blank')]
96
+ )
97
+ })
98
+ })
99
+ end
100
+ end
101
+
102
+ context 'when trying to overwrite the uid' do
103
+ before do
104
+ @user = create('v1/user', :unilever)
105
+
106
+ make_the_call @user.id,
107
+ email: 'admin@unilever.com',
108
+ password: '123456',
109
+ admin: true
110
+ end
111
+
112
+ it 'existing User must belong to current_admin' do
113
+ user = DashOverlord::Models::V1::User.last
114
+
115
+ expect(user.admin).to be_falsey
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_user'
3
+
4
+ describe DashOverlord::UseCases::V1::Videos::Index::Base do
5
+ def make_the_call(params = nil)
6
+ @context = described_class.perform \
7
+ (params || {}).merge({ session: user_session })
8
+
9
+ raise_context_unknown_error @context
10
+
11
+ @response = app_response @context
12
+ end
13
+
14
+ include_examples 'authenticated user use_case'
15
+
16
+ context 'when current_user exists' do
17
+ before { @current_user = create('v1/user', :unilever) }
18
+
19
+ context 'when no bee_videos 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
+ end
39
+ end
@@ -0,0 +1,84 @@
1
+ require 'spec_helper'
2
+
3
+ describe DashOverlord::UseCases::V1::Videos::Index::DynamoDb::Base,
4
+ dynamodb: true do
5
+
6
+ def make_the_call(params = nil)
7
+ @context = described_class.perform \
8
+ (params || {}).merge({ session: user_session })
9
+
10
+ raise_context_unknown_error @context
11
+ end
12
+
13
+ before(:all) do
14
+ migration = DashOverlord::Models::V1::DynamoDb::Migration.new \
15
+ DashOverlord::Models::V1::DynamoDb::Video
16
+
17
+ migration.create!
18
+ end
19
+
20
+ after(:all) do
21
+ migration = DashOverlord::Models::V1::DynamoDb::Migration.new \
22
+ DashOverlord::Models::V1::DynamoDb::Video
23
+
24
+ migration.delete!
25
+ end
26
+
27
+ def build_answer
28
+ {
29
+ "url": "https://s3-eu-west-1.amazonaws.com/streetbees-assets/dashboards/home_selfie/videos_1/11264-kitchen.MOV",
30
+ "original_url": "https://streetbees-photos.s3-eu-west-1.amazonaws.com/uploads/bee_videos/temporary/original_11264-kitchen.jpg",
31
+ "subtitle_url": "/subtitles//unilever/hhc/11264-kitchen.en.vtt",
32
+ "country": "UK",
33
+ "category": "Kitchen floor",
34
+ "extra": nil,
35
+ "segment_uid": "hhc",
36
+ "lsm": "13+",
37
+ "age": nil,
38
+ "room": "Kitchen",
39
+ "gender": "Male",
40
+ "user_id": 835,
41
+ "children": true,
42
+ "age_group": "46+",
43
+ "household_members": 3,
44
+ "household_members_group": nil
45
+ }
46
+ end
47
+
48
+ def create_answers
49
+ videos = 20.times.map do |index|
50
+ build_answer.merge("id" => index + 1)
51
+ end
52
+
53
+ DashOverlord::Models::V1::DynamoDb::Video.create_all \
54
+ videos
55
+ end
56
+
57
+ context 'when no filter params are used' do
58
+ before do
59
+ create_answers
60
+
61
+ make_the_call
62
+ end
63
+
64
+ it '@context.status should be ok' do
65
+ expect(@context.status).to eq 'ok'
66
+ end
67
+
68
+ it 'should have the right ammount of data' do
69
+ expect(DashOverlord::Models::V1::DynamoDb::Video.all.count) \
70
+ .to eq(20)
71
+ end
72
+
73
+ it 'should return pagination meta_data' do
74
+ expect(@context.meta.page).to be 1
75
+ expect(@context.meta.per_page).to be 10
76
+ expect(@context.meta.total_pages).to be 2
77
+ expect(@context.meta.total_results).to be 20
78
+ end
79
+
80
+ it 'should return 10 results' do
81
+ expect(@context.videos.length).to be 10
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,121 @@
1
+ require 'spec_helper'
2
+
3
+ describe DashOverlord::UseCases::V1::Videos::Index::ElasticSearch::Base,
4
+ elasticsearch: true do
5
+ def make_the_call(params = nil)
6
+ DashOverlord::Models::V1::Answer.refresh_index
7
+
8
+ @context = described_class.perform \
9
+ (params || {}).merge({ session: user_session })
10
+
11
+ raise_context_unknown_error @context
12
+ end
13
+
14
+ def create_answer(attributes = {})
15
+ DashOverlord::Models::V1::Answer.create attributes
16
+ end
17
+
18
+ context 'when no bee_videos are available' do
19
+ before(:all) do
20
+ DashOverlord::Models::V1::Answer.delete_all
21
+
22
+ make_the_call
23
+ end
24
+
25
+ it '@context.status should be ok' do
26
+ expect(@context.status).to eq 'ok'
27
+ end
28
+
29
+ it 'should return pagination meta_data' do
30
+ expect(@context.meta.page).to be 1
31
+ expect(@context.meta.per_page).to be 10
32
+ expect(@context.meta.total_pages).to be 0
33
+ expect(@context.meta.total_results).to be 0
34
+ end
35
+
36
+ it 'should return 0 results' do
37
+ expect(@context.videos.length).to be 0
38
+ end
39
+ end
40
+
41
+ context 'when no filter params are used' do
42
+ before(:all) do
43
+ DashOverlord::Models::V1::Answer.delete_all
44
+ 20.times { create_answer title: 'Test' }
45
+
46
+ make_the_call
47
+ end
48
+
49
+ it '@context.status should be ok' do
50
+ expect(@context.status).to eq 'ok'
51
+ end
52
+
53
+ it 'should return pagination meta_data' do
54
+ expect(@context.meta.page).to be 1
55
+ expect(@context.meta.per_page).to be 10
56
+ expect(@context.meta.total_pages).to be 2
57
+ expect(@context.meta.total_results).to be 20
58
+ end
59
+
60
+ it 'should return 10 results' do
61
+ expect(@context.videos.length).to be 10
62
+ end
63
+ end
64
+
65
+ context 'when filtering by page = 2' do
66
+ before(:all) do
67
+ DashOverlord::Models::V1::Answer.delete_all
68
+ 35.times { create_answer title: 'Test' }
69
+
70
+ make_the_call page: 2, per_page: 15
71
+ end
72
+
73
+ it '@context.status should be ok' do
74
+ expect(@context.status).to eq 'ok'
75
+ end
76
+
77
+ it 'should return pagination meta_data' do
78
+ expect(@context.meta.page).to be 2
79
+ expect(@context.meta.per_page).to be 15
80
+ expect(@context.meta.total_pages).to be 3
81
+ expect(@context.meta.total_results).to be 35
82
+ end
83
+
84
+ it 'should return 15 results' do
85
+ expect(@context.videos.length).to be 15
86
+ end
87
+ end
88
+
89
+ context 'when filtering by something' do
90
+ before(:all) do
91
+ DashOverlord::Models::V1::Answer.delete_all
92
+
93
+ 15.times { create_answer user_id: 1, gender: 'Female', segment_uid: 'laundry' }
94
+ 10.times { create_answer user_id: 1, gender: 'Male', segment_uid: 'hhc' }
95
+ 5.times { create_answer user_id: 1, gender: 'Female', segment_uid: 'hhc' }
96
+ 20.times { create_answer user_id: 2, gender: 'Female', segment_uid: 'hhc' }
97
+
98
+ make_the_call \
99
+ filter_query: {
100
+ user_id_eq: 1,
101
+ gender_eq: 'Female',
102
+ segment_uid_eq: 'hhc'
103
+ }
104
+ end
105
+
106
+ it '@context.status should be ok' do
107
+ expect(@context.status).to eq 'ok'
108
+ end
109
+
110
+ it 'should return pagination meta_data' do
111
+ expect(@context.meta.page).to be 1
112
+ expect(@context.meta.per_page).to be 10
113
+ expect(@context.meta.total_pages).to be 1
114
+ expect(@context.meta.total_results).to be 5
115
+ end
116
+
117
+ it 'should return 5 results' do
118
+ expect(@context.videos.length).to be 5
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,116 @@
1
+ require 'spec_helper'
2
+
3
+ describe DashOverlord::UseCases::V1::Videos::Index::Postgres::Base do
4
+ def make_the_call(params = nil)
5
+ @context = described_class.perform \
6
+ (params || {}).merge({ session: user_session })
7
+
8
+ raise_context_unknown_error @context
9
+ end
10
+
11
+ context 'when no bee_videos are available' do
12
+ before { make_the_call }
13
+
14
+ it '@context.status should be ok' do
15
+ expect(@context.status).to eq 'ok'
16
+ end
17
+
18
+ it 'should return pagination meta_data' do
19
+ expect(@context.meta.page).to be 1
20
+ expect(@context.meta.per_page).to be 10
21
+ expect(@context.meta.total_pages).to be 0
22
+ expect(@context.meta.total_results).to be 0
23
+ end
24
+
25
+ it 'should return 0 results' do
26
+ expect(@context.videos.length).to be 0
27
+ end
28
+ end
29
+
30
+ context 'when no filter params are used' do
31
+ before do
32
+ 20.times { |index| create('v1/bee_video', submission_id: index) }
33
+
34
+ make_the_call
35
+ end
36
+
37
+ it '@context.status should be ok' do
38
+ expect(@context.status).to eq 'ok'
39
+ end
40
+
41
+ it 'should return pagination meta_data' do
42
+ expect(@context.meta.page).to be 1
43
+ expect(@context.meta.per_page).to be 10
44
+ expect(@context.meta.total_pages).to be 2
45
+ expect(@context.meta.total_results).to be 20
46
+ end
47
+
48
+ it 'should return 10 results' do
49
+ expect(@context.videos.length).to be 10
50
+ end
51
+ end
52
+
53
+ context 'when filtering by page = 0' do
54
+ before do
55
+ 20.times { create('v1/bee_video') }
56
+
57
+ make_the_call page: 0
58
+ end
59
+
60
+ it '@context.status should be ok' do
61
+ expect(@context.status).to eq 'ok'
62
+ end
63
+
64
+ it 'should return pagination meta_data' do
65
+ expect(@context.meta.page).to be 0
66
+ expect(@context.meta.per_page).to be 0
67
+ expect(@context.meta.total_pages).to be 0
68
+ expect(@context.meta.total_results).to be 20
69
+ end
70
+
71
+ it 'should return 20 results' do
72
+ expect(@context.videos.length).to be 20
73
+ end
74
+ end
75
+
76
+ context 'when filtering by something' do
77
+ def create_bee_video(trait, options = { user_id: 1 })
78
+ @submission_id += 1
79
+
80
+ options[:submission_id] = @submission_id
81
+
82
+ create('v1/bee_video', trait, options)
83
+ end
84
+
85
+ before do
86
+ @submission_id = 1
87
+
88
+ 15.times { create_bee_video(:female_laundry) }
89
+ 10.times { create_bee_video(:male_hhc) }
90
+ 5.times { create_bee_video(:female_hhc) }
91
+ 20.times { create_bee_video(:female_hhc, user_id: 2) }
92
+
93
+ make_the_call \
94
+ filter_query: {
95
+ user_id_eq: 1,
96
+ gender_eq: 'Female',
97
+ segment_uid_eq: 'hhc'
98
+ }
99
+ end
100
+
101
+ it '@context.status should be ok' do
102
+ expect(@context.status).to eq 'ok'
103
+ end
104
+
105
+ it 'should return pagination meta_data' do
106
+ expect(@context.meta.page).to be 1
107
+ expect(@context.meta.per_page).to be 10
108
+ expect(@context.meta.total_pages).to be 1
109
+ expect(@context.meta.total_results).to be 5
110
+ end
111
+
112
+ it 'should return 5 results' do
113
+ expect(@context.videos.length).to be 5
114
+ end
115
+ end
116
+ end