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,242 @@
1
+ require 'spec_helper'
2
+ require 'elasticsearch'
3
+
4
+ describe Elasticord::Base, elasticsearch: true do
5
+ def elastic_search_client
6
+ @elastic_search_client ||= Elasticsearch::Client.new
7
+ end
8
+
9
+ describe '.index' do
10
+ it 'described_class should return the current env' do
11
+ expect(described_class.index).to eq ENV['ENV']
12
+ end
13
+
14
+ context 'given a child class' do
15
+ ChildClass1 = Class.new(described_class)
16
+
17
+ it 'ChildClass1 should return the same current env' do
18
+ expect(ChildClass1.index).to eq ENV['ENV']
19
+ end
20
+
21
+ context 'given that the child class sets a new index' do
22
+ before { ChildClass1.index = 'child_class_new_index' }
23
+
24
+ it 'described_class should return the current env' do
25
+ expect(described_class.index).to eq ENV['ENV']
26
+ end
27
+
28
+ it 'ChildClass1 should return child_class_new_index' do
29
+ expect(ChildClass1.index).to eq 'child_class_new_index'
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ describe '.type' do
36
+ it 'described_class should return _all' do
37
+ expect(described_class.type).to eq '_all'
38
+ end
39
+
40
+ context 'given a child class' do
41
+ ChildClass2 = Class.new(described_class)
42
+
43
+ it 'ChildClass2 should return child_class2' do
44
+ expect(ChildClass2.type).to eq 'child_class2'
45
+ end
46
+ end
47
+ end
48
+
49
+ describe '.create' do
50
+ ChildClass3 = Class.new(described_class)
51
+
52
+ def get_one(id)
53
+ result = elastic_search_client.get \
54
+ index: ChildClass3.index, type: ChildClass3.type, ignore: 404, id: id
55
+
56
+ result
57
+ end
58
+
59
+ context 'Given an id' do
60
+ let(:id) { '123' }
61
+
62
+ before do
63
+ @child_class = ChildClass3.create id: id, title: 'child class'
64
+ end
65
+
66
+ it 'ElasticSearch should contain a record with that specific id' do
67
+ result = get_one id
68
+
69
+ expect(result['found']).to be true
70
+ end
71
+
72
+ it '@child_class.id should match' do
73
+ expect(@child_class.id).to eq id
74
+ end
75
+
76
+ it '@child_class should be an instance of ChildClass3' do
77
+ expect(@child_class).to be_an_instance_of ChildClass3
78
+ end
79
+ end
80
+
81
+ context 'Given no id' do
82
+ before do
83
+ @child_class = ChildClass3.create title: 'child class'
84
+ end
85
+
86
+ it 'ElasticSearch should contain a record with that specific id' do
87
+ result = get_one @child_class.id
88
+
89
+ expect(result['found']).to be true
90
+ end
91
+ end
92
+ end
93
+
94
+ describe '.search' do
95
+ ChildClass4 = Class.new(described_class)
96
+
97
+ context 'Given that no record has been created' do
98
+ before do
99
+ ChildClass4.delete_all
100
+ ChildClass4.refresh_index
101
+
102
+ @search_result = ChildClass4.search({})
103
+ end
104
+
105
+ it 'should return a hash with total_results: 0 and an empty data' do
106
+ expect(@search_result).to match a_hash_including({
107
+ data: [],
108
+ total_results: 0
109
+ })
110
+ end
111
+ end
112
+
113
+ context 'Given that 5 recrod have been created' do
114
+ before do
115
+ ChildClass4.delete_all
116
+ 5.times { ChildClass4.create(title: 'child class') }
117
+ ChildClass4.refresh_index
118
+
119
+ @search_result = ChildClass4.search({})
120
+ end
121
+
122
+ it 'should return a hash with total_results: 5' do
123
+ expect(@search_result[:total_results]).to be 5
124
+ end
125
+
126
+ it 'should return a hash with 5 instances of the class' do
127
+ expect(@search_result[:data].length).to be 5
128
+
129
+ @search_result[:data].each do |child_class|
130
+ expect(child_class).to be_an_instance_of ChildClass4
131
+ end
132
+ end
133
+ end
134
+
135
+ context 'Given that 30 records have been created' do
136
+ before do
137
+ ChildClass4.delete_all
138
+
139
+ 24.times do
140
+ ChildClass4.create \
141
+ title: 'child class', brand: 'oficial', locked: false
142
+ end
143
+
144
+ ChildClass4.create(title: 'class', brand: 'oficial', locked: true)
145
+
146
+ 5.times do
147
+ ChildClass4.create(title: 'child', brand: 'unoficial', locked: false)
148
+ end
149
+
150
+ ChildClass4.refresh_index
151
+ end
152
+
153
+ context 'when no pagination params are passed' do
154
+ before do
155
+ @search_result = ChildClass4.search({})
156
+ end
157
+
158
+ it 'should return a hash with total_results: 30' do
159
+ expect(@search_result[:total_results]).to be 30
160
+ end
161
+
162
+ it 'should return a hash with 10 instances of the class' do
163
+ expect(@search_result[:data].length).to be 10
164
+
165
+ @search_result[:data].each do |child_class|
166
+ expect(child_class).to be_an_instance_of ChildClass4
167
+ end
168
+ end
169
+ end
170
+
171
+ context 'when single query params are passed' do
172
+ before do
173
+ @search_result = ChildClass4.search \
174
+ query: {
175
+ match: { brand: 'oficial' }
176
+ }
177
+ end
178
+
179
+ it 'should return a hash with total_results: 25' do
180
+ expect(@search_result[:total_results]).to be 25
181
+ end
182
+
183
+ it 'should return a hash with 10 elements' do
184
+ expect(@search_result[:data].length).to be 10
185
+ end
186
+ end
187
+
188
+ context 'when multi query params are passed' do
189
+ before do
190
+ @search_result = ChildClass4.search \
191
+ query: {
192
+ bool: {
193
+ must: [
194
+ { match: { title: 'child class' } }
195
+ ],
196
+ filter: [
197
+ { term: { brand: 'oficial' } },
198
+ { term: { locked: false } }
199
+ ]
200
+ }
201
+ }
202
+ end
203
+
204
+ it 'should return a hash with total_results: 24' do
205
+ expect(@search_result[:total_results]).to be 24
206
+ end
207
+
208
+ it 'should return a hash with 10 elements' do
209
+ expect(@search_result[:data].length).to be 10
210
+ end
211
+ end
212
+ end
213
+ end
214
+
215
+ describe '.get' do
216
+ ChildClass5 = Class.new(described_class)
217
+
218
+ context 'When the record does not exist' do
219
+ it 'should return false' do
220
+ result = ChildClass5.get '-1'
221
+
222
+ expect(result).to be false
223
+ end
224
+ end
225
+
226
+ context 'When the record exists' do
227
+ before do
228
+ @child_class = ChildClass5.create title: 'child class'
229
+
230
+ @result = ChildClass5.get @child_class.id
231
+ end
232
+
233
+ it 'should return an instance of ChildClass5' do
234
+ expect(@result).to be_an_instance_of ChildClass5
235
+ end
236
+
237
+ it 'should return the same id it requested' do
238
+ expect(@result.id).to be @child_class.id
239
+ end
240
+ end
241
+ end
242
+ end
@@ -0,0 +1,8 @@
1
+ FactoryGirl.define do
2
+ factory 'v1/admin', class: DashOverlord::Models::V1::Admin do
3
+ trait :streetbees do
4
+ email 'admin@streetbees.com'
5
+ secured_password 'password'
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,18 @@
1
+ FactoryGirl.define do
2
+ factory 'v1/bee_video', class: DashOverlord::Models::V1::BeeVideo do
3
+ trait :female_laundry do
4
+ segment_uid 'laundry'
5
+ gender 'Female'
6
+ end
7
+
8
+ trait :male_hhc do
9
+ segment_uid 'hhc'
10
+ gender 'Male'
11
+ end
12
+
13
+ trait :female_hhc do
14
+ segment_uid 'hhc'
15
+ gender 'Female'
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,23 @@
1
+ FactoryGirl.define do
2
+ factory 'v1/chart_config', class: DashOverlord::Models::V1::ChartConfig do
3
+ trait :pie_chart do
4
+ source 1
5
+ function 'count'
6
+ project_id 1
7
+ end
8
+
9
+ trait :count do
10
+ function 'count'
11
+ end
12
+
13
+ trait :percentage do
14
+ source 1
15
+ function 'percentage'
16
+ project_id 1
17
+ end
18
+
19
+ trait :average do
20
+ function 'average'
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,13 @@
1
+ FactoryGirl.define do
2
+ factory 'v1/client', class: DashOverlord::Models::V1::Client do
3
+ trait :unilever do
4
+ name 'Unilever'
5
+ uid 'unilever'
6
+ end
7
+
8
+ trait :vodafone do
9
+ name 'Vodafone'
10
+ uid 'vodafone'
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ FactoryGirl.define do
2
+ factory 'v1/user', class: DashOverlord::Models::V1::User do
3
+ trait :unilever do
4
+ admin false
5
+ email 'admin@unilever.com'
6
+ secured_password 'password'
7
+ end
8
+
9
+ trait :vodafone do
10
+ admin false
11
+ email 'admin@vodafone.com'
12
+ secured_password 'password'
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,49 @@
1
+ ENV['ENV'] = 'test'
2
+
3
+ require File.expand_path('../../config/boot', __FILE__)
4
+
5
+ require 'pry-byebug'
6
+ require 'factory_girl'
7
+ require 'database_cleaner'
8
+
9
+ Dir[File.expand_path('../**/support/**/*.rb', __FILE__)].each do |file|
10
+ require file
11
+ end
12
+
13
+ # I guess either "FactoryGirl" or "DatabaseCleaner" needs this line bellow
14
+ ActiveRecord::Base.establish_connection DashOverlord::V1::Config.get(:db_config)
15
+
16
+ RSpec.configure do |config|
17
+ config.include Helpers
18
+ config.include FactoryGirl::Syntax::Methods
19
+
20
+ config.run_all_when_everything_filtered = true
21
+ config.filter_run_excluding quota_rules_full_example: true
22
+
23
+ config.order = 'random'
24
+
25
+ config.before(:suite) do
26
+ DatabaseCleaner.strategy = :truncation
27
+ end
28
+
29
+ config.before(:each) do
30
+ DatabaseCleaner.start
31
+ end
32
+
33
+ config.after(:each) do
34
+ DatabaseCleaner.clean
35
+ end
36
+
37
+ config.before(:each, elasticsearch: true) do
38
+ DashOverlord::Models::V1::ElasticSearch.delete_all
39
+ DashOverlord::Models::V1::ElasticSearch.refresh_index
40
+ end
41
+
42
+ BCrypt::Engine.cost = 1
43
+ end
44
+
45
+ Dir[File.expand_path('../**{,/*/**}/factories', __FILE__)].each do |factory_dir|
46
+ FactoryGirl.definition_file_paths << factory_dir
47
+ end
48
+
49
+ FactoryGirl.find_definitions
@@ -0,0 +1,65 @@
1
+ module Helpers
2
+ def raise_context_unknown_error(context)
3
+ status = context.status
4
+
5
+ return if status.ok?
6
+ return if status.created?
7
+ return if status.accepted?
8
+ return if status.not_found?
9
+ return if status.unauthorized?
10
+ return if status.forbidden?
11
+ return if status.unprocessable_entity?
12
+ return if status.bad_request?
13
+ return if status.not_modified?
14
+
15
+ raise_hell(context.errors.inspect)
16
+ end
17
+
18
+ def raise_hell(message)
19
+ raise DashOverlord::HellRaiserError.new(message)
20
+ end
21
+
22
+ def admin_session
23
+ admin_session = {}
24
+
25
+ if @current_admin
26
+ admin_session[:admin_id] = @current_admin.id
27
+ end
28
+
29
+ admin_session
30
+ end
31
+
32
+ def user_session
33
+ user_session = {}
34
+
35
+ if @current_user
36
+ user_session[:user_id] = @current_user.id
37
+ end
38
+
39
+ user_session
40
+ end
41
+
42
+ def app_response(context)
43
+ http_statusses = DashOverlord::Serializers::Base::RAILS_HTTP_STATUS
44
+
45
+ OpenStruct.new \
46
+ data: to_hash_recursive(context.data),
47
+ http_status: http_statusses[context.status.to_sym]
48
+ end
49
+
50
+ def to_hash_recursive(data)
51
+ if data.is_a? Array
52
+ return data.map { |array_entry| to_hash_recursive(array_entry) }
53
+ end
54
+
55
+ if data.respond_to?(:each)
56
+ new_hash = {}
57
+
58
+ data.each { |key, value| new_hash[key.to_s] = to_hash_recursive(value) }
59
+
60
+ return ActiveSupport::HashWithIndifferentAccess.new new_hash
61
+ end
62
+
63
+ data
64
+ end
65
+ end
@@ -0,0 +1,39 @@
1
+ shared_examples 'authenticated admin use_case' do
2
+ context 'when current_admin is not present' do
3
+ before do
4
+ make_the_call nil
5
+ end
6
+
7
+ it 'response.http_status should return 401' do
8
+ expect(@response.http_status).to be 401
9
+ end
10
+
11
+ it 'response.data should return a 401 message' do
12
+ expect(@response.data).to match a_hash_including({
13
+ 'code' => 401,
14
+ 'message' => I18n.t('v1.admins.not_logged_in'),
15
+ 'status' => 'unauthorized'
16
+ })
17
+ end
18
+ end
19
+
20
+ context 'when current_admin does not exist' do
21
+ before do
22
+ @current_admin = OpenStruct.new id: 666
23
+
24
+ make_the_call nil
25
+ end
26
+
27
+ it 'response.http_status should return 401' do
28
+ expect(@response.http_status).to be 401
29
+ end
30
+
31
+ it 'response.data should return a 401 message' do
32
+ expect(@response.data).to match a_hash_including({
33
+ 'code' => 401,
34
+ 'message' => I18n.t('v1.admins.not_logged_in'),
35
+ 'status' => 'unauthorized'
36
+ })
37
+ end
38
+ end
39
+ end