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