gooddata 1.0.2-java → 1.1.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/CONTRIBUTING.md +12 -0
  4. data/README.md +5 -2
  5. data/Rakefile +0 -1
  6. data/dev-gooddata-sso.pub.encrypted +40 -0
  7. data/gooddata.gemspec +3 -3
  8. data/lib/gooddata/connection.rb +23 -13
  9. data/lib/gooddata/helpers/data_helper.rb +0 -1
  10. data/lib/gooddata/lcm/actions/apply_custom_maql.rb +8 -1
  11. data/lib/gooddata/lcm/actions/associate_clients.rb +8 -1
  12. data/lib/gooddata/lcm/actions/base_action.rb +10 -0
  13. data/lib/gooddata/lcm/actions/collect_ca_metrics.rb +7 -1
  14. data/lib/gooddata/lcm/actions/collect_client_projects.rb +3 -0
  15. data/lib/gooddata/lcm/actions/collect_clients.rb +3 -1
  16. data/lib/gooddata/lcm/actions/collect_data_product.rb +10 -2
  17. data/lib/gooddata/lcm/actions/collect_dynamic_schedule_params.rb +12 -1
  18. data/lib/gooddata/lcm/actions/collect_ldm_objects.rb +6 -2
  19. data/lib/gooddata/lcm/actions/collect_meta.rb +1 -1
  20. data/lib/gooddata/lcm/actions/collect_segment_clients.rb +8 -1
  21. data/lib/gooddata/lcm/actions/collect_segments.rb +6 -5
  22. data/lib/gooddata/lcm/actions/collect_tagged_objects.rb +1 -1
  23. data/lib/gooddata/lcm/actions/collect_users_brick_users.rb +10 -4
  24. data/lib/gooddata/lcm/actions/create_segment_masters.rb +12 -2
  25. data/lib/gooddata/lcm/actions/ensure_data_product.rb +10 -0
  26. data/lib/gooddata/lcm/actions/ensure_technical_users_domain.rb +5 -1
  27. data/lib/gooddata/lcm/actions/ensure_technical_users_project.rb +3 -0
  28. data/lib/gooddata/lcm/actions/execute_schedules.rb +10 -0
  29. data/lib/gooddata/lcm/actions/import_object_collections.rb +1 -1
  30. data/lib/gooddata/lcm/actions/provision_clients.rb +12 -2
  31. data/lib/gooddata/lcm/actions/purge_clients.rb +2 -0
  32. data/lib/gooddata/lcm/actions/rename_existing_client_projects.rb +3 -0
  33. data/lib/gooddata/lcm/actions/synchronize_attribute_drillpaths.rb +4 -1
  34. data/lib/gooddata/lcm/actions/synchronize_cas.rb +7 -1
  35. data/lib/gooddata/lcm/actions/synchronize_clients.rb +11 -1
  36. data/lib/gooddata/lcm/actions/synchronize_color_palette.rb +7 -1
  37. data/lib/gooddata/lcm/actions/synchronize_etls_in_segment.rb +12 -7
  38. data/lib/gooddata/lcm/actions/synchronize_label_types.rb +4 -1
  39. data/lib/gooddata/lcm/actions/synchronize_ldm.rb +18 -7
  40. data/lib/gooddata/lcm/actions/synchronize_meta.rb +9 -0
  41. data/lib/gooddata/lcm/actions/synchronize_new_segments.rb +11 -1
  42. data/lib/gooddata/lcm/actions/synchronize_processes.rb +7 -1
  43. data/lib/gooddata/lcm/actions/synchronize_schedules.rb +4 -1
  44. data/lib/gooddata/lcm/actions/synchronize_tag_objects.rb +6 -0
  45. data/lib/gooddata/lcm/actions/synchronize_user_filters.rb +60 -15
  46. data/lib/gooddata/lcm/actions/synchronize_user_groups.rb +7 -1
  47. data/lib/gooddata/lcm/actions/synchronize_users.rb +106 -3
  48. data/lib/gooddata/lcm/actions/update_release_table.rb +19 -0
  49. data/lib/gooddata/lcm/helpers/check_helper.rb +21 -6
  50. data/lib/gooddata/lcm/lcm2.rb +35 -22
  51. data/lib/gooddata/lcm/types/class/gd_logger.rb +23 -0
  52. data/lib/gooddata/lcm/types/class/gd_product.rb +23 -0
  53. data/lib/gooddata/lcm/types/class/gd_project.rb +23 -0
  54. data/lib/gooddata/lcm/types/class/smart_hash.rb +23 -0
  55. data/lib/gooddata/lcm/types/complex/segment.rb +1 -1
  56. data/lib/gooddata/lcm/types/scalar/integer.rb +2 -2
  57. data/lib/gooddata/lcm/types/special/any.rb +18 -0
  58. data/lib/gooddata/models/blueprint/dataset_blueprint.rb +1 -1
  59. data/lib/gooddata/models/blueprint/to_manifest.rb +1 -3
  60. data/lib/gooddata/models/blueprint/to_wire.rb +2 -1
  61. data/lib/gooddata/models/from_wire.rb +13 -1
  62. data/lib/gooddata/models/metadata/folder.rb +22 -0
  63. data/lib/gooddata/models/metadata/metric.rb +5 -8
  64. data/lib/gooddata/models/model.rb +1 -1
  65. data/lib/gooddata/models/process.rb +42 -32
  66. data/lib/gooddata/models/project.rb +19 -36
  67. data/lib/gooddata/models/project_creator.rb +3 -1
  68. data/lib/gooddata/models/project_role.rb +3 -4
  69. data/lib/gooddata/models/schedule.rb +0 -2
  70. data/lib/gooddata/models/user_filters/mandatory_user_filter.rb +9 -1
  71. data/lib/gooddata/models/user_filters/user_filter.rb +1 -2
  72. data/lib/gooddata/models/user_filters/user_filter_builder.rb +18 -6
  73. data/lib/gooddata/rest/client.rb +1 -2
  74. data/lib/gooddata/rest/connection.rb +12 -46
  75. data/lib/gooddata/rest/phmap.rb +101 -56
  76. data/lib/gooddata/version.rb +1 -1
  77. data/rubydev_public.gpg.encrypted +51 -0
  78. data/rubydev_secret_keys.gpg.encrypted +109 -0
  79. data/spec/data/user_filters.csv +2 -0
  80. data/spec/environment/default.rb +2 -2
  81. data/spec/environment/development.rb +1 -1
  82. data/spec/environment/staging.rb +2 -3
  83. data/spec/environment/testing.rb +4 -4
  84. data/spec/integration/connection_spec.rb +37 -0
  85. data/spec/integration/core/connection_spec.rb +1 -1
  86. data/spec/integration/core/logging_spec.rb +8 -6
  87. data/spec/integration/core/project_spec.rb +1 -1
  88. data/spec/integration/mandatory_user_filter_spec.rb +53 -0
  89. data/spec/integration/mixins/id_to_uri_spec.rb +17 -5
  90. data/spec/integration/models/label_spec.rb +9 -0
  91. data/spec/integration/models/metric_spec.rb +24 -0
  92. data/spec/integration/models/process_spec.rb +35 -0
  93. data/spec/integration/models/project_role_spec.rb +1 -1
  94. data/spec/integration/models/schedule_spec.rb +0 -8
  95. data/spec/integration/schedule_spec.rb +4 -6
  96. data/spec/integration/user_filters_spec.rb +20 -16
  97. data/spec/integration/user_group_spec.rb +1 -1
  98. data/spec/integration/vcr_cassettes/GoodData_-_logging/_logger/can_assign_a_custom_logger.yml +2287 -0
  99. data/spec/integration/vcr_cassettes/GoodData_-_logging/_logger/client_logs_when_given_custom_message.yml +2287 -0
  100. data/spec/integration/vcr_cassettes/GoodData_-_logging/_logger/has_the_request_id_logged_when_I_passed_it.yml +2287 -0
  101. data/spec/integration/vcr_cassettes/GoodData_-_logging/_logging_off/Disables_logging.yml +2287 -0
  102. data/spec/integration/vcr_cassettes/GoodData_-_logging/_logging_on/Enables_logging.yml +2287 -0
  103. data/spec/integration/vcr_cassettes/GoodData_-_project/_project/Returns_project_assigned.yml +354 -0
  104. data/spec/integration/vcr_cassettes/GoodData_-_project/_project_/Assigns_nil.yml +299 -0
  105. data/spec/integration/vcr_cassettes/GoodData_-_project/_project_/Assigns_project_directly.yml +354 -0
  106. data/spec/integration/vcr_cassettes/GoodData_-_project/_project_/Assigns_project_using_project_ID.yml +354 -0
  107. data/spec/integration/vcr_cassettes/GoodData_-_project/_project_/Assigns_project_using_project_URL.yml +354 -0
  108. data/spec/integration/vcr_cassettes/GoodData_-_project/_with_project/Uses_project_specified.yml +354 -0
  109. data/spec/integration/vcr_cassettes/GoodData_Metric/all.yml +2065 -0
  110. data/spec/integration/vcr_cassettes/GoodData_Metric/should_be_able_to_update_folders.yml +119 -0
  111. data/spec/integration/vcr_cassettes/GoodData_Mixin_MdIdToUri/all.yml +9812 -0
  112. data/spec/integration/vcr_cassettes/GoodData_Mixin_MdIdToUri/should_get_json_containing_correct_id.yml +174 -0
  113. data/spec/integration/vcr_cassettes/GoodData_Mixin_MdIdToUri/should_return_nil_for_unknown_id.yml +58 -0
  114. data/spec/integration/vcr_cassettes/GoodData_Mixin_MdIdToUri/should_throw_BadRequest_for_-1.yml +63 -0
  115. data/spec/integration/vcr_cassettes/GoodData_Rest_Connection/_connect/Connects_using_username_and_password.yml +299 -0
  116. data/spec/integration/vcr_cassettes/GoodData_Rest_Connection/_disconnect/Connects_using_username_and_password.yml +299 -0
  117. data/spec/integration/vcr_cassettes/GoodData_Rest_Connection/_generate_request_id/Generates_a_non-empty_string.yml +2287 -0
  118. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_/Should_list_user_groups_as_Array.yml +56 -0
  119. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_add_members/Should_add_member.yml +315 -0
  120. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_members/Should_return_members_as_array.yml +54 -0
  121. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_remove_members/Should_remove_existing_members.yml +258 -0
  122. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_save/updates_existing_group.yml +159 -0
  123. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_set_members/Should_set_new_members.yml +158 -0
  124. data/spec/integration/vcr_cassettes/GoodData_UserGroup/all.yml +809 -0
  125. data/spec/spec_helper.rb +46 -2
  126. data/spec/unit/actions/associate_clients_spec.rb +2 -1
  127. data/spec/unit/actions/collect_data_product_spec.rb +3 -1
  128. data/spec/unit/actions/collect_segment_clients_spec.rb +1 -0
  129. data/spec/unit/actions/create_segment_masters_spec.rb +1 -0
  130. data/spec/unit/actions/ensure_data_product_spec.rb +1 -0
  131. data/spec/unit/actions/ensure_technical_users_domain_spec.rb +2 -0
  132. data/spec/unit/actions/ensure_technical_users_project_spec.rb +4 -0
  133. data/spec/unit/actions/provision_clients_spec.rb +2 -1
  134. data/spec/unit/actions/synchronize_etls_in_segment_spec.rb +0 -6
  135. data/spec/unit/actions/synchronize_ldm_spec.rb +20 -7
  136. data/spec/unit/actions/synchronize_user_filters_spec.rb +21 -0
  137. data/spec/unit/helpers/check_helper_production_spec.rb +34 -0
  138. data/spec/unit/helpers/check_helper_spec.rb +97 -9
  139. data/spec/unit/lcm/lcm2_spec.rb +67 -3
  140. data/spec/unit/models/blueprint/to_wire_spec.rb +1 -0
  141. data/spec/unit/models/dataset_blueprint.rb +14 -0
  142. data/spec/unit/models/from_wire_spec.rb +20 -0
  143. data/spec/unit/models/model_spec.rb +10 -0
  144. data/spec/unit/models/to_manifest_spec.rb +29 -0
  145. data/spec/unit/models/user_filters/user_filter_builder_spec.rb +44 -6
  146. data/spec/unit/rest/phmap_spec.rb +117 -0
  147. data/spec/vcr_configurer.rb +63 -0
  148. metadata +283 -24
  149. data/lib/gooddata/lcm/actions/ensure_segments.rb +0 -32
@@ -6,7 +6,7 @@
6
6
 
7
7
  # GoodData Module
8
8
  module GoodData
9
- VERSION = '1.0.2'
9
+ VERSION = '1.1.0'
10
10
 
11
11
  class << self
12
12
  # Version
@@ -0,0 +1,51 @@
1
+ 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
@@ -0,0 +1,109 @@
1
+ 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
109
+ i1OS/Q==
@@ -0,0 +1,2 @@
1
+ login,filter
2
+ rubydev+admin@gooddata.com,tomas@gooddata.com
@@ -15,7 +15,7 @@ module GoodData
15
15
  set_const :GD_MAX_RETRY, Helpers::GD_MAX_RETRY
16
16
 
17
17
  set_const :DEFAULT_USERNAME, "rubydev+admin@gooddata.com"
18
- set_const :DEFAULT_PASSWORD, GoodData::Helpers.decrypt('9m5Fe6WIxtkoG9vi2CanKm/CmZMLTpGYzr2duXh75m8=\n', ENV['GD_SPEC_PASSWORD'] || ENV['BIA_ENCRYPTION_KEY'])
18
+ set_const :DEFAULT_PASSWORD, GoodData::Helpers.decrypt("HeqNt6NKj7nEB5OEnXHQlsTRLQ3dVfG18gE8YtezgHY=\n", ENV['GD_SPEC_PASSWORD'] || ENV['BIA_ENCRYPTION_KEY'])
19
19
  set_const :DEFAULT_DOMAIN, ''
20
20
  set_const :DEFAULT_USER_URL, ''
21
21
 
@@ -27,7 +27,7 @@ module GoodData
27
27
 
28
28
  module ProcessHelper
29
29
  set_const :PROCESS_ID, ''
30
- set_const :DEPLOY_NAME, 'cc/graph/graph.grf'
30
+ set_const :DEPLOY_NAME, 'main.rb'
31
31
  end
32
32
 
33
33
  module ProjectHelper
@@ -7,7 +7,7 @@
7
7
  module GoodData
8
8
  module Environment
9
9
  module ConnectionHelper
10
- encrypted_token = "cfO9ifFYQVJw3q6Kf8/pVf/uLPLGnUJ/9nfvBxeGf/ILoj8N4ymWGgvryWEK\nHDMu\n"
10
+ encrypted_token = "ciKR76io4KgIUksL6BOF5GW9frsXHAa7JUFqRmc5Wsw=\n"
11
11
  key = ENV['GD_SPEC_PASSWORD'] || ENV['BIA_ENCRYPTION_KEY']
12
12
  token = GoodData::Helpers.decrypt(encrypted_token, key)
13
13
  set_const :GD_PROJECT_TOKEN, token
@@ -7,8 +7,7 @@
7
7
  module GoodData
8
8
  module Environment
9
9
  module ConnectionHelper
10
- encrypted_token = "YC+foKO2M8rIfB5gxF/sVvop5dRA7d/zLO/zzUlBr9ZimnoYe" \
11
- "LFyAqU20U4k\ncRYb\n"
10
+ encrypted_token = "2OSh3iq0CJqJMbRJY5VvB9k1AaOus2YOEweAoat+neY=\n"
12
11
  key = ENV['GD_SPEC_PASSWORD'] || ENV['BIA_ENCRYPTION_KEY']
13
12
  token = GoodData::Helpers.decrypt(encrypted_token, key)
14
13
  set_const :GD_PROJECT_TOKEN, token
@@ -19,7 +18,7 @@ module GoodData
19
18
  end
20
19
 
21
20
  module ProcessHelper
22
- set_const :PROCESS_ID, '83bcb06a-1735-49cd-99e9-58df1c856b06'
21
+ set_const :PROCESS_ID, '05cd64ef-db14-49f0-a755-d94d0fb1b3cd'
23
22
  end
24
23
 
25
24
  module ProjectHelper
@@ -8,7 +8,7 @@ module GoodData
8
8
  module Environment
9
9
  module ConnectionHelper
10
10
  set_const :GD_PROJECT_TOKEN, GoodData::Helpers.decrypt(
11
- "DIRchLbHH1fovLSVEfo3f5aQwHHQ432+PxF3uR5IuNn+iYWz+HZrLtaZ3LVE\n0ZNc\n",
11
+ "n968RZTTh4VLLrVveEdjD32/6uSXTw8H+nDbmT51j/s=\n",
12
12
  ENV['GD_SPEC_PASSWORD'] || ENV['BIA_ENCRYPTION_KEY']
13
13
  )
14
14
  set_const :DEFAULT_DOMAIN, 'staging2-lcm-prod'
@@ -18,15 +18,15 @@ module GoodData
18
18
  end
19
19
 
20
20
  module ProcessHelper
21
- set_const :PROCESS_ID, '3dddcd0d-1b56-4508-a94b-abea70c7154d'
21
+ set_const :PROCESS_ID, '7bc4b678-d1f6-4fb0-b1ee-513f4709bbf1'
22
22
  end
23
23
 
24
24
  module ProjectHelper
25
- set_const :PROJECT_ID, 'fbhs09oddsgezqtn3um5rp08midmbpg5'
25
+ set_const :PROJECT_ID, 'voyb6fcvdngwfyf722vn9cmbv7sq6mf6'
26
26
  end
27
27
 
28
28
  module ScheduleHelper
29
- set_const :SCHEDULE_ID, '58ad4fbbe4b02e90f6422677'
29
+ set_const :SCHEDULE_ID, '5acdd513e4b01dce92b23505'
30
30
  end
31
31
  end
32
32
  end
@@ -0,0 +1,37 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright (c) 2010-2018 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_relative '../helpers/connection_helper'
8
+
9
+ describe GoodData do
10
+ let(:login) { 'rubydev+admin@gooddata.com' }
11
+ KEYS = ['dev-gooddata-sso.pub', 'rubydev_public.gpg', 'rubydev_secret_keys.gpg']
12
+
13
+ before do
14
+ cipher = ENV['GD_SPEC_PASSWORD'] || ENV['BIA_ENCRYPTION_KEY']
15
+ KEYS.each do |key|
16
+ File.write(key, GoodData::Helpers.decrypt(File.read(key + '.encrypted'), cipher))
17
+ end
18
+
19
+ `gpg --import #{KEYS.join(' ')}`
20
+ end
21
+
22
+ it 'can use SSO' do
23
+ rest_client = GoodData.connect_sso(
24
+ login,
25
+ 'test-ruby',
26
+ GoodData::Environment::ConnectionHelper::DEFAULT_SERVER,
27
+ server: GoodData::Environment::ConnectionHelper::DEFAULT_SERVER,
28
+ verify_ssl: false
29
+ )
30
+ user = rest_client.domain(GoodData::Environment::ConnectionHelper::DEFAULT_DOMAIN).users(login, client: rest_client)
31
+ expect(user).to be_truthy
32
+ end
33
+
34
+ after do
35
+ KEYS.each { |key| File.delete(key) }
36
+ end
37
+ end
@@ -6,7 +6,7 @@
6
6
 
7
7
  require 'gooddata/connection'
8
8
 
9
- describe GoodData::Rest::Connection do
9
+ describe GoodData::Rest::Connection, :vcr do
10
10
  before(:all) do
11
11
  USERNAME = ConnectionHelper::DEFAULT_USERNAME
12
12
  PASSWORD = ConnectionHelper::DEFAULT_PASSWORD
@@ -36,7 +36,7 @@ class TestLogger < Logger
36
36
  end
37
37
  end
38
38
 
39
- describe 'GoodData - logging' do
39
+ describe 'GoodData - logging', :vcr do
40
40
  TEST_MESSAGE = 'Hello World!'
41
41
 
42
42
  def test_error
@@ -52,10 +52,10 @@ describe 'GoodData - logging' do
52
52
  end
53
53
 
54
54
  def test_request_id_logging
55
- c = ConnectionHelper.create_default_connection
56
- id = c.generate_request_id
55
+ @client = ConnectionHelper.create_default_connection
56
+ id = @client.generate_request_id
57
57
  GoodData.logger.info "Request id: #{id} Doing something very useful"
58
- c.get('/gdc/md', :request_id => id)
58
+ @client.get('/gdc/md', :request_id => id)
59
59
  id
60
60
  end
61
61
 
@@ -78,6 +78,8 @@ describe 'GoodData - logging' do
78
78
  else
79
79
  GoodData.logging_off
80
80
  end
81
+
82
+ @client.disconnect if @client
81
83
  end
82
84
 
83
85
  describe '#logger' do
@@ -93,9 +95,9 @@ describe 'GoodData - logging' do
93
95
  it 'client logs when given custom message' do
94
96
  GoodData.logger = TestLogger.new(STDOUT)
95
97
  GoodData.logger.level = Logger::INFO
96
- c = ConnectionHelper.create_default_connection
98
+ @client = ConnectionHelper.create_default_connection
97
99
  message = "Getting all projects."
98
- c.get('/gdc/md', :info_message => message)
100
+ @client.get('/gdc/md', :info_message => message)
99
101
  expect(GoodData.logger.last_message).to include(message)
100
102
  end
101
103
  end
@@ -8,7 +8,7 @@ require 'gooddata/connection'
8
8
  require 'gooddata/core/project'
9
9
  require 'gooddata/models/project'
10
10
 
11
- describe 'GoodData - project' do
11
+ describe 'GoodData - project', :vcr do
12
12
  before(:each) do
13
13
  @client = ConnectionHelper.create_default_connection
14
14
  end
@@ -0,0 +1,53 @@
1
+ describe GoodData::MandatoryUserFilter do
2
+ before :all do
3
+ @client = ConnectionHelper.create_default_connection
4
+ @project, * = ProjectHelper.load_full_project_implementation @client
5
+ @domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
6
+ end
7
+
8
+ after :all do
9
+ @project.delete if @project
10
+ end
11
+
12
+ describe 'when several users are sharing a MUF' do
13
+ before :all do
14
+ label = @project.labels.to_a.first
15
+ value = label.values.to_a.first
16
+
17
+ helper = AppstoreProjectHelper.new(@project, client: @client)
18
+ usr = helper.ensure_user('tttt@tttt.est', @domain)
19
+
20
+ other_usr = @domain.find_user_by_login 'rubydev+admin@gooddata.com'
21
+
22
+ filters = [[other_usr.email, label.uri, value[:value]]]
23
+ @project.add_data_permissions filters
24
+
25
+ muf = GoodData::MandatoryUserFilter.all(client: @client, project: @project).to_a.first
26
+ # TODO: replace this when gooddata-ruby supports MUFs shared between users
27
+ [usr, other_usr].map(&:uri).each do |u|
28
+ payload = {
29
+ 'userFilters' => {
30
+ 'items' => [
31
+ {
32
+ 'user' => u,
33
+ 'userFilters' => [muf.uri]
34
+ }
35
+ ]
36
+ }
37
+ }
38
+ @client.post("/gdc/md/#{@project.pid}/userfilters", payload)
39
+ end
40
+ end
41
+
42
+ it 'can fetch the related uris' do
43
+ mufs = GoodData::MandatoryUserFilter.all(client: @client, project: @project).to_a
44
+ expect(mufs.first.related_uri.count).to eq 2
45
+ end
46
+
47
+ it 'can fetch the related objects' do
48
+ mufs = GoodData::MandatoryUserFilter.all(client: @client, project: @project).to_a
49
+ expect(mufs.first.related.first).to be_a GoodData::Profile
50
+ expect(mufs.first.related.count).to eq 2
51
+ end
52
+ end
53
+ end
@@ -6,19 +6,31 @@
6
6
 
7
7
  require 'gooddata/mixins/md_id_to_uri'
8
8
 
9
- describe GoodData::Mixin::MdIdToUri do
10
- before :each do
9
+ describe GoodData::Mixin::MdIdToUri, :vcr do
10
+ before :all do
11
11
  @client = ConnectionHelper.create_default_connection
12
- project = ProjectHelper.get_default_project(client: @client)
12
+ @suffix = AppstoreProjectHelper.suffix
13
+ @opts = {
14
+ client: @client,
15
+ title: "Project for id to uri spec #{@suffix}",
16
+ auth_token: ConnectionHelper::GD_PROJECT_TOKEN,
17
+ environment: 'TESTING',
18
+ prod_organization: 'staging-lcm-prod'
19
+ }
20
+ project_helper = AppstoreProjectHelper.create(@opts)
21
+ project_helper.create_ldm
22
+ project_helper.load_data
23
+ @project = project_helper.project
13
24
 
14
25
  class SomeTestClass
15
26
  extend GoodData::Mixin::MdIdToUri
16
27
  end
17
28
 
18
- @opts = { client: @client, project: project }
29
+ @opts[:project] = @project
19
30
  end
20
31
 
21
- after(:each) do
32
+ after(:all) do
33
+ @project.delete
22
34
  @client.disconnect
23
35
  end
24
36