forest_liana 5.3.3 → 5.4.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.
@@ -0,0 +1,222 @@
1
+ module ForestLiana
2
+ describe PermissionsFormatter do
3
+ describe '#convert_to_new_format' do
4
+ let(:rendering_id) { 1 }
5
+ let(:old_format_collection_permissions) {
6
+ {
7
+ 'list'=>true,
8
+ 'show'=>false,
9
+ 'create'=>true,
10
+ 'update'=>false,
11
+ 'delete'=>true,
12
+ 'export'=>false,
13
+ 'searchToEdit'=>false
14
+ }
15
+ }
16
+ let(:old_format_action_permissions) { { 'allowed' => true, 'users' => nil } }
17
+ let(:old_format_scope_permissions) { nil }
18
+ let(:old_format_permissions) {
19
+ {
20
+ 'collection_1' => {
21
+ 'collection' => old_format_collection_permissions,
22
+ 'actions' => {
23
+ 'action_1' => old_format_action_permissions
24
+ },
25
+ 'scope' => old_format_scope_permissions
26
+ }
27
+ }
28
+ }
29
+
30
+ let(:converted_permission) { described_class.convert_to_new_format(old_format_permissions, rendering_id) }
31
+
32
+ describe 'collection permissions' do
33
+ subject { converted_permission['collections']['collection_1']['collection'] }
34
+
35
+ let(:expected_new_collection_permissions_format) {
36
+ {
37
+ 'browseEnabled'=>true,
38
+ 'readEnabled'=>false,
39
+ 'addEnabled'=>true,
40
+ 'editEnabled'=>false,
41
+ 'deleteEnabled'=>true,
42
+ 'exportEnabled'=>false
43
+ }
44
+ }
45
+
46
+ it 'should convert the old format to the new one' do
47
+ expect(subject).to eq expected_new_collection_permissions_format
48
+ end
49
+
50
+ describe 'with searchToEdit true and list false' do
51
+ let(:old_format_collection_permissions) {
52
+ {
53
+ 'list'=>false,
54
+ 'show'=>false,
55
+ 'create'=>false,
56
+ 'update'=>false,
57
+ 'delete'=>false,
58
+ 'export'=>false,
59
+ 'searchToEdit'=>true
60
+ }
61
+ }
62
+
63
+ let(:expected_new_collection_permissions_format) {
64
+ {
65
+ 'browseEnabled'=>true,
66
+ 'readEnabled'=>false,
67
+ 'addEnabled'=>false,
68
+ 'editEnabled'=>false,
69
+ 'deleteEnabled'=>false,
70
+ 'exportEnabled'=>false
71
+ }
72
+ }
73
+
74
+ it 'should convert the old format to the new one with browseEnabled at true' do
75
+ expect(subject).to eq expected_new_collection_permissions_format
76
+ end
77
+ end
78
+
79
+ describe 'with searchToEdit false and list true' do
80
+ let(:old_format_collection_permissions) {
81
+ {
82
+ 'list'=>true,
83
+ 'show'=>false,
84
+ 'create'=>false,
85
+ 'update'=>false,
86
+ 'delete'=>false,
87
+ 'export'=>false,
88
+ 'searchToEdit'=>false
89
+ }
90
+ }
91
+
92
+ let(:expected_new_collection_permissions_format) {
93
+ {
94
+ 'browseEnabled'=>true,
95
+ 'readEnabled'=>false,
96
+ 'addEnabled'=>false,
97
+ 'editEnabled'=>false,
98
+ 'deleteEnabled'=>false,
99
+ 'exportEnabled'=>false
100
+ }
101
+ }
102
+
103
+ it 'should convert the old format to the new one with browseEnabled at true' do
104
+ expect(subject).to eq expected_new_collection_permissions_format
105
+ end
106
+ end
107
+
108
+ describe 'with searchToEdit false and list false' do
109
+ let(:old_format_collection_permissions) {
110
+ {
111
+ 'list'=>false,
112
+ 'show'=>false,
113
+ 'create'=>false,
114
+ 'update'=>false,
115
+ 'delete'=>false,
116
+ 'export'=>false,
117
+ 'searchToEdit'=>false
118
+ }
119
+ }
120
+
121
+ let(:expected_new_collection_permissions_format) {
122
+ {
123
+ 'browseEnabled'=>false,
124
+ 'readEnabled'=>false,
125
+ 'addEnabled'=>false,
126
+ 'editEnabled'=>false,
127
+ 'deleteEnabled'=>false,
128
+ 'exportEnabled'=>false
129
+ }
130
+ }
131
+
132
+ it 'should convert the old format to the new one with browseEnabled at false' do
133
+ expect(subject).to eq expected_new_collection_permissions_format
134
+ end
135
+ end
136
+ end
137
+
138
+ describe 'action permissions' do
139
+ subject { converted_permission['collections']['collection_1']['actions']['action_1'] }
140
+
141
+ context 'when allowed is true' do
142
+ context 'when users is nil' do
143
+ let(:old_format_action_permissions) { { 'allowed' => true, 'users' => nil } }
144
+ let(:expected_new_action_permissions_format) { { 'triggerEnabled' => true } }
145
+
146
+ it 'expected action permission triggerEnabled field should be true' do
147
+ expect(subject).to eq expected_new_action_permissions_format
148
+ end
149
+ end
150
+
151
+ context 'when users is an empty array' do
152
+ let(:old_format_action_permissions) { { 'allowed' => true, 'users' => [] } }
153
+ let(:expected_new_action_permissions_format) { { 'triggerEnabled' => [] } }
154
+
155
+ it 'expected action permission triggerEnabled field should be an empty array' do
156
+ expect(subject).to eq expected_new_action_permissions_format
157
+ end
158
+ end
159
+
160
+ context 'when users is NOT an empty array' do
161
+ let(:old_format_action_permissions) { { 'allowed' => true, 'users' => [2, 3] } }
162
+ let(:expected_new_action_permissions_format) { { 'triggerEnabled' => [2, 3] } }
163
+
164
+ it 'expected action permission triggerEnabled field should be equal to the users array' do
165
+ expect(subject).to eq expected_new_action_permissions_format
166
+ end
167
+ end
168
+ end
169
+
170
+ context 'when allowed is false' do
171
+ context 'when users is nil' do
172
+ let(:old_format_action_permissions) { { 'allowed' => false, 'users' => nil } }
173
+ let(:expected_new_action_permissions_format) { { 'triggerEnabled' => false } }
174
+
175
+ it 'expected action permission triggerEnabled field should be false' do
176
+ expect(subject).to eq expected_new_action_permissions_format
177
+ end
178
+ end
179
+
180
+ context 'when users is an empty array' do
181
+ let(:old_format_action_permissions) { { 'allowed' => false, 'users' => [] } }
182
+ let(:expected_new_action_permissions_format) { { 'triggerEnabled' => false } }
183
+
184
+ it 'expected action permission triggerEnabled field should be false' do
185
+ expect(subject).to eq expected_new_action_permissions_format
186
+ end
187
+ end
188
+
189
+ context 'when users is NOT an empty array' do
190
+ let(:old_format_action_permissions) { { 'allowed' => false, 'users' => [2, 3] } }
191
+ let(:expected_new_action_permissions_format) { { 'triggerEnabled' => false } }
192
+
193
+ it 'expected action permission triggerEnabled field should be false' do
194
+ expect(subject).to eq expected_new_action_permissions_format
195
+ end
196
+ end
197
+ end
198
+ end
199
+
200
+ describe 'scope permissions' do
201
+ subject { converted_permission['renderings'][rendering_id]['collection_1']['scope'] }
202
+ let(:expected_new_format_permissions) { old_format_scope_permissions }
203
+
204
+ context 'when scope permissions are set' do
205
+ let(:old_format_scope_permissions) { { 'dynamicScopesValues' => {}, 'filter' => { 'aggregator' => 'and', 'conditions' => [{ 'field' => 'field_1', 'operator' => 'equal', 'value' => true }] } } }
206
+
207
+ it 'expected scope permissions should be set' do
208
+ expect(subject).to eq expected_new_format_permissions
209
+ end
210
+ end
211
+
212
+ context 'when scope permissions are nil' do
213
+ let(:old_format_scope_permissions) { nil }
214
+
215
+ it 'expected scope permissions should be nil' do
216
+ expect(subject).to eq expected_new_format_permissions
217
+ end
218
+ end
219
+ end
220
+ end
221
+ end
222
+ end
@@ -0,0 +1,82 @@
1
+ module ForestLiana
2
+ describe PermissionsGetter do
3
+ describe '#get_permissions_api_route' do
4
+ it 'should respond with the v3 permissions route' do
5
+ expect(described_class.get_permissions_api_route).to eq '/liana/v3/permissions'
6
+ end
7
+ end
8
+
9
+ describe '#get_permissions_for_rendering' do
10
+ let(:rendering_id) { 34 }
11
+ let(:liana_permissions_url) { 'https://api.forestadmin.com/liana/v3/permissions' }
12
+ let(:liana_permissions_api_call_response) { instance_double(HTTParty::Response) }
13
+ let(:expected_request_parameters) {
14
+ {
15
+ :headers => {
16
+ "Content-Type" => "application/json",
17
+ "forest-secret-key" => "env_secret_test"
18
+ },
19
+ :query => expected_query_parameters
20
+ }
21
+ }
22
+
23
+ before do
24
+ allow(HTTParty).to receive(:get).and_return(liana_permissions_api_call_response)
25
+ allow(liana_permissions_api_call_response).to receive(:response).and_return(liana_permissions_api_call_response_content)
26
+ allow(liana_permissions_api_call_response_content).to receive(:body).and_return(liana_permissions_api_call_response_content_body)
27
+ end
28
+
29
+ describe 'when the API returns a success' do
30
+ let(:liana_permissions_api_call_response_content) { Net::HTTPOK.new({}, 200, liana_permissions_api_call_response_content_body) }
31
+ let(:liana_permissions_api_call_response_content_body) { '{"test": true}' }
32
+ let(:expected_parsed_result) { { "test" => true } }
33
+
34
+ describe 'when NOT calling for rendering specific only' do
35
+ let(:expected_query_parameters) { { "renderingId" => rendering_id } }
36
+
37
+ it 'should call the API with correct URL' do
38
+ described_class.get_permissions_for_rendering(rendering_id)
39
+ expect(HTTParty).to have_received(:get).with(liana_permissions_url, expected_request_parameters)
40
+ end
41
+
42
+ it 'should return the expected JSON body' do
43
+ expect(described_class.get_permissions_for_rendering(rendering_id)).to eq expected_parsed_result
44
+ end
45
+ end
46
+
47
+ describe 'when calling for rendering specific only' do
48
+ let(:expected_query_parameters) { { "renderingId" => rendering_id, 'renderingSpecificOnly' => true } }
49
+
50
+ it 'should call the API with correct URL and parameters' do
51
+ described_class.get_permissions_for_rendering(rendering_id, rendering_specific_only: true)
52
+ expect(HTTParty).to have_received(:get).with(liana_permissions_url, expected_request_parameters)
53
+ end
54
+
55
+ it 'should return the expected JSON body' do
56
+ expect(described_class.get_permissions_for_rendering(rendering_id, rendering_specific_only: true)).to eq expected_parsed_result
57
+ end
58
+ end
59
+ end
60
+
61
+ describe 'when the API returns a not found error' do
62
+ let(:liana_permissions_api_call_response_content) { Net::HTTPNotFound.new({}, 404, liana_permissions_api_call_response_content_body) }
63
+ let(:liana_permissions_api_call_response_content_body) { 'Not Found' }
64
+
65
+ before do
66
+ allow(FOREST_LOGGER).to receive(:error)
67
+ end
68
+
69
+ it 'should return nil' do
70
+ expect(described_class.get_permissions_for_rendering(rendering_id)).to eq nil
71
+ end
72
+
73
+ it 'should log the not found error' do
74
+ described_class.get_permissions_for_rendering(rendering_id)
75
+ expect(FOREST_LOGGER).to have_received(:error).with('Cannot retrieve the permissions from the Forest server.')
76
+ expect(FOREST_LOGGER).to have_received(:error).with('Which was caused by:')
77
+ expect(FOREST_LOGGER).to have_received(:error).with(' Forest API returned an HTTP error 404')
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -1,3 +1,6 @@
1
+ require 'simplecov'
2
+ SimpleCov.start 'rails'
3
+
1
4
  # This file was generated by the `rails generate rspec:install` command. Conventionally, all
2
5
  # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
6
  # The generated `.rspec` file contains `--require spec_helper` which will cause
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forest_liana
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.3
4
+ version: 5.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sandro Munda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-08 00:00:00.000000000 Z
11
+ date: 2020-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -255,6 +255,7 @@ files:
255
255
  - app/services/forest_liana/objective_stat_getter.rb
256
256
  - app/services/forest_liana/operator_date_interval_parser.rb
257
257
  - app/services/forest_liana/permissions_checker.rb
258
+ - app/services/forest_liana/permissions_formatter.rb
258
259
  - app/services/forest_liana/permissions_getter.rb
259
260
  - app/services/forest_liana/pie_stat_getter.rb
260
261
  - app/services/forest_liana/query_stat_getter.rb
@@ -279,6 +280,7 @@ files:
279
280
  - app/services/forest_liana/stripe_subscriptions_getter.rb
280
281
  - app/services/forest_liana/two_factor_registration_confirmer.rb
281
282
  - app/services/forest_liana/user_secret_creator.rb
283
+ - app/services/forest_liana/utils/beta_schema_utils.rb
282
284
  - app/services/forest_liana/value_stat_getter.rb
283
285
  - app/views/layouts/forest_liana/application.html.erb
284
286
  - config/initializers/arel-helpers.rb
@@ -347,6 +349,10 @@ files:
347
349
  - spec/services/forest_liana/apimap_sorter_spec.rb
348
350
  - spec/services/forest_liana/filters_parser_spec.rb
349
351
  - spec/services/forest_liana/ip_whitelist_checker_spec.rb
352
+ - spec/services/forest_liana/permissions_checker_acl_disabled_spec.rb
353
+ - spec/services/forest_liana/permissions_checker_acl_enabled_spec.rb
354
+ - spec/services/forest_liana/permissions_formatter_spec.rb
355
+ - spec/services/forest_liana/permissions_getter_spec.rb
350
356
  - spec/services/forest_liana/schema_adapter_spec.rb
351
357
  - spec/spec_helper.rb
352
358
  - test/dummy/README.rdoc
@@ -555,10 +561,14 @@ test_files:
555
561
  - test/dummy/config/database.yml
556
562
  - test/forest_liana_test.rb
557
563
  - test/routing/route_test.rb
564
+ - spec/services/forest_liana/permissions_formatter_spec.rb
565
+ - spec/services/forest_liana/permissions_checker_acl_disabled_spec.rb
558
566
  - spec/services/forest_liana/ip_whitelist_checker_spec.rb
567
+ - spec/services/forest_liana/permissions_checker_acl_enabled_spec.rb
559
568
  - spec/services/forest_liana/schema_adapter_spec.rb
560
569
  - spec/services/forest_liana/apimap_sorter_spec.rb
561
570
  - spec/services/forest_liana/filters_parser_spec.rb
571
+ - spec/services/forest_liana/permissions_getter_spec.rb
562
572
  - spec/spec_helper.rb
563
573
  - spec/requests/actions_controller_spec.rb
564
574
  - spec/requests/resources_spec.rb