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.
- checksums.yaml +7 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +160 -0
- data/README.md +35 -0
- data/Rakefile +30 -0
- data/bin/setup_config_files.sh +19 -0
- data/config/boot.rb +39 -0
- data/dash_overlord.gemspec +39 -0
- data/db/migrate/20160321174733_devise_create_users.rb +43 -0
- data/db/migrate/20161014155300_create_bee_videos.rb +21 -0
- data/db/migrate/20161014160600_create_subtitle_lines.rb +11 -0
- data/db/migrate/20161017103500_add_width_and_height_to_bee_videos.rb +21 -0
- data/db/migrate/20161017161300_add_start_and_end_time_to_subtitle_lines.rb +17 -0
- data/db/migrate/20161017185300_add_fulltext_search_to_subtitle_lines.rb +13 -0
- data/db/migrate/20161018150400_add_subtitle_url_to_bee_videos.rb +5 -0
- data/db/migrate/20161026162500_add_country_category_and_extra_to_bee_videos.rb +7 -0
- data/db/migrate/20161124152600_add_segment_uid_to_bee_videos.rb +5 -0
- data/db/migrate/20161223113800_add_user_data_to_bee_videos.rb +17 -0
- data/db/migrate/20170105102428_add_segment_uid_to_subtitle_lines.rb +5 -0
- data/db/migrate/20170209171700_add_client_id_to_users.rb +5 -0
- data/db/migrate/20170209173800_create_admins.rb +8 -0
- data/db/migrate/20170209190400_create_clients.rb +8 -0
- data/db/migrate/20170210110800_create_chart_configs.rb +35 -0
- data/elasticord.gemspec +26 -0
- data/lib/dash_overlord.rb +16 -0
- data/lib/dash_overlord/config.rb +39 -0
- data/lib/dash_overlord/entities/base.rb +13 -0
- data/lib/dash_overlord/entities/v1/base.rb +10 -0
- data/lib/dash_overlord/entities/v1/chart_source.rb +10 -0
- data/lib/dash_overlord/entities/v1/meta_data.rb +10 -0
- data/lib/dash_overlord/locales/v1/en/admins.yml +7 -0
- data/lib/dash_overlord/locales/v1/en/chart_configs.yml +7 -0
- data/lib/dash_overlord/locales/v1/en/clients.yml +7 -0
- data/lib/dash_overlord/locales/v1/en/en.yml +213 -0
- data/lib/dash_overlord/locales/v1/en/users.yml +9 -0
- data/lib/dash_overlord/models/base.rb +12 -0
- data/lib/dash_overlord/models/v1/admin.rb +10 -0
- data/lib/dash_overlord/models/v1/answer.rb +10 -0
- data/lib/dash_overlord/models/v1/base.rb +11 -0
- data/lib/dash_overlord/models/v1/basic_user.rb +34 -0
- data/lib/dash_overlord/models/v1/bee_video.rb +30 -0
- data/lib/dash_overlord/models/v1/chart_config.rb +48 -0
- data/lib/dash_overlord/models/v1/client.rb +10 -0
- data/lib/dash_overlord/models/v1/dynamo_db/base.rb +98 -0
- data/lib/dash_overlord/models/v1/dynamo_db/migration.rb +52 -0
- data/lib/dash_overlord/models/v1/dynamo_db/video.rb +11 -0
- data/lib/dash_overlord/models/v1/elastic_search.rb +12 -0
- data/lib/dash_overlord/models/v1/subtitle_line.rb +21 -0
- data/lib/dash_overlord/models/v1/user.rb +10 -0
- data/lib/dash_overlord/requirable.rb +110 -0
- data/lib/dash_overlord/serializers/base.rb +127 -0
- data/lib/dash_overlord/serializers/v1/admins/base.rb +15 -0
- data/lib/dash_overlord/serializers/v1/admins/log_in.rb +13 -0
- data/lib/dash_overlord/serializers/v1/admins/show.rb +13 -0
- data/lib/dash_overlord/serializers/v1/base.rb +17 -0
- data/lib/dash_overlord/serializers/v1/chart_configs/base.rb +15 -0
- data/lib/dash_overlord/serializers/v1/chart_configs/create.rb +13 -0
- data/lib/dash_overlord/serializers/v1/chart_configs/delete.rb +12 -0
- data/lib/dash_overlord/serializers/v1/chart_configs/index.rb +15 -0
- data/lib/dash_overlord/serializers/v1/chart_configs/show.rb +59 -0
- data/lib/dash_overlord/serializers/v1/chart_configs/update.rb +12 -0
- data/lib/dash_overlord/serializers/v1/clients/base.rb +15 -0
- data/lib/dash_overlord/serializers/v1/clients/create.rb +13 -0
- data/lib/dash_overlord/serializers/v1/clients/delete.rb +12 -0
- data/lib/dash_overlord/serializers/v1/clients/index.rb +15 -0
- data/lib/dash_overlord/serializers/v1/clients/show.rb +15 -0
- data/lib/dash_overlord/serializers/v1/clients/update.rb +12 -0
- data/lib/dash_overlord/serializers/v1/meta_data/pagination.rb +19 -0
- data/lib/dash_overlord/serializers/v1/meta_data/pagination_with_filters.rb +13 -0
- data/lib/dash_overlord/serializers/v1/subtitle_lines/base.rb +15 -0
- data/lib/dash_overlord/serializers/v1/subtitle_lines/show.rb +35 -0
- data/lib/dash_overlord/serializers/v1/users/base.rb +15 -0
- data/lib/dash_overlord/serializers/v1/users/create.rb +13 -0
- data/lib/dash_overlord/serializers/v1/users/delete.rb +12 -0
- data/lib/dash_overlord/serializers/v1/users/index.rb +15 -0
- data/lib/dash_overlord/serializers/v1/users/log_in.rb +13 -0
- data/lib/dash_overlord/serializers/v1/users/show.rb +13 -0
- data/lib/dash_overlord/serializers/v1/users/update.rb +12 -0
- data/lib/dash_overlord/serializers/v1/videos/base.rb +15 -0
- data/lib/dash_overlord/serializers/v1/videos/index.rb +15 -0
- data/lib/dash_overlord/serializers/v1/videos/show.rb +43 -0
- data/lib/dash_overlord/use_cases/base.rb +87 -0
- data/lib/dash_overlord/use_cases/context.rb +72 -0
- data/lib/dash_overlord/use_cases/v1/admins/find_current_admin.rb +15 -0
- data/lib/dash_overlord/use_cases/v1/admins/log_in/base.rb +26 -0
- data/lib/dash_overlord/use_cases/v1/admins/show_current_admin/base.rb +22 -0
- data/lib/dash_overlord/use_cases/v1/admins/show_current_admin/find_current_admin.rb +21 -0
- data/lib/dash_overlord/use_cases/v1/admins/show_current_admin/get_current_admin.rb +20 -0
- data/lib/dash_overlord/use_cases/v1/base.rb +8 -0
- data/lib/dash_overlord/use_cases/v1/chart_configs/cache_answer_values/base.rb +19 -0
- data/lib/dash_overlord/use_cases/v1/chart_configs/cache_answer_values/build_cache.rb +85 -0
- data/lib/dash_overlord/use_cases/v1/chart_configs/create/assign_attributes_to_chart_config.rb +48 -0
- data/lib/dash_overlord/use_cases/v1/chart_configs/create/base.rb +34 -0
- data/lib/dash_overlord/use_cases/v1/chart_configs/create/build_chart_config.rb +17 -0
- data/lib/dash_overlord/use_cases/v1/chart_configs/create/validate_chart_config.rb +76 -0
- data/lib/dash_overlord/use_cases/v1/chart_configs/delete/base.rb +26 -0
- data/lib/dash_overlord/use_cases/v1/chart_configs/delete/delete_chart_config.rb +24 -0
- data/lib/dash_overlord/use_cases/v1/chart_configs/get_chart_config.rb +16 -0
- data/lib/dash_overlord/use_cases/v1/chart_configs/index/base.rb +24 -0
- data/lib/dash_overlord/use_cases/v1/chart_configs/index/find_chart_configs.rb +17 -0
- data/lib/dash_overlord/use_cases/v1/chart_configs/index/search_and_paginate_chart_configs.rb +17 -0
- data/lib/dash_overlord/use_cases/v1/chart_configs/save_chart_config.rb +19 -0
- data/lib/dash_overlord/use_cases/v1/chart_configs/show/base.rb +23 -0
- data/lib/dash_overlord/use_cases/v1/chart_configs/show/find_chart_config.rb +21 -0
- data/lib/dash_overlord/use_cases/v1/chart_configs/update/base.rb +32 -0
- data/lib/dash_overlord/use_cases/v1/clients/create/assign_attributes_to_client.rb +27 -0
- data/lib/dash_overlord/use_cases/v1/clients/create/base.rb +29 -0
- data/lib/dash_overlord/use_cases/v1/clients/create/build_client.rb +17 -0
- data/lib/dash_overlord/use_cases/v1/clients/create/validate_client.rb +25 -0
- data/lib/dash_overlord/use_cases/v1/clients/delete/base.rb +26 -0
- data/lib/dash_overlord/use_cases/v1/clients/delete/delete_client.rb +22 -0
- data/lib/dash_overlord/use_cases/v1/clients/index/base.rb +24 -0
- data/lib/dash_overlord/use_cases/v1/clients/index/find_clients.rb +17 -0
- data/lib/dash_overlord/use_cases/v1/clients/index/search_and_paginate_clients.rb +17 -0
- data/lib/dash_overlord/use_cases/v1/clients/save_client.rb +19 -0
- data/lib/dash_overlord/use_cases/v1/clients/show/base.rb +23 -0
- data/lib/dash_overlord/use_cases/v1/clients/show/find_client.rb +21 -0
- data/lib/dash_overlord/use_cases/v1/clients/show/get_client.rb +17 -0
- data/lib/dash_overlord/use_cases/v1/clients/update/base.rb +27 -0
- data/lib/dash_overlord/use_cases/v1/dummy_data/create/charts/base.rb +38 -0
- data/lib/dash_overlord/use_cases/v1/dummy_data/create/charts/build.rb +64 -0
- data/lib/dash_overlord/use_cases/v1/repositories/dynamo_db/client.rb +39 -0
- data/lib/dash_overlord/use_cases/v1/repositories/dynamo_db/create/batch.rb +46 -0
- data/lib/dash_overlord/use_cases/v1/repositories/dynamo_db/query/table.rb +25 -0
- data/lib/dash_overlord/use_cases/v1/shared/log_in/assign_attributes_to_user_model.rb +28 -0
- data/lib/dash_overlord/use_cases/v1/shared/log_in/base.rb +21 -0
- data/lib/dash_overlord/use_cases/v1/shared/log_in/build_user_model.rb +19 -0
- data/lib/dash_overlord/use_cases/v1/shared/log_in/get_existing_user_model.rb +20 -0
- data/lib/dash_overlord/use_cases/v1/shared/log_in/switch_user_model_by_existing_user_model.rb +17 -0
- data/lib/dash_overlord/use_cases/v1/shared/log_in/validate_user_model.rb +52 -0
- data/lib/dash_overlord/use_cases/v1/shared/search_and_paginate/apply_filters.rb +25 -0
- data/lib/dash_overlord/use_cases/v1/shared/search_and_paginate/apply_full_text_search.rb +22 -0
- data/lib/dash_overlord/use_cases/v1/shared/search_and_paginate/apply_pagination.rb +72 -0
- data/lib/dash_overlord/use_cases/v1/shared/search_and_paginate/base.rb +36 -0
- data/lib/dash_overlord/use_cases/v1/users/create/assign_attributes_to_user.rb +26 -0
- data/lib/dash_overlord/use_cases/v1/users/create/base.rb +29 -0
- data/lib/dash_overlord/use_cases/v1/users/create/build_user.rb +17 -0
- data/lib/dash_overlord/use_cases/v1/users/create/validate_user.rb +27 -0
- data/lib/dash_overlord/use_cases/v1/users/delete/base.rb +26 -0
- data/lib/dash_overlord/use_cases/v1/users/delete/delete_user.rb +22 -0
- data/lib/dash_overlord/use_cases/v1/users/find_current_user.rb +15 -0
- data/lib/dash_overlord/use_cases/v1/users/index/base.rb +23 -0
- data/lib/dash_overlord/use_cases/v1/users/index/search_and_paginate_users.rb +17 -0
- data/lib/dash_overlord/use_cases/v1/users/log_in/base.rb +26 -0
- data/lib/dash_overlord/use_cases/v1/users/save_user.rb +23 -0
- data/lib/dash_overlord/use_cases/v1/users/show/base.rb +23 -0
- data/lib/dash_overlord/use_cases/v1/users/show/find_user.rb +21 -0
- data/lib/dash_overlord/use_cases/v1/users/show/get_user.rb +17 -0
- data/lib/dash_overlord/use_cases/v1/users/show_current_user/base.rb +22 -0
- data/lib/dash_overlord/use_cases/v1/users/show_current_user/find_current_user.rb +21 -0
- data/lib/dash_overlord/use_cases/v1/users/show_current_user/get_current_user.rb +20 -0
- data/lib/dash_overlord/use_cases/v1/users/update/base.rb +27 -0
- data/lib/dash_overlord/use_cases/v1/videos/index/base.rb +31 -0
- data/lib/dash_overlord/use_cases/v1/videos/index/dynamodb/base.rb +19 -0
- data/lib/dash_overlord/use_cases/v1/videos/index/dynamodb/search_and_paginate_videos.rb +20 -0
- data/lib/dash_overlord/use_cases/v1/videos/index/elastic_search/base.rb +19 -0
- data/lib/dash_overlord/use_cases/v1/videos/index/elastic_search/search_and_paginate_videos.rb +97 -0
- data/lib/dash_overlord/use_cases/v1/videos/index/postgres/base.rb +22 -0
- data/lib/dash_overlord/use_cases/v1/videos/index/postgres/build_video_searched_subtitles.rb +42 -0
- data/lib/dash_overlord/use_cases/v1/videos/index/postgres/get_filters.rb +91 -0
- data/lib/dash_overlord/use_cases/v1/videos/index/postgres/hhc.json +206 -0
- data/lib/dash_overlord/use_cases/v1/videos/index/postgres/search_and_paginate_videos.rb +35 -0
- data/lib/dash_overlord/use_cases/v1/videos/index/postgres/search_on_subtitle_lines.rb +26 -0
- data/lib/dash_overlord/version.rb +3 -0
- data/lib/elasticord.rb +24 -0
- data/lib/elasticord/base.rb +80 -0
- data/lib/elasticord/config.rb +23 -0
- data/lib/elasticord/orm/create.rb +32 -0
- data/lib/elasticord/orm/delete.rb +23 -0
- data/lib/elasticord/orm/get.rb +34 -0
- data/lib/elasticord/orm/index.rb +15 -0
- data/lib/elasticord/version.rb +3 -0
- data/lib/tasks/create_dummy_data.rake +11 -0
- data/spec/dash_overlord/use_cases/v1/admins/log_in_spec.rb +105 -0
- data/spec/dash_overlord/use_cases/v1/admins/show_current_admin_spec.rb +51 -0
- data/spec/dash_overlord/use_cases/v1/chart_configs/create_spec.rb +77 -0
- data/spec/dash_overlord/use_cases/v1/chart_configs/delete_spec.rb +70 -0
- data/spec/dash_overlord/use_cases/v1/chart_configs/index_spec.rb +126 -0
- data/spec/dash_overlord/use_cases/v1/chart_configs/show_spec.rb +73 -0
- data/spec/dash_overlord/use_cases/v1/chart_configs/update_spec.rb +104 -0
- data/spec/dash_overlord/use_cases/v1/clients/create_spec.rb +85 -0
- data/spec/dash_overlord/use_cases/v1/clients/delete_spec.rb +70 -0
- data/spec/dash_overlord/use_cases/v1/clients/index_spec.rb +121 -0
- data/spec/dash_overlord/use_cases/v1/clients/show_spec.rb +70 -0
- data/spec/dash_overlord/use_cases/v1/clients/update_spec.rb +112 -0
- data/spec/dash_overlord/use_cases/v1/users/create_spec.rb +89 -0
- data/spec/dash_overlord/use_cases/v1/users/delete_spec.rb +70 -0
- data/spec/dash_overlord/use_cases/v1/users/index_spec.rb +121 -0
- data/spec/dash_overlord/use_cases/v1/users/log_in_spec.rb +105 -0
- data/spec/dash_overlord/use_cases/v1/users/show_current_admin_spec.rb +51 -0
- data/spec/dash_overlord/use_cases/v1/users/show_spec.rb +69 -0
- data/spec/dash_overlord/use_cases/v1/users/update_spec.rb +119 -0
- data/spec/dash_overlord/use_cases/v1/videos/index/base_spec.rb +39 -0
- data/spec/dash_overlord/use_cases/v1/videos/index/dynamo_db_spec.rb +84 -0
- data/spec/dash_overlord/use_cases/v1/videos/index/elastic_search_spec.rb +121 -0
- data/spec/dash_overlord/use_cases/v1/videos/index/postgres_spec.rb +116 -0
- data/spec/elasticord/base_spec.rb +242 -0
- data/spec/factories/v1/admins.rb +8 -0
- data/spec/factories/v1/bee_videos.rb +18 -0
- data/spec/factories/v1/chart_configs.rb +23 -0
- data/spec/factories/v1/clients.rb +13 -0
- data/spec/factories/v1/users.rb +15 -0
- data/spec/spec_helper.rb +49 -0
- data/spec/support/helpers.rb +65 -0
- data/spec/support/shared_missing_admin.rb +39 -0
- data/spec/support/shared_missing_user.rb +39 -0
- data/tasks/console.rake +10 -0
- 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,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,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
|
data/spec/spec_helper.rb
ADDED
|
@@ -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
|