gooddata 0.6.18 → 0.6.19

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 (133) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.travis.yml +8 -19
  4. data/Guardfile +5 -0
  5. data/README.md +1 -3
  6. data/bin/gooddata +1 -1
  7. data/gooddata.gemspec +6 -4
  8. data/lib/gooddata.rb +1 -1
  9. data/lib/gooddata/bricks/middleware/aws_middleware.rb +24 -0
  10. data/lib/gooddata/cli/commands/console_cmd.rb +1 -1
  11. data/lib/gooddata/cli/commands/project_cmd.rb +29 -9
  12. data/lib/gooddata/cli/hooks.rb +9 -3
  13. data/lib/gooddata/commands/datawarehouse.rb +1 -7
  14. data/lib/gooddata/commands/project.rb +4 -3
  15. data/lib/gooddata/core/logging.rb +14 -2
  16. data/lib/gooddata/exceptions/execution_limit_exceeded.rb +9 -0
  17. data/lib/gooddata/exceptions/uncomputable_report.rb +8 -0
  18. data/lib/gooddata/exceptions/validation_error.rb +1 -1
  19. data/lib/gooddata/goodzilla/goodzilla.rb +5 -1
  20. data/lib/gooddata/helpers/data_helper.rb +40 -9
  21. data/lib/gooddata/mixins/md_finders.rb +35 -0
  22. data/lib/gooddata/models/blueprint/anchor_field.rb +46 -0
  23. data/lib/gooddata/models/blueprint/attribute_field.rb +25 -0
  24. data/lib/gooddata/models/blueprint/blueprint.rb +7 -0
  25. data/lib/gooddata/models/blueprint/blueprint_field.rb +66 -0
  26. data/lib/gooddata/models/{dashboard_builder.rb → blueprint/dashboard_builder.rb} +0 -0
  27. data/lib/gooddata/models/{schema_blueprint.rb → blueprint/dataset_blueprint.rb} +176 -117
  28. data/lib/gooddata/models/blueprint/date_dimension.rb +10 -0
  29. data/lib/gooddata/models/blueprint/fact_field.rb +16 -0
  30. data/lib/gooddata/models/blueprint/label_field.rb +39 -0
  31. data/lib/gooddata/models/{project_blueprint.rb → blueprint/project_blueprint.rb} +366 -168
  32. data/lib/gooddata/models/blueprint/project_builder.rb +79 -0
  33. data/lib/gooddata/models/blueprint/reference_field.rb +39 -0
  34. data/lib/gooddata/models/blueprint/schema_blueprint.rb +156 -0
  35. data/lib/gooddata/models/blueprint/schema_builder.rb +85 -0
  36. data/lib/gooddata/models/{to_manifest.rb → blueprint/to_manifest.rb} +25 -20
  37. data/lib/gooddata/models/{to_wire.rb → blueprint/to_wire.rb} +33 -52
  38. data/lib/gooddata/models/datawarehouse.rb +2 -2
  39. data/lib/gooddata/models/domain.rb +3 -2
  40. data/lib/gooddata/models/execution.rb +2 -2
  41. data/lib/gooddata/models/execution_detail.rb +7 -2
  42. data/lib/gooddata/models/from_wire.rb +60 -71
  43. data/lib/gooddata/models/from_wire_parse.rb +125 -125
  44. data/lib/gooddata/models/metadata.rb +14 -0
  45. data/lib/gooddata/models/metadata/dashboard.rb +2 -2
  46. data/lib/gooddata/models/metadata/label.rb +1 -1
  47. data/lib/gooddata/models/metadata/report.rb +6 -5
  48. data/lib/gooddata/models/metadata/report_definition.rb +44 -59
  49. data/lib/gooddata/models/model.rb +131 -43
  50. data/lib/gooddata/models/process.rb +13 -11
  51. data/lib/gooddata/models/profile.rb +12 -1
  52. data/lib/gooddata/models/project.rb +223 -19
  53. data/lib/gooddata/models/project_creator.rb +4 -15
  54. data/lib/gooddata/models/schedule.rb +1 -0
  55. data/lib/gooddata/models/user_filters/user_filter_builder.rb +2 -2
  56. data/lib/gooddata/rest/client.rb +18 -18
  57. data/lib/gooddata/rest/connection.rb +113 -94
  58. data/lib/gooddata/version.rb +1 -1
  59. data/lib/templates/project/model/model.rb.erb +15 -16
  60. data/spec/data/blueprints/additional_dataset_module.json +32 -0
  61. data/spec/data/blueprints/big_blueprint_not_pruned.json +2079 -0
  62. data/spec/data/blueprints/invalid_blueprint.json +103 -0
  63. data/spec/data/blueprints/m_n_model.json +104 -0
  64. data/spec/data/blueprints/model_module.json +25 -0
  65. data/spec/data/blueprints/test_blueprint.json +38 -0
  66. data/spec/data/blueprints/test_project_model_spec.json +106 -0
  67. data/spec/data/gd_gse_data_manifest.json +34 -34
  68. data/spec/data/manifests/test_blueprint.json +32 -0
  69. data/spec/data/{manifest_test_project.json → manifests/test_project.json} +9 -18
  70. data/spec/data/wire_models/test_blueprint.json +63 -0
  71. data/spec/data/wire_test_project.json +5 -5
  72. data/spec/environment/default.rb +33 -0
  73. data/spec/environment/develop.rb +26 -0
  74. data/spec/environment/environment.rb +14 -0
  75. data/spec/environment/hotfix.rb +17 -0
  76. data/spec/environment/production.rb +31 -0
  77. data/spec/environment/release.rb +17 -0
  78. data/spec/helpers/blueprint_helper.rb +10 -7
  79. data/spec/helpers/cli_helper.rb +24 -22
  80. data/spec/helpers/connection_helper.rb +27 -25
  81. data/spec/helpers/crypto_helper.rb +7 -5
  82. data/spec/helpers/csv_helper.rb +5 -3
  83. data/spec/helpers/process_helper.rb +15 -10
  84. data/spec/helpers/project_helper.rb +40 -33
  85. data/spec/helpers/schedule_helper.rb +15 -9
  86. data/spec/helpers/spec_helper.rb +11 -0
  87. data/spec/integration/blueprint_updates_spec.rb +93 -0
  88. data/spec/integration/command_datawarehouse_spec.rb +2 -1
  89. data/spec/integration/command_projects_spec.rb +9 -8
  90. data/spec/integration/create_from_template_spec.rb +1 -1
  91. data/spec/integration/create_project_spec.rb +1 -1
  92. data/spec/integration/full_process_schedule_spec.rb +1 -1
  93. data/spec/integration/full_project_spec.rb +91 -30
  94. data/spec/integration/over_to_user_filters_spec.rb +24 -28
  95. data/spec/integration/partial_md_export_import_spec.rb +4 -4
  96. data/spec/integration/project_spec.rb +1 -1
  97. data/spec/integration/rest_spec.rb +1 -1
  98. data/spec/integration/user_filters_spec.rb +19 -24
  99. data/spec/integration/variables_spec.rb +7 -9
  100. data/spec/logging_in_logging_out_spec.rb +1 -1
  101. data/spec/spec_helper.rb +10 -1
  102. data/spec/unit/bricks/middleware/aws_middelware_spec.rb +47 -0
  103. data/spec/unit/core/connection_spec.rb +2 -2
  104. data/spec/unit/core/logging_spec.rb +12 -4
  105. data/spec/unit/helpers/data_helper_spec.rb +60 -0
  106. data/spec/unit/models/blueprint/attributes_spec.rb +24 -0
  107. data/spec/unit/models/blueprint/dataset_spec.rb +116 -0
  108. data/spec/unit/models/blueprint/labels_spec.rb +39 -0
  109. data/spec/unit/models/blueprint/project_blueprint_spec.rb +643 -0
  110. data/spec/unit/models/blueprint/reference_spec.rb +24 -0
  111. data/spec/unit/models/{schema_builder_spec.rb → blueprint/schema_builder_spec.rb} +12 -4
  112. data/spec/unit/models/blueprint/to_wire_spec.rb +169 -0
  113. data/spec/unit/models/domain_spec.rb +13 -2
  114. data/spec/unit/models/from_wire_spec.rb +277 -98
  115. data/spec/unit/models/metadata_spec.rb +22 -4
  116. data/spec/unit/models/model_spec.rb +49 -39
  117. data/spec/unit/models/profile_spec.rb +1 -0
  118. data/spec/unit/models/project_spec.rb +7 -7
  119. data/spec/unit/models/schedule_spec.rb +20 -0
  120. data/spec/unit/models/to_manifest_spec.rb +31 -11
  121. data/spec/unit/rest/polling_spec.rb +86 -0
  122. metadata +102 -30
  123. data/lib/gooddata/models/project_builder.rb +0 -136
  124. data/lib/gooddata/models/schema_builder.rb +0 -77
  125. data/out.txt +0 -0
  126. data/spec/data/additional_dataset_module.json +0 -18
  127. data/spec/data/blueprint_invalid.json +0 -38
  128. data/spec/data/m_n_model/blueprint.json +0 -76
  129. data/spec/data/model_module.json +0 -18
  130. data/spec/data/test_project_model_spec.json +0 -76
  131. data/spec/unit/models/attribute_column_spec.rb +0 -7
  132. data/spec/unit/models/project_blueprint_spec.rb +0 -239
  133. data/spec/unit/models/to_wire_spec.rb +0 -71
@@ -2,48 +2,44 @@ require 'gooddata'
2
2
 
3
3
  describe "Variables implementation", :constraint => 'slow' do
4
4
  before(:all) do
5
- @spec = JSON.parse(File.read("./spec/data/m_n_model/blueprint.json"), :symbolize_names => true)
5
+ @spec = JSON.parse(File.read("./spec/data/blueprints/m_n_model.json"), :symbolize_names => true)
6
6
  @client = ConnectionHelper::create_default_connection
7
- @project = @client.create_project_from_blueprint(@spec, :auth_token => ConnectionHelper::GD_PROJECT_TOKEN)
7
+ @blueprint = GoodData::Model::ProjectBlueprint.new(@spec)
8
+ @project = @client.create_project_from_blueprint(@blueprint, :token => ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
8
9
  @domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
10
+ @label = @project.attributes('attr.permission.id').label_by_name('label.permission.id.email')
9
11
 
10
- @label = GoodData::Attribute.find_first_by_title('Perm User', client: @client, project: @project).label_by_name('email')
11
-
12
- @blueprint = GoodData::Model::ProjectBlueprint.new(@spec)
13
- commits_data = [
14
- ['commit_id', 'lines_changed', 'user_id'],
12
+ data = [
13
+ ['label.commits.id', 'fact.commits.lines_changed', 'dataset.users'],
15
14
  [1, 1, 1],
16
15
  [2, 3, 2],
17
16
  [3, 5, 3]]
18
- GoodData::Model.upload_data(commits_data, @blueprint, 'commits', :client => @client, :project => @project)
19
- # blueprint.find_dataset('commits').upload(commits_data)
20
-
21
- devs_data = [
22
- ["user_id", "email"],
17
+ @project.upload(data, @blueprint, 'dataset.commits')
18
+
19
+ data = [
20
+ ["label.users.id", "label.users.id.email"],
23
21
  [1, "tomas@gooddata.com"],
24
22
  [2, "petr@gooddata.com"],
25
23
  [3, "jirka@gooddata.com"]]
26
- GoodData::Model.upload_data(devs_data, @blueprint, 'users', :client => @client, :project => @project)
24
+ @project.upload(data, @blueprint, 'dataset.users')
27
25
 
28
- devs_data = [
29
- ["perm_user_id", "email"],
26
+ data = [
27
+ ["label.permission.id", "label.permission.id.email"],
30
28
  [1, "tomas@gooddata.com"],
31
29
  [2, "petr@gooddata.com"],
32
30
  [3, "jirka@gooddata.com"]]
33
- GoodData::Model.upload_data(devs_data, @blueprint, 'permission_users', :client => @client, :project => @project)
34
- # blueprint.find_dataset('devs').upload(devs_data)
31
+ @project.upload(data, @blueprint, 'dataset.permission_users')
35
32
 
36
- devs_data = [
37
- ['visibility_id', 'perm_user_id', 'commit_id'],
33
+ data = [
34
+ ['label.visibility.id', 'dataset.permission_users', 'dataset.commits'],
38
35
  [1, 1, 1],
39
- # [2, 1, 2],
40
36
  [3, 1, 3]]
41
- GoodData::Model.upload_data(devs_data, @blueprint, 'visibility', :client => @client, :project => @project)
37
+ @project.upload(data, @blueprint, 'dataset.visibility')
42
38
 
43
39
  @variable = @project.create_variable(title: 'uaaa', attribute: @label.attribute).save
44
40
 
45
- @attr1 = GoodData::Attribute.find_first_by_title('Visibility', client: @client, project: @project)
46
- @attr2 = GoodData::Attribute.find_first_by_title('Commit', client: @client, project: @project)
41
+ @attr1 = @project.attributes('attr.visibility.id')
42
+ @attr2 = @project.attributes('attr.commits.id')
47
43
 
48
44
  @filters = [
49
45
  {
@@ -70,21 +66,21 @@ describe "Variables implementation", :constraint => 'slow' do
70
66
  end
71
67
 
72
68
  it "should create an over to filter transparently" do
73
- metric = @project.create_metric("SELECT SUM(#\"Lines Changed\")", :title => 'x')
69
+ metric = @project.create_metric("SELECT SUM(#\"Fact.Commits.Lines Changed\")", :title => 'x')
74
70
  expect(metric.execute).to eq 9
75
71
  @project.add_data_permissions(@filters)
76
72
  expect(metric.execute).to eq 6
77
73
 
78
- r = @project.compute_report(left: [metric], top: @project.attributes('attr.users.user_id'))
74
+ r = @project.compute_report(left: [metric], top: ['label.users.id.email'])
79
75
  expect(r.include_column?(['tomas@gooddata.com', 1])).to eq true
80
76
  expect(r.include_column?(['jirka@gooddata.com', 5])).to eq true
81
77
  expect(r.include_column?(['petr@gooddata.com', 3])).to eq false
82
78
 
83
- devs_data = [['visibility_id', 'perm_user_id', 'commit_id'], [1, 1, 1]]
84
- GoodData::Model.upload_data(devs_data, @blueprint, 'visibility', :client => @client, :project => @project)
79
+ data = [['label.visibility.id', 'dataset.permission_users', 'dataset.commits'], [1, 1, 1]]
80
+ @project.upload(data, @blueprint, 'dataset.visibility')
85
81
 
86
82
  expect(metric.execute).to eq 1
87
- r = @project.compute_report(left: [metric], top: @project.attributes('attr.users.user_id'))
83
+ r = @project.compute_report(left: [metric], top: ['label.users.id.email'])
88
84
  expect(r.include_column?(['tomas@gooddata.com', 1])).to eq true
89
85
  expect(r.include_column?(['jirka@gooddata.com', 5])).to eq false
90
86
  expect(r.include_column?(['petr@gooddata.com', 3])).to eq false
@@ -4,10 +4,10 @@ describe "Object export between projects", :constraint => 'slow' do
4
4
  before(:all) do
5
5
  @client = ConnectionHelper.create_default_connection
6
6
 
7
- spec = MultiJson.load(File.read("./spec/data/test_project_model_spec.json"), :symbolize_keys => true)
8
-
9
- @source_project = @client.create_project_from_blueprint(spec, auth_token: ConnectionHelper::GD_PROJECT_TOKEN)
10
- @target_project = @client.create_project_from_blueprint(spec, auth_token: ConnectionHelper::GD_PROJECT_TOKEN)
7
+ spec = MultiJson.load(File.read("./spec/data/blueprints/test_project_model_spec.json"), :symbolize_keys => true)
8
+
9
+ @source_project = @client.create_project_from_blueprint(spec, token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
10
+ @target_project = @client.create_project_from_blueprint(spec, token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
11
11
  end
12
12
 
13
13
  after(:all) do
@@ -6,7 +6,7 @@ require 'gooddata'
6
6
  describe GoodData::Project, :constraint => 'slow' do
7
7
  before(:all) do
8
8
  @client = ConnectionHelper::create_default_connection
9
- @project = @client.create_project(title: ProjectHelper::PROJECT_TITLE, auth_token: ConnectionHelper::GD_PROJECT_TOKEN)
9
+ @project = @client.create_project(title: ProjectHelper::PROJECT_TITLE, auth_token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
10
10
  @domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
11
11
  end
12
12
 
@@ -7,7 +7,7 @@ describe GoodData do
7
7
  before(:each) do
8
8
  @client = ConnectionHelper.create_default_connection
9
9
  # @project = ProjectHelper.get_default_project(:client => @client)
10
- @project = @client.create_project(title: 'Project for schedule testing', auth_token: ConnectionHelper::GD_PROJECT_TOKEN)
10
+ @project = @client.create_project(title: 'Project for schedule testing', auth_token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
11
11
  end
12
12
 
13
13
  after(:each) do
@@ -2,32 +2,27 @@ require 'gooddata'
2
2
 
3
3
  describe "User filters implementation", :constraint => 'slow' do
4
4
  before(:all) do
5
- @spec = JSON.parse(File.read("./spec/data/test_project_model_spec.json"), :symbolize_names => true)
5
+ @spec = JSON.parse(File.read("./spec/data/blueprints/test_project_model_spec.json"), :symbolize_names => true)
6
6
  @client = ConnectionHelper::create_default_connection
7
- @project = @client.create_project_from_blueprint(@spec, :auth_token => ConnectionHelper::GD_PROJECT_TOKEN)
7
+ blueprint = GoodData::Model::ProjectBlueprint.new(@spec)
8
+ @project = @client.create_project_from_blueprint(blueprint, :token => ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
8
9
  @domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
9
10
 
10
- GoodData.with_project(@project) do |p|
11
- @label = GoodData::Attribute.find_first_by_title('Dev', client: @client, project: @project).label_by_name('email')
12
-
13
- blueprint = GoodData::Model::ProjectBlueprint.new(@spec)
14
- commits_data = [
15
- ["lines_changed","committed_on","dev_id","repo_id"],
16
- [1,"01/01/2014",1,1],
17
- [3,"01/02/2014",2,2],
18
- [5,"05/02/2014",3,1]]
19
- GoodData::Model.upload_data(commits_data, blueprint, 'commits', :client => @client, :project => @project)
20
- # blueprint.find_dataset('commits').upload(commits_data)
21
-
22
- devs_data = [
23
- ["dev_id", "email"],
24
- [1, "tomas@gooddata.com"],
25
- [2, "petr@gooddata.com"],
26
- [3, "jirka@gooddata.com"]]
27
- GoodData::Model.upload_data(devs_data, blueprint, 'devs', :client => @client, :project => @project)
28
- # blueprint.find_dataset('devs').upload(devs_data)
29
- end
30
-
11
+ @label = GoodData::Attribute.find_first_by_title('Dev', client: @client, project: @project).label_by_name('email')
12
+
13
+ commits_data = [
14
+ ["lines_changed","committed_on","dev_id","repo_id"],
15
+ [1,"01/01/2014",1,1],
16
+ [3,"01/02/2014",2,2],
17
+ [5,"05/02/2014",3,1]]
18
+ @project.upload(commits_data, blueprint, 'dataset.commits')
19
+
20
+ devs_data = [
21
+ ["dev_id", "email"],
22
+ [1, "tomas@gooddata.com"],
23
+ [2, "petr@gooddata.com"],
24
+ [3, "jirka@gooddata.com"]]
25
+ @project.upload(devs_data, blueprint, 'dataset.devs')
31
26
  end
32
27
 
33
28
  after(:all) do
@@ -124,7 +119,7 @@ describe "User filters implementation", :constraint => 'slow' do
124
119
  perms = @project.data_permissions
125
120
  pretty = perms.pmap {|f| [f.related.login, f.pretty_expression]}
126
121
  expect(perms.first.related).to eq @client.user
127
- expect(pretty).to eq [["svarovsky+gem_tester@gooddata.com", "[Dev] IN ([tomas@gooddata.com])"]]
122
+ expect(pretty).to eq [[ConnectionHelper::DEFAULT_USERNAME, "[Dev] IN ([tomas@gooddata.com])"]]
128
123
  end
129
124
 
130
125
  it "sets up mandatory users based on the state given as an end state by default." do
@@ -2,29 +2,27 @@ require 'gooddata'
2
2
 
3
3
  describe "Variables implementation", :constraint => 'slow' do
4
4
  before(:all) do
5
- @spec = JSON.parse(File.read("./spec/data/test_project_model_spec.json"), :symbolize_names => true)
5
+ @spec = JSON.parse(File.read("./spec/data/blueprints/test_project_model_spec.json"), :symbolize_names => true)
6
6
  @client = ConnectionHelper::create_default_connection
7
- @project = @client.create_project_from_blueprint(@spec, :auth_token => ConnectionHelper::GD_PROJECT_TOKEN)
7
+ blueprint = GoodData::Model::ProjectBlueprint.new(@spec)
8
+ @project = @client.create_project_from_blueprint(blueprint, :token => ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
8
9
  @domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
9
10
 
10
11
  @label = GoodData::Attribute.find_first_by_title('Dev', client: @client, project: @project).label_by_name('email')
11
-
12
- blueprint = GoodData::Model::ProjectBlueprint.new(@spec)
12
+
13
13
  commits_data = [
14
14
  ["lines_changed","committed_on","dev_id","repo_id"],
15
15
  [1,"01/01/2014",1,1],
16
16
  [3,"01/02/2014",2,2],
17
17
  [5,"05/02/2014",3,1]]
18
- GoodData::Model.upload_data(commits_data, blueprint, 'commits', :client => @client, :project => @project)
19
- # blueprint.find_dataset('commits').upload(commits_data)
18
+ @project.upload(commits_data, blueprint, 'dataset.commits')
20
19
 
21
20
  devs_data = [
22
21
  ["dev_id", "email"],
23
22
  [1, "tomas@gooddata.com"],
24
23
  [2, "petr@gooddata.com"],
25
24
  [3, "jirka@gooddata.com"]]
26
- GoodData::Model.upload_data(devs_data, blueprint, 'devs', :client => @client, :project => @project)
27
- # blueprint.find_dataset('devs').upload(devs_data)
25
+ @project.upload(devs_data, blueprint, 'dataset.devs')
28
26
 
29
27
  @variable = @project.create_variable(title: 'uaaa', attribute: @label.attribute).save
30
28
 
@@ -122,7 +120,7 @@ describe "Variables implementation", :constraint => 'slow' do
122
120
  perms = @variable.user_values
123
121
  pretty = perms.pmap {|f| [f.related.login, f.pretty_expression]}
124
122
  expect(perms.first.related).to eq @client.user
125
- expect(pretty).to eq [["svarovsky+gem_tester@gooddata.com", "[Dev] IN ([tomas@gooddata.com])"]]
123
+ expect(pretty).to eq [[ConnectionHelper::DEFAULT_USERNAME, "[Dev] IN ([tomas@gooddata.com])"]]
126
124
  end
127
125
 
128
126
  it "sets up mandatory users based on the state given as an end state by default." do
@@ -18,7 +18,7 @@ describe GoodData::Rest::Connection, :constraint => 'slow' do
18
18
  regular_client = ConnectionHelper::create_default_connection
19
19
  sst = regular_client.connection.sst_token
20
20
 
21
- sst_client = GoodData.connect(sst_token: sst)
21
+ sst_client = GoodData.connect(sst_token: sst, verify_ssl: false)
22
22
  expect(sst_client.projects.count).to be > 0
23
23
  sst_client.disconnect
24
24
 
@@ -5,16 +5,24 @@ require 'pmap'
5
5
  require 'rspec'
6
6
  require 'coveralls'
7
7
  require 'pathname'
8
+ require 'webmock/rspec'
8
9
 
10
+ WebMock.disable!
9
11
  Coveralls.wear_merged!
10
12
 
11
13
  # Automagically include all helpers/*_helper.rb
12
14
 
15
+ require_relative 'environment/environment'
16
+
17
+ GoodData::Environment.load
18
+
13
19
  base = Pathname(__FILE__).dirname.expand_path
14
20
  Dir.glob(base + 'helpers/*_helper.rb').each do |file|
15
21
  require file
16
22
  end
17
23
 
24
+ include GoodData::Helpers
25
+
18
26
  RSpec.configure do |config|
19
27
  config.include BlueprintHelper
20
28
  config.include CliHelper
@@ -28,7 +36,7 @@ RSpec.configure do |config|
28
36
 
29
37
  config.filter_run_excluding :broken => true
30
38
 
31
- config.fail_fast = true
39
+ config.fail_fast = false
32
40
 
33
41
  config.before(:all) do
34
42
  # TODO: Move this to some method.
@@ -49,6 +57,7 @@ RSpec.configure do |config|
49
57
 
50
58
  config.before(:suite) do
51
59
  # TODO: Setup test project
60
+ GoodData.logging_on
52
61
  end
53
62
 
54
63
  config.after(:suite) do
@@ -0,0 +1,47 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'gooddata/bricks/brick'
4
+ require 'gooddata/bricks/bricks'
5
+ require 'gooddata/bricks/middleware/aws_middleware'
6
+
7
+ describe GoodData::Bricks::AWSMiddleware do
8
+ it 'should do nothing if the key "aws_client" is not there at all' do
9
+ middleware = GoodData::Bricks::AWSMiddleware.new(app: lambda {|params| 'Doing nothing'})
10
+ middleware.call({})
11
+ end
12
+
13
+ it 'should fail gracefully if value aws_client param not present even though the key is' do
14
+ middleware = GoodData::Bricks::AWSMiddleware.new(app: lambda {|params| 'Doing nothing'})
15
+ expect do
16
+ middleware.call('aws_client' => nil)
17
+ end.to raise_exception 'Unable to connect to AWS. Parameter "aws_client" seems to be empty'
18
+ end
19
+
20
+ it 'should fail gracefully if value secret_access_key is missing' do
21
+ middleware = GoodData::Bricks::AWSMiddleware.new(app: lambda {|params| 'Doing nothing'})
22
+ expect do
23
+ middleware.call('aws_client' => {
24
+ 'access_key_id' => 'something'
25
+ })
26
+ end.to raise_exception 'Unable to connect to AWS. Parameter "secret_access_key" is missing'
27
+ end
28
+
29
+ it 'should fail gracefully if value access_key_id is missing' do
30
+ middleware = GoodData::Bricks::AWSMiddleware.new(app: lambda {|params| 'Doing nothing'})
31
+ expect do
32
+ middleware.call('aws_client' => {
33
+ 'secret_access_key' => 'something'
34
+ })
35
+ end.to raise_exception 'Unable to connect to AWS. Parameter "access_key_id" is missing'
36
+ end
37
+
38
+ it "should preapre aws middleware for aws_client param" do
39
+ middleware = GoodData::Bricks::AWSMiddleware.new(app: lambda do |params|
40
+ expect(params['aws_client']['s3_client']).to be_kind_of(AWS::S3)
41
+ end)
42
+ middleware.call('aws_client' => {
43
+ 'secret_access_key' => 'something',
44
+ 'access_key_id' => 'something'
45
+ })
46
+ end
47
+ end
@@ -20,7 +20,7 @@ describe GoodData::Rest::Connection do
20
20
 
21
21
  describe '#connect' do
22
22
  it "Connects using username and password" do
23
- c = GoodData.connect(ConnectionHelper::DEFAULT_USERNAME, ConnectionHelper::DEFAULT_PASSWORD)
23
+ c = GoodData.connect(ConnectionHelper::DEFAULT_USERNAME, ConnectionHelper::DEFAULT_PASSWORD, :verify_ssl => 0)
24
24
  c.should be_a(GoodData::Rest::Client)
25
25
  c.disconnect
26
26
  end
@@ -28,7 +28,7 @@ describe GoodData::Rest::Connection do
28
28
 
29
29
  describe '#disconnect' do
30
30
  it "Connects using username and password" do
31
- c = GoodData.connect(ConnectionHelper::DEFAULT_USERNAME, ConnectionHelper::DEFAULT_PASSWORD)
31
+ c = GoodData.connect(ConnectionHelper::DEFAULT_USERNAME, ConnectionHelper::DEFAULT_PASSWORD, :verify_ssl => 0)
32
32
  c.disconnect
33
33
  end
34
34
  end
@@ -7,19 +7,19 @@ require 'logger'
7
7
  class TestLogger < Logger
8
8
  attr_reader :last_message
9
9
  def debug(*args)
10
- @last_message = args[0]
10
+ @last_message = args[0] if level == Logger::DEBUG
11
11
  super(*args)
12
12
  end
13
13
  def info(*args)
14
- @last_message = args[0]
14
+ @last_message = args[0] if level == Logger::INFO
15
15
  super(*args)
16
16
  end
17
17
  def warn(*args)
18
- @last_message = args[0]
18
+ @last_message = args[0] if level == Logger::WARN
19
19
  super(*args)
20
20
  end
21
21
  def error(*args)
22
- @last_message = args[0]
22
+ @last_message = args[0] if level == Logger::ERROR
23
23
  super(*args)
24
24
  end
25
25
  end
@@ -80,6 +80,14 @@ describe 'GoodData - logging' do
80
80
  id = test_request_id_logging
81
81
  expect(GoodData.logger.last_message).to include(id)
82
82
  end
83
+ it 'client logs when given custom message' do
84
+ GoodData.logger = TestLogger.new(STDOUT)
85
+ GoodData.logger.level = Logger::INFO
86
+ c = ConnectionHelper.create_default_connection
87
+ message = "Getting all projects."
88
+ c.get('/gdc/md', :info_message => message)
89
+ expect(GoodData.logger.last_message).to include(message)
90
+ end
83
91
  end
84
92
 
85
93
 
@@ -0,0 +1,60 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'gooddata/helpers/data_helper'
4
+
5
+ describe GoodData::Helpers::DataSource do
6
+ before :each do
7
+ @s3_client = double('s3_client')
8
+ @buckets = double('buckets')
9
+ @bucket = double('bucket')
10
+ @objects = double('objects')
11
+
12
+ allow(@s3_client).to receive(:buckets) { @buckets }
13
+ allow(@buckets).to receive(:[]) { @bucket }
14
+ allow(@bucket).to receive(:objects) { @objects }
15
+ allow(@objects).to receive(:[]) { StringIO.new('aaa') }
16
+
17
+ @ds = GoodData::Helpers::DataSource.new({
18
+ type: :s3,
19
+ bucket: 'some_bucket',
20
+ key: 'some_key'
21
+ })
22
+ end
23
+
24
+ it 'should be able to handle AWS' do
25
+ expect(@ds.realized?).to be_falsey
26
+ params = { 'aws_client' => { 's3_client' => @s3_client } }
27
+ expect(@ds.realize(params)).to eq '2bdc6c8a02b2bd1d7997cf17f0848ecfcbceba25ca184e2676f19c054db7139b'
28
+ expect(@ds.realized?).to be_truthy
29
+ end
30
+
31
+ it 'should gracefully handle missing aws client' do
32
+ expect do
33
+ @ds.realize({
34
+ 'aws_client' => nil
35
+ })
36
+ end.to raise_exception "AWS client not present. Perhaps S3Middleware is missing in the brick definition?"
37
+ end
38
+
39
+ it 'should gracefully handle missing data source params - bucket' do
40
+ ds = GoodData::Helpers::DataSource.new({
41
+ type: :s3,
42
+ key: 'some_key'
43
+ })
44
+ params = { 'aws_client' => { 's3_client' => @s3_client } }
45
+ expect do
46
+ ds.realize(params)
47
+ end.to raise_exception 'Key "bucket" is missing in S3 datasource'
48
+ end
49
+
50
+ it 'should gracefully handle missing data source params - key' do
51
+ ds = GoodData::Helpers::DataSource.new({
52
+ type: :s3,
53
+ bucket: 'some_bucket'
54
+ })
55
+ params = { 'aws_client' => { 's3_client' => @s3_client } }
56
+ expect do
57
+ ds.realize(params)
58
+ end.to raise_exception 'Key "key" is missing in S3 datasource'
59
+ end
60
+ end