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,77 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_admin'
3
+
4
+ describe DashOverlord::UseCases::V1::ChartConfigs::Create::Base do
5
+ def make_the_call(params = {})
6
+ @context = described_class.perform \
7
+ chart_config_attributes: (params || {}), session: admin_session
8
+
9
+ raise_context_unknown_error @context
10
+
11
+ @response = app_response @context
12
+ end
13
+
14
+ def chart_config_attributes(*args)
15
+ attributes = attributes_for(*args).slice \
16
+ :id,
17
+ :source,
18
+ :function,
19
+ :project_id
20
+
21
+ attributes[:source] = attributes[:source].to_s
22
+
23
+ attributes
24
+ end
25
+
26
+ include_examples 'authenticated admin use_case'
27
+
28
+ context 'when current_admin exists' do
29
+ before { @current_admin = create('v1/admin', :streetbees) }
30
+
31
+ context 'when sending valid params' do
32
+ before do
33
+ make_the_call chart_config_attributes('v1/chart_config', :pie_chart)
34
+ end
35
+
36
+ it 'response.http_status should return 201' do
37
+ expect(@response.http_status).to be 201
38
+ end
39
+
40
+ it 'response.data should return ChartConfig details' do
41
+ chart_config = DashOverlord::Models::V1::ChartConfig.last
42
+
43
+ attributes = chart_config_attributes('v1/chart_config', :pie_chart)
44
+
45
+ expect(@response.data).to match a_hash_including({
46
+ 'code' => 201,
47
+ 'status' => 'created',
48
+ 'data' => a_hash_including({ id: chart_config.id }.merge(attributes))
49
+ })
50
+ end
51
+ end
52
+
53
+ context 'when sending invalid params' do
54
+ before do
55
+ make_the_call
56
+ end
57
+
58
+ it 'response.http_status should return 422' do
59
+ expect(@response.http_status).to be 422
60
+ end
61
+
62
+ it 'response.data should return ChartConfig details' do
63
+ expect(@response.data).to match a_hash_including({
64
+ 'code' => 422,
65
+ 'status' => 'unprocessable_entity',
66
+ 'data' => a_hash_including({
67
+ 'errors' => a_hash_including(
68
+ 'source' => [I18n.t('errors.messages.blank')],
69
+ 'function' => [I18n.t('errors.messages.invalid')],
70
+ 'project_id' => [I18n.t('errors.messages.blank')]
71
+ )
72
+ })
73
+ })
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_admin'
3
+
4
+ describe DashOverlord::UseCases::V1::ChartConfigs::Delete::Base do
5
+ def make_the_call(chart_config_id, params = {})
6
+ @context = described_class.perform \
7
+ session: admin_session,
8
+ chart_config_id: chart_config_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/chart_config')
23
+ @chart_config = create('v1/chart_config', :pie_chart)
24
+
25
+ make_the_call @chart_config.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 ChartConfig should be deleted' do
33
+ expect(DashOverlord::Models::V1::ChartConfig.count).to be 1
34
+ end
35
+
36
+ it 'response.data should not return ChartConfig 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/chart_config')
48
+ @chart_config = create('v1/chart_config', :pie_chart)
49
+
50
+ make_the_call @chart_config.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 ChartConfig should be deleted' do
58
+ expect(DashOverlord::Models::V1::ChartConfig.count).to be 1
59
+ end
60
+
61
+ it 'response.data should not return ChartConfig 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,126 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_admin'
3
+
4
+ describe DashOverlord::UseCases::V1::ChartConfigs::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 chart_configs 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/chart_config') }
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/chart_config') }
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
+ 15.times { create('v1/chart_config', project_id: 1) }
96
+ 5.times { create('v1/chart_config', :pie_chart, project_id: 1) }
97
+ 5.times { create('v1/chart_config', :pie_chart, project_id: 2) }
98
+
99
+ make_the_call \
100
+ filter_query: {
101
+ project_id_eq: 1,
102
+ function_eq: 'count'
103
+ }
104
+ end
105
+
106
+ it 'response.status should return 200' do
107
+ expect(@response.http_status).to be 200
108
+ end
109
+
110
+ it 'should return pagination meta_data' do
111
+ expect(@response.data).to match a_hash_including({
112
+ 'meta' => a_hash_including({
113
+ 'page' => 1,
114
+ 'per_page'=> 10,
115
+ 'total_pages' => 1,
116
+ 'total_results' => 5
117
+ })
118
+ })
119
+ end
120
+
121
+ it 'should return 5 results' do
122
+ expect(@response.data['data'].length).to be 5
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_admin'
3
+
4
+ describe DashOverlord::UseCases::V1::ChartConfigs::Show::Base do
5
+ def make_the_call(id, params = {})
6
+ @context = described_class.perform \
7
+ chart_config_id: id, session: admin_session
8
+
9
+ raise_context_unknown_error @context
10
+
11
+ @response = app_response @context
12
+ end
13
+
14
+ def chart_config_attributes(*args)
15
+ attributes = attributes_for(*args).slice \
16
+ :id,
17
+ :source,
18
+ :function,
19
+ :project_id
20
+
21
+ attributes[:source] = attributes[:source].to_s
22
+
23
+ attributes
24
+ end
25
+
26
+ include_examples 'authenticated admin use_case'
27
+
28
+ context 'when current_admin exists' do
29
+ before { @current_admin = create('v1/admin', :streetbees) }
30
+
31
+ context 'when requesting an non existing ChartConfig' do
32
+ before do
33
+ make_the_call -1
34
+ end
35
+
36
+ it 'response.http_status should return 404' do
37
+ expect(@response.http_status).to be 404
38
+ end
39
+
40
+ it 'response.data should return a 404 message' do
41
+ expect(@response.data).to match a_hash_including({
42
+ 'code' => 404,
43
+ 'message' => I18n.t('v1.chart_configs.not_found'),
44
+ 'status' => 'not_found'
45
+ })
46
+ end
47
+ end
48
+
49
+ context 'when requesting an existing ChartConfig' do
50
+ before do
51
+ @chart_config = create('v1/chart_config', :pie_chart)
52
+
53
+ make_the_call @chart_config.id
54
+ end
55
+
56
+ it 'response.http_status should return 200' do
57
+ expect(@response.http_status).to be 200
58
+ end
59
+
60
+ it 'response.data should return ChartConfig details' do
61
+ attributes = chart_config_attributes('v1/chart_config', :pie_chart)
62
+
63
+ attributes[:id] = @chart_config.id
64
+
65
+ expect(@response.data).to match a_hash_including({
66
+ 'code' => 200,
67
+ 'status' => 'ok',
68
+ 'data' => a_hash_including(attributes)
69
+ })
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,104 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_admin'
3
+
4
+ describe DashOverlord::UseCases::V1::ChartConfigs::Update::Base do
5
+ def make_the_call(id, params = {})
6
+ @context = described_class.perform \
7
+ chart_config_id: id, chart_config_attributes: (params || {}), session: admin_session
8
+
9
+ raise_context_unknown_error @context
10
+
11
+ @response = app_response @context
12
+ end
13
+
14
+ def chart_config_attributes(*args)
15
+ attributes = attributes_for(*args).slice \
16
+ :id,
17
+ :source,
18
+ :function,
19
+ :project_id
20
+
21
+ attributes[:source] = attributes[:source].to_s
22
+
23
+ attributes
24
+ end
25
+
26
+ include_examples 'authenticated admin use_case'
27
+
28
+ context 'when current_admin exists' do
29
+ before { @current_admin = create('v1/admin', :streetbees) }
30
+
31
+ context 'when sending valid params' do
32
+ before do
33
+ @chart_config = create('v1/chart_config', :pie_chart)
34
+
35
+ make_the_call @chart_config.id,
36
+ chart_config_attributes('v1/chart_config', :percentage)
37
+ end
38
+
39
+ it 'response.http_status should return 200' do
40
+ expect(@response.http_status).to be 200
41
+ end
42
+
43
+ it 'response.data should return ChartConfig details' do
44
+ existing_chart_config = DashOverlord::Models::V1::ChartConfig.last
45
+
46
+ attributes = chart_config_attributes('v1/chart_config', :percentage)
47
+
48
+ expect(@response.data).to match a_hash_including({
49
+ 'code' => 200,
50
+ 'status' => 'ok',
51
+ 'data' => a_hash_including(
52
+ { id: existing_chart_config.id }.merge(attributes)
53
+ )
54
+ })
55
+ end
56
+ end
57
+
58
+ context 'when requesting an non existing ChartConfig' do
59
+ before do
60
+ make_the_call -1
61
+ end
62
+
63
+ it 'response.http_status should return 404' do
64
+ expect(@response.http_status).to be 404
65
+ end
66
+
67
+ it 'response.data should return a 404 message' do
68
+ expect(@response.data).to match a_hash_including({
69
+ 'code' => 404,
70
+ 'message' => I18n.t('v1.chart_configs.not_found'),
71
+ 'status' => 'not_found'
72
+ })
73
+ end
74
+ end
75
+
76
+ context 'when sending invalid params' do
77
+ before do
78
+ @chart_config = create('v1/chart_config', :pie_chart)
79
+
80
+ make_the_call @chart_config.id, source: '', project_id: '', function: ''
81
+ end
82
+
83
+ it 'response.http_status should return 422' do
84
+ expect(@response.http_status).to be 422
85
+ end
86
+
87
+ it 'response.data should return ChartConfig details' do
88
+ attributes = chart_config_attributes('v1/chart_config', :percentage)
89
+
90
+ expect(@response.data).to match a_hash_including({
91
+ 'code' => 422,
92
+ 'status' => 'unprocessable_entity',
93
+ 'data' => a_hash_including({
94
+ 'errors' => a_hash_including(
95
+ 'source' => [I18n.t('errors.messages.blank')],
96
+ 'function' => [I18n.t('errors.messages.invalid')],
97
+ 'project_id' => [I18n.t('errors.messages.blank')]
98
+ )
99
+ })
100
+ })
101
+ end
102
+ end
103
+ end
104
+ end