gooddata 1.0.2-java → 1.1.0-java

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 (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