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,89 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'support/shared_missing_admin'
|
|
3
|
+
|
|
4
|
+
describe DashOverlord::UseCases::V1::Users::Create::Base do
|
|
5
|
+
def make_the_call(params = {})
|
|
6
|
+
@context = described_class.perform \
|
|
7
|
+
user_attributes: (params || {}), session: admin_session
|
|
8
|
+
|
|
9
|
+
raise_context_unknown_error @context
|
|
10
|
+
|
|
11
|
+
@response = app_response @context
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def user_attributes(*args)
|
|
15
|
+
attributes = attributes_for(*args).slice \
|
|
16
|
+
:id,
|
|
17
|
+
:email
|
|
18
|
+
|
|
19
|
+
attributes
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
include_examples 'authenticated admin use_case'
|
|
23
|
+
|
|
24
|
+
context 'when current_admin exists' do
|
|
25
|
+
before { @current_admin = create('v1/admin', :streetbees) }
|
|
26
|
+
|
|
27
|
+
context 'when sending valid params' do
|
|
28
|
+
before do
|
|
29
|
+
make_the_call email: 'admin@unilever.com', password: '123456'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'response.http_status should return 201' do
|
|
33
|
+
expect(@response.http_status).to be 201
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'response.data should return User details' do
|
|
37
|
+
user = DashOverlord::Models::V1::User.last
|
|
38
|
+
|
|
39
|
+
attributes = user_attributes('v1/user', :unilever)
|
|
40
|
+
expect(@response.data).to match a_hash_including({
|
|
41
|
+
'code' => 201,
|
|
42
|
+
'status' => 'created',
|
|
43
|
+
'data' => { id: user.id }.merge(attributes)
|
|
44
|
+
})
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'existing User password must be corrrect' do
|
|
48
|
+
user = DashOverlord::Models::V1::User.last
|
|
49
|
+
|
|
50
|
+
expect(user.secured_password).to eq '123456'
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
context 'when sending invalid params' do
|
|
55
|
+
before do
|
|
56
|
+
make_the_call
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it 'response.http_status should return 422' do
|
|
60
|
+
expect(@response.http_status).to be 422
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'response.data should return User details' do
|
|
64
|
+
expect(@response.data).to match a_hash_including({
|
|
65
|
+
'code' => 422,
|
|
66
|
+
'status' => 'unprocessable_entity',
|
|
67
|
+
'data' => a_hash_including({
|
|
68
|
+
'errors' => a_hash_including(
|
|
69
|
+
'email' => [I18n.t('errors.messages.blank')],
|
|
70
|
+
'password' => [I18n.t('errors.messages.blank')]
|
|
71
|
+
)
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
context 'when trying to overwrite the admin field' do
|
|
78
|
+
before do
|
|
79
|
+
make_the_call email: 'admin@unilever.com', password: '123456', admin: true
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it 'existing User must belong to current_admin' do
|
|
83
|
+
user = DashOverlord::Models::V1::User.last
|
|
84
|
+
|
|
85
|
+
expect(user.admin).to be_falsey
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'support/shared_missing_admin'
|
|
3
|
+
|
|
4
|
+
describe DashOverlord::UseCases::V1::Users::Delete::Base do
|
|
5
|
+
def make_the_call(user_id, params = {})
|
|
6
|
+
@context = described_class.perform \
|
|
7
|
+
session: admin_session,
|
|
8
|
+
user_id: user_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/user')
|
|
23
|
+
@user = create('v1/user', :unilever)
|
|
24
|
+
|
|
25
|
+
make_the_call @user.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 User should be deleted' do
|
|
33
|
+
expect(DashOverlord::Models::V1::User.count).to be 1
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'response.data should not return User 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/user')
|
|
48
|
+
@user = create('v1/user', :unilever)
|
|
49
|
+
|
|
50
|
+
make_the_call @user.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 User should be deleted' do
|
|
58
|
+
expect(DashOverlord::Models::V1::User.count).to be 1
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'response.data should not return User 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::Users::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 users 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 { |index| create('v1/user', email: "#{index}@streetbees.com") }
|
|
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 { |index| create('v1/user', email: "#{index}@streetbees.com") }
|
|
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 { |index| create('v1/user', email: "#{index}@unilever.com") }
|
|
96
|
+
15.times { |index| create('v1/user', email: "#{index}@streetbees.com") }
|
|
97
|
+
|
|
98
|
+
make_the_call filter_query: { email_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,105 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DashOverlord::UseCases::V1::Users::LogIn::Base do
|
|
4
|
+
def make_the_call(params = {})
|
|
5
|
+
@context = described_class.perform \
|
|
6
|
+
user_attributes: params
|
|
7
|
+
|
|
8
|
+
raise_context_unknown_error @context
|
|
9
|
+
|
|
10
|
+
@response = app_response @context
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
context 'when sending valid params' do
|
|
14
|
+
before do
|
|
15
|
+
@user = create('v1/user', :unilever)
|
|
16
|
+
|
|
17
|
+
make_the_call email: 'admin@unilever.com', password: 'password'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'response.http_status should return 200' do
|
|
21
|
+
expect(@response.http_status).to be 200
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'response.data should return User details' do
|
|
25
|
+
expect(@response.data).to match a_hash_including({
|
|
26
|
+
'code' => 200,
|
|
27
|
+
'status' => 'ok',
|
|
28
|
+
'data' => a_hash_including({ id: @user.id })
|
|
29
|
+
})
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
context 'when not sending any params' do
|
|
34
|
+
before do
|
|
35
|
+
make_the_call
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'response.http_status should return 422' do
|
|
39
|
+
expect(@response.http_status).to be 422
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'response.data should return User details' do
|
|
43
|
+
expect(@response.data).to match a_hash_including({
|
|
44
|
+
'code' => 422,
|
|
45
|
+
'status' => 'unprocessable_entity',
|
|
46
|
+
'data' => a_hash_including({
|
|
47
|
+
'errors' => a_hash_including(
|
|
48
|
+
'email' => [I18n.t('errors.messages.blank')],
|
|
49
|
+
'password' => [I18n.t('errors.messages.blank')]
|
|
50
|
+
)
|
|
51
|
+
})
|
|
52
|
+
})
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
context 'when sending invalid password' do
|
|
57
|
+
before do
|
|
58
|
+
@user = create('v1/user', :unilever)
|
|
59
|
+
|
|
60
|
+
make_the_call email: 'admin@unilever.com', password: 'fake'
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'response.http_status should return 422' do
|
|
64
|
+
expect(@response.http_status).to be 422
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'response.data should return User details' do
|
|
68
|
+
expect(@response.data).to match a_hash_including({
|
|
69
|
+
'code' => 422,
|
|
70
|
+
'status' => 'unprocessable_entity',
|
|
71
|
+
'data' => a_hash_including({
|
|
72
|
+
'errors' => a_hash_including(
|
|
73
|
+
'email' => [I18n.t('v1.users.bad_credentials')],
|
|
74
|
+
'password' => [I18n.t('v1.users.bad_credentials')]
|
|
75
|
+
)
|
|
76
|
+
})
|
|
77
|
+
})
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
context 'when sending invalid email' do
|
|
82
|
+
before do
|
|
83
|
+
@user = create('v1/user', :unilever)
|
|
84
|
+
|
|
85
|
+
make_the_call email: 'fake', password: 'password'
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it 'response.http_status should return 422' do
|
|
89
|
+
expect(@response.http_status).to be 422
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it 'response.data should return User details' do
|
|
93
|
+
expect(@response.data).to match a_hash_including({
|
|
94
|
+
'code' => 422,
|
|
95
|
+
'status' => 'unprocessable_entity',
|
|
96
|
+
'data' => a_hash_including({
|
|
97
|
+
'errors' => a_hash_including(
|
|
98
|
+
'email' => [I18n.t('v1.users.bad_credentials')],
|
|
99
|
+
'password' => [I18n.t('v1.users.bad_credentials')]
|
|
100
|
+
)
|
|
101
|
+
})
|
|
102
|
+
})
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'support/shared_missing_user'
|
|
3
|
+
|
|
4
|
+
describe DashOverlord::UseCases::V1::Users::ShowCurrentUser::Base do
|
|
5
|
+
def make_the_call(params = {})
|
|
6
|
+
@context = described_class.perform \
|
|
7
|
+
session: user_session
|
|
8
|
+
|
|
9
|
+
raise_context_unknown_error @context
|
|
10
|
+
|
|
11
|
+
@response = app_response @context
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def user_attributes(*args)
|
|
15
|
+
attributes = attributes_for(*args).slice \
|
|
16
|
+
:id,
|
|
17
|
+
:email
|
|
18
|
+
|
|
19
|
+
attributes
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
include_examples 'authenticated user use_case'
|
|
23
|
+
|
|
24
|
+
context 'when current_user exists' do
|
|
25
|
+
before { @current_user = create('v1/user', :unilever) }
|
|
26
|
+
|
|
27
|
+
context 'when requesting an existing user' do
|
|
28
|
+
before do
|
|
29
|
+
@user = create('v1/user')
|
|
30
|
+
|
|
31
|
+
make_the_call
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'response.http_status should return 200' do
|
|
35
|
+
expect(@response.http_status).to be 200
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'response.data should return User details' do
|
|
39
|
+
attributes = user_attributes('v1/user', :unilever)
|
|
40
|
+
|
|
41
|
+
attributes[:id] = @current_user.id
|
|
42
|
+
|
|
43
|
+
expect(@response.data).to match a_hash_including({
|
|
44
|
+
'code' => 200,
|
|
45
|
+
'status' => 'ok',
|
|
46
|
+
'data' => a_hash_including(attributes)
|
|
47
|
+
})
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'support/shared_missing_admin'
|
|
3
|
+
|
|
4
|
+
describe DashOverlord::UseCases::V1::Users::Show::Base do
|
|
5
|
+
def make_the_call(id, params = {})
|
|
6
|
+
@context = described_class.perform \
|
|
7
|
+
user_id: id, session: admin_session
|
|
8
|
+
|
|
9
|
+
raise_context_unknown_error @context
|
|
10
|
+
|
|
11
|
+
@response = app_response @context
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def user_attributes(*args)
|
|
15
|
+
attributes = attributes_for(*args).slice \
|
|
16
|
+
:id,
|
|
17
|
+
:email
|
|
18
|
+
|
|
19
|
+
attributes
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
include_examples 'authenticated admin use_case'
|
|
23
|
+
|
|
24
|
+
context 'when current_admin exists' do
|
|
25
|
+
before { @current_admin = create('v1/admin', :streetbees) }
|
|
26
|
+
|
|
27
|
+
context 'when requesting an non existing user' do
|
|
28
|
+
before do
|
|
29
|
+
make_the_call -1
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'response.http_status should return 404' do
|
|
33
|
+
expect(@response.http_status).to be 404
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'response.data should return a 404 message' do
|
|
37
|
+
expect(@response.data).to match a_hash_including({
|
|
38
|
+
'code' => 404,
|
|
39
|
+
'message' => I18n.t('v1.users.not_found'),
|
|
40
|
+
'status' => 'not_found'
|
|
41
|
+
})
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
context 'when requesting an existing user' do
|
|
46
|
+
before do
|
|
47
|
+
@user = create('v1/user', :unilever)
|
|
48
|
+
|
|
49
|
+
make_the_call @user.id
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'response.http_status should return 200' do
|
|
53
|
+
expect(@response.http_status).to be 200
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'response.data should return User details' do
|
|
57
|
+
attributes = user_attributes('v1/user', :unilever)
|
|
58
|
+
|
|
59
|
+
attributes[:id] = @user.id
|
|
60
|
+
|
|
61
|
+
expect(@response.data).to match a_hash_including({
|
|
62
|
+
'code' => 200,
|
|
63
|
+
'status' => 'ok',
|
|
64
|
+
'data' => a_hash_including(attributes)
|
|
65
|
+
})
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|