gooddata 0.6.53 → 0.6.54
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 +5 -5
- data/.flayignore +6 -0
- data/.gitignore +1 -0
- data/.pronto.yml +3 -0
- data/.rspec +2 -0
- data/.rubocop.yml +4 -1
- data/CHANGELOG.md +18 -0
- data/CONTRIBUTING.md +14 -1
- data/DEPENDENCIES.md +324 -253
- data/Dockerfile.jruby +5 -7
- data/Dockerfile.ruby +8 -8
- data/Rakefile +24 -0
- data/ci.rake +47 -0
- data/docker-compose.yml +34 -0
- data/gooddata.gemspec +8 -2
- data/lib/gooddata/bricks/middleware/restforce_middleware.rb +0 -3
- data/lib/gooddata/helpers/data_helper.rb +10 -7
- data/lib/gooddata/helpers/global_helpers_params.rb +8 -3
- data/lib/gooddata/lcm/actions/apply_custom_maql.rb +2 -1
- data/lib/gooddata/lcm/actions/associate_clients.rb +10 -1
- data/lib/gooddata/lcm/actions/collect_client_projects.rb +78 -0
- data/lib/gooddata/lcm/actions/collect_clients.rb +20 -6
- data/lib/gooddata/lcm/actions/collect_data_product.rb +62 -0
- data/lib/gooddata/lcm/actions/collect_dynamic_schedule_params.rb +62 -0
- data/lib/gooddata/lcm/actions/{collect_attrs.rb → collect_ldm_objects.rb} +3 -3
- data/lib/gooddata/lcm/actions/collect_meta.rb +6 -3
- data/lib/gooddata/lcm/actions/collect_segment_clients.rb +2 -1
- data/lib/gooddata/lcm/actions/collect_segments.rb +6 -7
- data/lib/gooddata/lcm/actions/collect_tagged_objects.rb +7 -4
- data/lib/gooddata/lcm/actions/create_segment_masters.rb +7 -3
- data/lib/gooddata/lcm/actions/ensure_data_product.rb +53 -0
- data/lib/gooddata/lcm/actions/ensure_technical_users_domain.rb +6 -2
- data/lib/gooddata/lcm/actions/ensure_technical_users_project.rb +30 -18
- data/lib/gooddata/lcm/actions/execute_schedules.rb +128 -0
- data/lib/gooddata/lcm/actions/provision_clients.rb +32 -21
- data/lib/gooddata/lcm/actions/purge_clients.rb +25 -39
- data/lib/gooddata/lcm/actions/rename_existing_client_projects.rb +70 -0
- data/lib/gooddata/lcm/actions/segments_filter.rb +6 -0
- data/lib/gooddata/lcm/actions/synchronize_cas.rb +11 -0
- data/lib/gooddata/lcm/actions/synchronize_clients.rb +2 -1
- data/lib/gooddata/lcm/actions/synchronize_etls_in_segment.rb +34 -15
- data/lib/gooddata/lcm/actions/synchronize_ldm.rb +10 -1
- data/lib/gooddata/lcm/actions/synchronize_new_segments.rb +2 -1
- data/lib/gooddata/lcm/actions/synchronize_processes.rb +4 -7
- data/lib/gooddata/lcm/actions/synchronize_tag_objects.rb +8 -5
- data/lib/gooddata/lcm/actions/synchronize_user_filters.rb +224 -0
- data/lib/gooddata/lcm/actions/synchronize_user_groups.rb +53 -0
- data/lib/gooddata/lcm/actions/synchronize_users.rb +324 -0
- data/lib/gooddata/lcm/dsl/type_dsl.rb +1 -0
- data/lib/gooddata/lcm/helpers/check_helper.rb +4 -0
- data/lib/gooddata/lcm/helpers/tags_helper.rb +4 -3
- data/lib/gooddata/lcm/lcm2.rb +33 -1
- data/lib/gooddata/lcm/types/complex/segment.rb +3 -0
- data/lib/gooddata/lcm/types/complex/update_preference.rb +8 -2
- data/lib/gooddata/lcm/types/special/array.rb +1 -3
- data/lib/gooddata/lcm/types/special/enum.rb +1 -3
- data/lib/gooddata/mixins/md_id_to_uri.rb +0 -1
- data/lib/gooddata/mixins/md_json.rb +2 -2
- data/lib/gooddata/models/blueprint/project_blueprint.rb +15 -0
- data/lib/gooddata/models/blueprint/to_wire.rb +1 -0
- data/lib/gooddata/models/client.rb +21 -9
- data/lib/gooddata/models/data_product.rb +149 -0
- data/lib/gooddata/models/domain.rb +26 -72
- data/lib/gooddata/models/from_wire.rb +2 -0
- data/lib/gooddata/models/metadata/report.rb +9 -3
- data/lib/gooddata/models/metadata/report_definition.rb +2 -2
- data/lib/gooddata/models/model.rb +1 -1
- data/lib/gooddata/models/process.rb +4 -0
- data/lib/gooddata/models/project.rb +58 -35
- data/lib/gooddata/models/project_creator.rb +13 -0
- data/lib/gooddata/models/segment.rb +63 -16
- data/lib/gooddata/models/style_setting.rb +2 -15
- data/lib/gooddata/models/user_group.rb +2 -0
- data/lib/gooddata/rest/connection.rb +32 -9
- data/lib/gooddata/rest/object_factory.rb +0 -25
- data/lib/gooddata/version.rb +1 -1
- data/spec/data/blueprints/invalid_blueprint.json +2 -2
- data/spec/data/blueprints/test_project_model_spec.json +1 -1
- data/spec/data/dynamic_schedule_params_table.csv +7 -0
- data/spec/data/workspace_table.csv +3 -3
- data/spec/environment/staging.rb +3 -3
- data/spec/integration/ads_output_stage_spec.rb +0 -10
- data/spec/integration/clients_spec.rb +1 -1
- data/spec/{unit → integration}/commands/command_projects_spec.rb +0 -0
- data/spec/{unit → integration}/core/connection_spec.rb +0 -0
- data/spec/{unit → integration}/core/logging_spec.rb +0 -0
- data/spec/{unit → integration}/core/project_spec.rb +0 -0
- data/spec/integration/date_dim_switch_spec.rb +13 -0
- data/spec/integration/full_process_schedule_spec.rb +2 -2
- data/spec/integration/helpers_spec.rb +16 -0
- data/spec/integration/lcm_spec.rb +12 -2
- data/spec/integration/mixins/id_to_uri_spec.rb +44 -0
- data/spec/integration/models/data_product_spec.rb +71 -0
- data/spec/{unit → integration}/models/domain_spec.rb +2 -2
- data/spec/{unit → integration}/models/invitation_spec.rb +0 -0
- data/spec/{unit → integration}/models/membership_spec.rb +0 -0
- data/spec/{unit → integration}/models/params_spec.rb +0 -0
- data/spec/{unit → integration}/models/profile_spec.rb +0 -0
- data/spec/{unit → integration}/models/project_role_spec.rb +0 -0
- data/spec/integration/models/project_spec.rb +225 -0
- data/spec/{unit → integration}/models/schedule_spec.rb +0 -0
- data/spec/{unit → integration}/models/unit_project_spec.rb +0 -0
- data/spec/integration/project_spec.rb +40 -5
- data/spec/integration/segments_spec.rb +27 -26
- data/spec/integration/user_filters_spec.rb +1 -1
- data/spec/spec_helper.rb +15 -19
- data/spec/unit/actions/associate_clients_spec.rb +47 -0
- data/spec/unit/actions/collect_client_projects_spec.rb +47 -0
- data/spec/unit/actions/collect_clients_spec.rb +27 -0
- data/spec/unit/actions/collect_data_product_spec.rb +64 -0
- data/spec/unit/actions/collect_dynamic_schedule_params_spec.rb +56 -0
- data/spec/unit/actions/collect_meta_spec.rb +4 -4
- data/spec/unit/actions/collect_segment_clients_spec.rb +44 -3
- data/spec/unit/actions/collect_tagged_objects_spec.rb +20 -4
- data/spec/unit/actions/create_segment_masters_spec.rb +64 -0
- data/spec/unit/actions/ensure_data_product_spec.rb +38 -0
- data/spec/unit/actions/ensure_technical_users_domain_spec.rb +51 -0
- data/spec/unit/actions/ensure_technical_users_project_spec.rb +72 -0
- data/spec/unit/actions/execute_schedules_spec.rb +94 -0
- data/spec/unit/actions/provision_clients_spec.rb +45 -0
- data/spec/unit/actions/purge_clients_spec.rb +47 -0
- data/spec/unit/actions/rename_existing_client_projects_spec.rb +54 -0
- data/spec/unit/actions/segments_filter_spec.rb +46 -0
- data/spec/unit/actions/shared_examples_for_user_actions.rb +10 -0
- data/spec/unit/actions/synchronize_cas_spec.rb +58 -0
- data/spec/unit/actions/synchronize_etls_in_segment_spec.rb +174 -13
- data/spec/unit/actions/synchronize_ldm_spec.rb +57 -0
- data/spec/unit/actions/synchronize_user_filters_spec.rb +142 -0
- data/spec/unit/actions/synchronize_user_groups_spec.rb +49 -0
- data/spec/unit/actions/synchronize_users_spec.rb +76 -0
- data/spec/unit/helpers/data_helper_spec.rb +17 -0
- data/spec/unit/helpers/global_helpers_spec.rb +16 -0
- data/spec/unit/helpers_spec.rb +0 -6
- data/spec/unit/models/blueprint/project_blueprint_spec.rb +21 -4
- data/spec/unit/models/project_creator_spec.rb +16 -0
- data/spec/unit/models/project_spec.rb +66 -197
- metadata +202 -100
- data/PULL_REQUEST_TEMPLATE.md +0 -5
- data/lib/gooddata/bricks/middleware/params_inspect_middleware.rb +0 -21
|
@@ -144,7 +144,7 @@ describe GoodData::Domain do
|
|
|
144
144
|
describe '#clients' do
|
|
145
145
|
subject { GoodData::Domain.new('my_domain') }
|
|
146
146
|
let(:client) { double('client') }
|
|
147
|
-
let(:clients_response) { { 'client' => { 'id' => '123' } } }
|
|
147
|
+
let(:clients_response) { { 'client' => { 'id' => '123' }, 'domain' => subject } }
|
|
148
148
|
|
|
149
149
|
before do
|
|
150
150
|
allow(client).to receive(:get).and_return(clients_response)
|
|
@@ -156,7 +156,7 @@ describe GoodData::Domain do
|
|
|
156
156
|
GoodData::Client,
|
|
157
157
|
clients_response
|
|
158
158
|
)
|
|
159
|
-
subject.clients(123)
|
|
159
|
+
subject.clients('123')
|
|
160
160
|
end
|
|
161
161
|
end
|
|
162
162
|
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
|
6
|
+
|
|
7
|
+
require 'gooddata'
|
|
8
|
+
|
|
9
|
+
describe GoodData::Project, :constraint => 'slow' do
|
|
10
|
+
before(:all) do
|
|
11
|
+
@client = ConnectionHelper.create_default_connection
|
|
12
|
+
@project = ProjectHelper.get_default_project(:client => @client)
|
|
13
|
+
@domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
after(:all) do
|
|
17
|
+
@client.disconnect
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe 'projects' do
|
|
21
|
+
it 'Can get all projects' do
|
|
22
|
+
projects = @client.projects
|
|
23
|
+
expect(projects).to_not be_nil
|
|
24
|
+
expect(projects).to be_a_kind_of(Array)
|
|
25
|
+
projects.pmap do |project|
|
|
26
|
+
expect(project).to be_an_instance_of(GoodData::Project)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'Returns project if ID passed' do
|
|
31
|
+
expect(@project).to_not be_nil
|
|
32
|
+
expect(@project).to be_a_kind_of(GoodData::Project)
|
|
33
|
+
expect(@project.pid).to eq @project.pid
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'Returns project if URL passed' do
|
|
37
|
+
expect(@project).to_not be_nil
|
|
38
|
+
expect(@project).to be_a_kind_of(GoodData::Project)
|
|
39
|
+
expect(@project.pid).to eq @project.pid
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'Throws an exception when invalid format of URL passed' do
|
|
43
|
+
invalid_url = '/gdc/invalid_url'
|
|
44
|
+
expect { GoodData::Project[invalid_url] }.to raise_error
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe '#all' do
|
|
49
|
+
it 'Returns all projects' do
|
|
50
|
+
projects = GoodData::Project.all(:client => @client)
|
|
51
|
+
expect(projects).to_not be_nil
|
|
52
|
+
expect(projects).to be_a_kind_of(Array)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
describe '#get_role_by_identifier' do
|
|
57
|
+
it 'Looks up for role by identifier' do
|
|
58
|
+
role = @project.get_role_by_identifier('readOnlyUserRole')
|
|
59
|
+
expect(role).to_not be_nil
|
|
60
|
+
expect(role).to be_a_kind_of(GoodData::ProjectRole)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
describe '#get_role_by_summary' do
|
|
65
|
+
it 'Looks up for role by summary' do
|
|
66
|
+
role = @project.get_role_by_summary('read only user role')
|
|
67
|
+
expect(role).to_not be_nil
|
|
68
|
+
expect(role).to be_a_kind_of(GoodData::ProjectRole)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
describe '#get_role_by_title' do
|
|
73
|
+
it 'Looks up for role by title' do
|
|
74
|
+
role = @project.get_role_by_title('Viewer')
|
|
75
|
+
expect(role).to_not be_nil
|
|
76
|
+
expect(role).to be_a_kind_of(GoodData::ProjectRole)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
describe "#member" do
|
|
81
|
+
it 'Returns GoodData::Membership when looking for existing user using login' do
|
|
82
|
+
res = @project.get_user(ConnectionHelper::DEFAULT_USERNAME)
|
|
83
|
+
expect(res).to be_instance_of(GoodData::Membership)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it 'Returns GoodData::Membership when looking for existing user using URL' do
|
|
87
|
+
res = @project.get_user(ConnectionHelper::DEFAULT_USER_URL)
|
|
88
|
+
expect(res).to be_instance_of(GoodData::Membership)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it 'Returns GoodData::Membership when looking for existing user using GoodData::Profile' do
|
|
92
|
+
user = @project.members.first
|
|
93
|
+
res = @project.get_user(user)
|
|
94
|
+
expect(res).to be_instance_of(GoodData::Membership)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it 'Returns null for non-existing user' do
|
|
98
|
+
res = @project.get_user(ConnectionHelper::TEST_USERNAME)
|
|
99
|
+
expect(res).to be_nil
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
describe "#member?" do
|
|
104
|
+
it 'Returns true when looking for existing user using login' do
|
|
105
|
+
res = @project.member?(ConnectionHelper::DEFAULT_USERNAME)
|
|
106
|
+
expect(res).to be_truthy
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it 'Returns true when looking for existing user using URL' do
|
|
110
|
+
res = @project.member?(ConnectionHelper::DEFAULT_USER_URL)
|
|
111
|
+
expect(res).to be_truthy
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it 'Returns true when looking for existing user using GoodData::Profile' do
|
|
115
|
+
user = @project.members.first
|
|
116
|
+
res = @project.member?(user)
|
|
117
|
+
expect(res).to be_truthy
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it 'Returns false for non-existing user' do
|
|
121
|
+
res = @project.member?(ConnectionHelper::TEST_USERNAME)
|
|
122
|
+
expect(res).to be_falsey
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it 'Returns true for existing user when using optional list' do
|
|
126
|
+
list = @project.members
|
|
127
|
+
res = @project.member?(ConnectionHelper::DEFAULT_USERNAME, list)
|
|
128
|
+
expect(res).to be_truthy
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it 'Returns false for non-existing user when using optional list' do
|
|
132
|
+
list = []
|
|
133
|
+
res = @project.member?(ConnectionHelper::DEFAULT_USERNAME, list)
|
|
134
|
+
expect(res).to be_falsey
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
describe '#members?' do
|
|
139
|
+
it 'Returns array of bools when looking for existing users using GoodData::Profile' do
|
|
140
|
+
users = @project.members.take(10)
|
|
141
|
+
res = @project.members?(users)
|
|
142
|
+
expect(res.all?).to be_truthy
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
it 'Support variety of inputs' do
|
|
146
|
+
users = @project.members.take(1)
|
|
147
|
+
res = @project.members?(users + [ConnectionHelper::TEST_USERNAME])
|
|
148
|
+
expect(res).to eq [true, false]
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
describe '#roles' do
|
|
153
|
+
it 'Returns array of GoodData::ProjectRole' do
|
|
154
|
+
roles = @project.roles
|
|
155
|
+
expect(roles).to be_instance_of(Array)
|
|
156
|
+
|
|
157
|
+
roles.each do |role|
|
|
158
|
+
expect(role).to be_instance_of(GoodData::ProjectRole)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
describe '#export_clone' do
|
|
164
|
+
context 'when exclude_schedule is true' do
|
|
165
|
+
let(:options) { { exclude_schedules: true } }
|
|
166
|
+
let(:clone) { GoodData::Project.create(title: 'project clone', client: @client, auth_token: ConnectionHelper::GD_PROJECT_TOKEN) }
|
|
167
|
+
|
|
168
|
+
after do
|
|
169
|
+
clone.delete if clone
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it 'excludes scheduled emails' do
|
|
173
|
+
@project.schedule_mail.save
|
|
174
|
+
export_token = @project.export_clone(options)
|
|
175
|
+
clone.import_clone(export_token)
|
|
176
|
+
expect(@project.scheduled_mails.to_a).not_to be_empty
|
|
177
|
+
expect(clone.scheduled_mails.to_a).to be_empty
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
context 'when cross_data_center_export is true' do
|
|
182
|
+
it 'is ok' do
|
|
183
|
+
# there are no staging environments on other datacenters
|
|
184
|
+
# so just checking if the parameter gets accepted
|
|
185
|
+
@project.export_clone(cross_data_center_export: true)
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
context 'when export task fails' do
|
|
190
|
+
let(:fail_response) do
|
|
191
|
+
response = { taskState: { status: 'ERROR' } }
|
|
192
|
+
GoodData::Helpers.stringify_keys(response)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
before do
|
|
196
|
+
allow(@client)
|
|
197
|
+
.to receive(:poll_on_response).and_return(fail_response)
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
it 'raises ExportCloneError' do
|
|
201
|
+
expect { @project.export_clone }.to raise_error(GoodData::ExportCloneError)
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
describe '#import_clone' do
|
|
207
|
+
let(:clone) { GoodData::Project.create(title: 'import clone test', client: @client, auth_token: ConnectionHelper::GD_PROJECT_TOKEN) }
|
|
208
|
+
let(:fail_response) do
|
|
209
|
+
response = { taskState: { status: 'ERROR' } }
|
|
210
|
+
GoodData::Helpers.stringify_keys(response)
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
after do
|
|
214
|
+
clone.delete if clone
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
context 'when import task fails' do
|
|
218
|
+
it 'raises ImportCloneError' do
|
|
219
|
+
export_token = @project.export_clone
|
|
220
|
+
allow(@client).to receive(:poll_on_response).and_return(fail_response)
|
|
221
|
+
expect { clone.import_clone(export_token) }.to raise_error(GoodData::ImportCloneError)
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
end
|
|
File without changes
|
|
File without changes
|
|
@@ -325,22 +325,57 @@ describe GoodData::Project, :constraint => 'slow' do
|
|
|
325
325
|
end
|
|
326
326
|
|
|
327
327
|
it 'should be able to set custom color' do
|
|
328
|
-
colors = [
|
|
328
|
+
colors = [
|
|
329
|
+
{
|
|
330
|
+
guid: 'first',
|
|
331
|
+
fill: {
|
|
332
|
+
r: 155,
|
|
333
|
+
g: 255,
|
|
334
|
+
b: 0
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
]
|
|
329
338
|
@project.create_custom_color_palette(colors)
|
|
330
|
-
expect(@project.current_color_palette.colors).to eq colors
|
|
339
|
+
expect(@project.current_color_palette.colors).to eq colors.map { |color| GoodData::Helpers.stringify_keys(color) }
|
|
331
340
|
end
|
|
332
341
|
|
|
333
342
|
it 'should be able to reset custom color' do
|
|
334
|
-
colors = [
|
|
343
|
+
colors = [
|
|
344
|
+
{
|
|
345
|
+
guid: 'first',
|
|
346
|
+
fill: {
|
|
347
|
+
r: 155,
|
|
348
|
+
g: 255,
|
|
349
|
+
b: 0
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
]
|
|
335
353
|
@project.create_custom_color_palette(colors)
|
|
336
354
|
@project.reset_color_palette
|
|
337
355
|
expect(@project.current_color_palette.colors).to eq []
|
|
338
356
|
end
|
|
339
357
|
|
|
340
358
|
it 'should not contains duplicate color' do
|
|
341
|
-
colors = [
|
|
359
|
+
colors = [
|
|
360
|
+
{
|
|
361
|
+
guid: 'first',
|
|
362
|
+
fill: {
|
|
363
|
+
r: 155,
|
|
364
|
+
g: 255,
|
|
365
|
+
b: 0
|
|
366
|
+
}
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
guid: 'first',
|
|
370
|
+
fill: {
|
|
371
|
+
r: 155,
|
|
372
|
+
g: 255,
|
|
373
|
+
b: 0
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
]
|
|
342
377
|
@project.create_custom_color_palette(colors)
|
|
343
|
-
expect(@project.current_color_palette.colors).to eq [{ r
|
|
378
|
+
expect(@project.current_color_palette.colors).to eq [{ "guid" => "first", "fill" => { "r" => 155, "g" => 255, "b" => 0 } }]
|
|
344
379
|
end
|
|
345
380
|
end
|
|
346
381
|
end
|
|
@@ -11,13 +11,6 @@ describe GoodData::Segment do
|
|
|
11
11
|
before(:all) do
|
|
12
12
|
@client = ConnectionHelper.create_default_connection
|
|
13
13
|
@domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
|
|
14
|
-
GoodData::Segment.all(domain: @domain).each do |segment|
|
|
15
|
-
begin
|
|
16
|
-
segment.delete(force: true)
|
|
17
|
-
rescue StandardError => e
|
|
18
|
-
GoodData.logger.warn "Failed to delete segment: #{e}"
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
14
|
end
|
|
22
15
|
|
|
23
16
|
before(:each) do
|
|
@@ -62,17 +55,18 @@ describe GoodData::Segment do
|
|
|
62
55
|
end
|
|
63
56
|
|
|
64
57
|
describe '#save' do
|
|
58
|
+
after do
|
|
59
|
+
@different_master.delete if @different_master
|
|
60
|
+
@different_data_product.delete if @different_data_product
|
|
61
|
+
end
|
|
62
|
+
|
|
65
63
|
it 'can update a segment master project' do
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
expect(@segment.master_project_uri).to eq different_master.uri
|
|
73
|
-
ensure
|
|
74
|
-
different_master.delete if different_master
|
|
75
|
-
end
|
|
64
|
+
@different_master = @client.create_project(title: 'Test project', auth_token: ConnectionHelper::GD_PROJECT_TOKEN)
|
|
65
|
+
@segment.master_project = @different_master
|
|
66
|
+
@segment.save
|
|
67
|
+
@segment = @domain.segments(@segment_name)
|
|
68
|
+
expect(@segment.master_project_uri).not_to eq @master_project.uri
|
|
69
|
+
expect(@segment.master_project_uri).to eq @different_master.uri
|
|
76
70
|
end
|
|
77
71
|
|
|
78
72
|
it 'cannot update a segment id' do
|
|
@@ -84,16 +78,23 @@ describe GoodData::Segment do
|
|
|
84
78
|
end
|
|
85
79
|
|
|
86
80
|
describe '#create_client' do
|
|
81
|
+
after do
|
|
82
|
+
@client_project && @client_project.delete
|
|
83
|
+
@segment_client && @segment_client.delete
|
|
84
|
+
end
|
|
85
|
+
|
|
87
86
|
it 'can create a new client in a segment' do
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
87
|
+
@client_project = @client.create_project(title: 'client_1 project', auth_token: ConnectionHelper::GD_PROJECT_TOKEN)
|
|
88
|
+
@segment_client = @segment.create_client(id: 'tenant_1', project: @client_project)
|
|
89
|
+
expect(@segment_client).to be_an_instance_of(GoodData::Client)
|
|
90
|
+
expect(@segment.clients.count).to eq 1
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
describe '#provision_client_projects' do
|
|
95
|
+
it 'returns an enumerable result' do
|
|
96
|
+
result = @segment.provision_client_projects
|
|
97
|
+
expect(result).to be_an_instance_of(Enumerator)
|
|
97
98
|
end
|
|
98
99
|
end
|
|
99
100
|
end
|
|
@@ -259,7 +259,7 @@ describe "User filters implementation", :constraint => 'slow' do
|
|
|
259
259
|
|
|
260
260
|
# we want to compute stuff on different user than we are setting it on
|
|
261
261
|
u = @domain.users.find { |user| user.login != ConnectionHelper::DEFAULT_USERNAME }
|
|
262
|
-
password = '
|
|
262
|
+
password = 'si@gFG593fo'
|
|
263
263
|
u.json['accountSetting']['password'] = password
|
|
264
264
|
@domain.update_user(u)
|
|
265
265
|
@project.add_user(u, 'admin')
|
data/spec/spec_helper.rb
CHANGED
|
@@ -5,6 +5,21 @@
|
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
7
7
|
require 'simplecov'
|
|
8
|
+
# for simplecov to work correctly, it has to be started before any other code
|
|
9
|
+
SimpleCov.start do
|
|
10
|
+
add_filter 'spec/'
|
|
11
|
+
|
|
12
|
+
add_group 'Middleware', 'lib/gooddata/bricks/middleware'
|
|
13
|
+
add_group 'CLI', 'lib/gooddata/cli'
|
|
14
|
+
add_group 'Commands', 'lib/gooddata/commands'
|
|
15
|
+
add_group 'Core', 'lib/gooddata/core'
|
|
16
|
+
add_group 'Exceptions', 'lib/gooddata/exceptions'
|
|
17
|
+
add_group 'Extensions', 'lib/gooddata/extensions'
|
|
18
|
+
add_group 'Goodzilla', 'lib/gooddata/goodzilla'
|
|
19
|
+
add_group 'Models', 'lib/gooddata/models'
|
|
20
|
+
add_group 'LCM', 'lib/gooddata/lcm'
|
|
21
|
+
end
|
|
22
|
+
|
|
8
23
|
require 'pmap'
|
|
9
24
|
require 'rspec'
|
|
10
25
|
require 'pathname'
|
|
@@ -49,22 +64,3 @@ RSpec.configure do |config|
|
|
|
49
64
|
|
|
50
65
|
config.fail_fast = false
|
|
51
66
|
end
|
|
52
|
-
|
|
53
|
-
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
|
|
54
|
-
SimpleCov::Formatter::HTMLFormatter
|
|
55
|
-
)
|
|
56
|
-
|
|
57
|
-
SimpleCov.start do
|
|
58
|
-
add_filter 'spec/'
|
|
59
|
-
add_filter 'test/'
|
|
60
|
-
|
|
61
|
-
add_group 'Bricks', 'lib/gooddata/bricks'
|
|
62
|
-
add_group 'Middleware', 'lib/gooddata/bricks/middleware'
|
|
63
|
-
add_group 'CLI', 'lib/gooddata/cli'
|
|
64
|
-
add_group 'Commands', 'lib/gooddata/commands'
|
|
65
|
-
add_group 'Core', 'lib/gooddata/core'
|
|
66
|
-
add_group 'Exceptions', 'lib/gooddata/exceptions'
|
|
67
|
-
add_group 'Extensions', 'lib/gooddata/extensions'
|
|
68
|
-
add_group 'Goodzilla', 'lib/gooddata/goodzilla'
|
|
69
|
-
add_group 'Models', 'lib/gooddata/models'
|
|
70
|
-
end
|