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.
Files changed (139) hide show
  1. checksums.yaml +5 -5
  2. data/.flayignore +6 -0
  3. data/.gitignore +1 -0
  4. data/.pronto.yml +3 -0
  5. data/.rspec +2 -0
  6. data/.rubocop.yml +4 -1
  7. data/CHANGELOG.md +18 -0
  8. data/CONTRIBUTING.md +14 -1
  9. data/DEPENDENCIES.md +324 -253
  10. data/Dockerfile.jruby +5 -7
  11. data/Dockerfile.ruby +8 -8
  12. data/Rakefile +24 -0
  13. data/ci.rake +47 -0
  14. data/docker-compose.yml +34 -0
  15. data/gooddata.gemspec +8 -2
  16. data/lib/gooddata/bricks/middleware/restforce_middleware.rb +0 -3
  17. data/lib/gooddata/helpers/data_helper.rb +10 -7
  18. data/lib/gooddata/helpers/global_helpers_params.rb +8 -3
  19. data/lib/gooddata/lcm/actions/apply_custom_maql.rb +2 -1
  20. data/lib/gooddata/lcm/actions/associate_clients.rb +10 -1
  21. data/lib/gooddata/lcm/actions/collect_client_projects.rb +78 -0
  22. data/lib/gooddata/lcm/actions/collect_clients.rb +20 -6
  23. data/lib/gooddata/lcm/actions/collect_data_product.rb +62 -0
  24. data/lib/gooddata/lcm/actions/collect_dynamic_schedule_params.rb +62 -0
  25. data/lib/gooddata/lcm/actions/{collect_attrs.rb → collect_ldm_objects.rb} +3 -3
  26. data/lib/gooddata/lcm/actions/collect_meta.rb +6 -3
  27. data/lib/gooddata/lcm/actions/collect_segment_clients.rb +2 -1
  28. data/lib/gooddata/lcm/actions/collect_segments.rb +6 -7
  29. data/lib/gooddata/lcm/actions/collect_tagged_objects.rb +7 -4
  30. data/lib/gooddata/lcm/actions/create_segment_masters.rb +7 -3
  31. data/lib/gooddata/lcm/actions/ensure_data_product.rb +53 -0
  32. data/lib/gooddata/lcm/actions/ensure_technical_users_domain.rb +6 -2
  33. data/lib/gooddata/lcm/actions/ensure_technical_users_project.rb +30 -18
  34. data/lib/gooddata/lcm/actions/execute_schedules.rb +128 -0
  35. data/lib/gooddata/lcm/actions/provision_clients.rb +32 -21
  36. data/lib/gooddata/lcm/actions/purge_clients.rb +25 -39
  37. data/lib/gooddata/lcm/actions/rename_existing_client_projects.rb +70 -0
  38. data/lib/gooddata/lcm/actions/segments_filter.rb +6 -0
  39. data/lib/gooddata/lcm/actions/synchronize_cas.rb +11 -0
  40. data/lib/gooddata/lcm/actions/synchronize_clients.rb +2 -1
  41. data/lib/gooddata/lcm/actions/synchronize_etls_in_segment.rb +34 -15
  42. data/lib/gooddata/lcm/actions/synchronize_ldm.rb +10 -1
  43. data/lib/gooddata/lcm/actions/synchronize_new_segments.rb +2 -1
  44. data/lib/gooddata/lcm/actions/synchronize_processes.rb +4 -7
  45. data/lib/gooddata/lcm/actions/synchronize_tag_objects.rb +8 -5
  46. data/lib/gooddata/lcm/actions/synchronize_user_filters.rb +224 -0
  47. data/lib/gooddata/lcm/actions/synchronize_user_groups.rb +53 -0
  48. data/lib/gooddata/lcm/actions/synchronize_users.rb +324 -0
  49. data/lib/gooddata/lcm/dsl/type_dsl.rb +1 -0
  50. data/lib/gooddata/lcm/helpers/check_helper.rb +4 -0
  51. data/lib/gooddata/lcm/helpers/tags_helper.rb +4 -3
  52. data/lib/gooddata/lcm/lcm2.rb +33 -1
  53. data/lib/gooddata/lcm/types/complex/segment.rb +3 -0
  54. data/lib/gooddata/lcm/types/complex/update_preference.rb +8 -2
  55. data/lib/gooddata/lcm/types/special/array.rb +1 -3
  56. data/lib/gooddata/lcm/types/special/enum.rb +1 -3
  57. data/lib/gooddata/mixins/md_id_to_uri.rb +0 -1
  58. data/lib/gooddata/mixins/md_json.rb +2 -2
  59. data/lib/gooddata/models/blueprint/project_blueprint.rb +15 -0
  60. data/lib/gooddata/models/blueprint/to_wire.rb +1 -0
  61. data/lib/gooddata/models/client.rb +21 -9
  62. data/lib/gooddata/models/data_product.rb +149 -0
  63. data/lib/gooddata/models/domain.rb +26 -72
  64. data/lib/gooddata/models/from_wire.rb +2 -0
  65. data/lib/gooddata/models/metadata/report.rb +9 -3
  66. data/lib/gooddata/models/metadata/report_definition.rb +2 -2
  67. data/lib/gooddata/models/model.rb +1 -1
  68. data/lib/gooddata/models/process.rb +4 -0
  69. data/lib/gooddata/models/project.rb +58 -35
  70. data/lib/gooddata/models/project_creator.rb +13 -0
  71. data/lib/gooddata/models/segment.rb +63 -16
  72. data/lib/gooddata/models/style_setting.rb +2 -15
  73. data/lib/gooddata/models/user_group.rb +2 -0
  74. data/lib/gooddata/rest/connection.rb +32 -9
  75. data/lib/gooddata/rest/object_factory.rb +0 -25
  76. data/lib/gooddata/version.rb +1 -1
  77. data/spec/data/blueprints/invalid_blueprint.json +2 -2
  78. data/spec/data/blueprints/test_project_model_spec.json +1 -1
  79. data/spec/data/dynamic_schedule_params_table.csv +7 -0
  80. data/spec/data/workspace_table.csv +3 -3
  81. data/spec/environment/staging.rb +3 -3
  82. data/spec/integration/ads_output_stage_spec.rb +0 -10
  83. data/spec/integration/clients_spec.rb +1 -1
  84. data/spec/{unit → integration}/commands/command_projects_spec.rb +0 -0
  85. data/spec/{unit → integration}/core/connection_spec.rb +0 -0
  86. data/spec/{unit → integration}/core/logging_spec.rb +0 -0
  87. data/spec/{unit → integration}/core/project_spec.rb +0 -0
  88. data/spec/integration/date_dim_switch_spec.rb +13 -0
  89. data/spec/integration/full_process_schedule_spec.rb +2 -2
  90. data/spec/integration/helpers_spec.rb +16 -0
  91. data/spec/integration/lcm_spec.rb +12 -2
  92. data/spec/integration/mixins/id_to_uri_spec.rb +44 -0
  93. data/spec/integration/models/data_product_spec.rb +71 -0
  94. data/spec/{unit → integration}/models/domain_spec.rb +2 -2
  95. data/spec/{unit → integration}/models/invitation_spec.rb +0 -0
  96. data/spec/{unit → integration}/models/membership_spec.rb +0 -0
  97. data/spec/{unit → integration}/models/params_spec.rb +0 -0
  98. data/spec/{unit → integration}/models/profile_spec.rb +0 -0
  99. data/spec/{unit → integration}/models/project_role_spec.rb +0 -0
  100. data/spec/integration/models/project_spec.rb +225 -0
  101. data/spec/{unit → integration}/models/schedule_spec.rb +0 -0
  102. data/spec/{unit → integration}/models/unit_project_spec.rb +0 -0
  103. data/spec/integration/project_spec.rb +40 -5
  104. data/spec/integration/segments_spec.rb +27 -26
  105. data/spec/integration/user_filters_spec.rb +1 -1
  106. data/spec/spec_helper.rb +15 -19
  107. data/spec/unit/actions/associate_clients_spec.rb +47 -0
  108. data/spec/unit/actions/collect_client_projects_spec.rb +47 -0
  109. data/spec/unit/actions/collect_clients_spec.rb +27 -0
  110. data/spec/unit/actions/collect_data_product_spec.rb +64 -0
  111. data/spec/unit/actions/collect_dynamic_schedule_params_spec.rb +56 -0
  112. data/spec/unit/actions/collect_meta_spec.rb +4 -4
  113. data/spec/unit/actions/collect_segment_clients_spec.rb +44 -3
  114. data/spec/unit/actions/collect_tagged_objects_spec.rb +20 -4
  115. data/spec/unit/actions/create_segment_masters_spec.rb +64 -0
  116. data/spec/unit/actions/ensure_data_product_spec.rb +38 -0
  117. data/spec/unit/actions/ensure_technical_users_domain_spec.rb +51 -0
  118. data/spec/unit/actions/ensure_technical_users_project_spec.rb +72 -0
  119. data/spec/unit/actions/execute_schedules_spec.rb +94 -0
  120. data/spec/unit/actions/provision_clients_spec.rb +45 -0
  121. data/spec/unit/actions/purge_clients_spec.rb +47 -0
  122. data/spec/unit/actions/rename_existing_client_projects_spec.rb +54 -0
  123. data/spec/unit/actions/segments_filter_spec.rb +46 -0
  124. data/spec/unit/actions/shared_examples_for_user_actions.rb +10 -0
  125. data/spec/unit/actions/synchronize_cas_spec.rb +58 -0
  126. data/spec/unit/actions/synchronize_etls_in_segment_spec.rb +174 -13
  127. data/spec/unit/actions/synchronize_ldm_spec.rb +57 -0
  128. data/spec/unit/actions/synchronize_user_filters_spec.rb +142 -0
  129. data/spec/unit/actions/synchronize_user_groups_spec.rb +49 -0
  130. data/spec/unit/actions/synchronize_users_spec.rb +76 -0
  131. data/spec/unit/helpers/data_helper_spec.rb +17 -0
  132. data/spec/unit/helpers/global_helpers_spec.rb +16 -0
  133. data/spec/unit/helpers_spec.rb +0 -6
  134. data/spec/unit/models/blueprint/project_blueprint_spec.rb +21 -4
  135. data/spec/unit/models/project_creator_spec.rb +16 -0
  136. data/spec/unit/models/project_spec.rb +66 -197
  137. metadata +202 -100
  138. data/PULL_REQUEST_TEMPLATE.md +0 -5
  139. 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
@@ -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
@@ -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 = [{ r: 155, g: 255, b: 0 }]
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 = [{ r: 155, g: 255, b: 0 }]
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 = [{ r: 155, g: 255, b: 0 }, { r: 155, g: 255, b: 0 }]
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: 155, g: 255, b: 0 }]
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
- begin
67
- different_master = @client.create_project(title: 'Test project', auth_token: ConnectionHelper::GD_PROJECT_TOKEN)
68
- @segment.master_project = different_master
69
- @segment.save
70
- @segment = @domain.segments(@segment_name)
71
- expect(@segment.master_project_uri).not_to eq @master_project.uri
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
- begin
89
- client_project = @client.create_project(title: 'client_1 project', auth_token: ConnectionHelper::GD_PROJECT_TOKEN)
90
- segment_client = @segment.create_client(id: 'tenant_1', project: client_project)
91
- expect(segment_client).to be_an_instance_of(GoodData::Client)
92
- expect(@segment.clients.count).to eq 1
93
- ensure
94
- client_project.delete if client_project
95
- segment_client && segment_client.delete
96
- end
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 = 'abcd1234'
262
+ password = 'si@gFG593fo'
263
263
  u.json['accountSetting']['password'] = password
264
264
  @domain.update_user(u)
265
265
  @project.add_user(u, 'admin')
@@ -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