gooddata 0.6.11 → 0.6.12
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 +4 -4
- data/.gitignore +6 -0
- data/.travis.yml +5 -0
- data/CHANGELOG.md +34 -1
- data/CLI.md +1 -1
- data/authors.sh +4 -0
- data/lib/gooddata.rb +1 -1
- data/lib/gooddata/cli/commands/api_cmd.rb +0 -2
- data/lib/gooddata/cli/commands/auth_cmd.rb +0 -3
- data/lib/gooddata/cli/commands/console_cmd.rb +1 -2
- data/lib/gooddata/cli/commands/domain_cmd.rb +0 -2
- data/lib/gooddata/cli/commands/process_cmd.rb +0 -2
- data/lib/gooddata/cli/commands/project_cmd.rb +0 -2
- data/lib/gooddata/cli/commands/projects_cmd.rb +0 -2
- data/lib/gooddata/cli/commands/run_ruby_cmd.rb +2 -3
- data/lib/gooddata/cli/commands/scaffold_cmd.rb +0 -3
- data/lib/gooddata/cli/commands/user_cmd.rb +0 -2
- data/lib/gooddata/cli/shared.rb +1 -2
- data/lib/gooddata/commands/datawarehouse.rb +24 -0
- data/lib/gooddata/commands/process.rb +0 -1
- data/lib/gooddata/commands/project.rb +1 -1
- data/lib/gooddata/commands/scaffold.rb +0 -1
- data/lib/gooddata/core/connection.rb +376 -0
- data/lib/gooddata/core/logging.rb +13 -0
- data/lib/gooddata/core/rest.rb +40 -16
- data/lib/gooddata/exceptions/user_in_different_domain.rb +11 -0
- data/lib/gooddata/extensions/enumerable.rb +8 -0
- data/lib/gooddata/goodzilla/goodzilla.rb +24 -0
- data/lib/gooddata/helpers/global_helpers.rb +126 -12
- data/lib/gooddata/mixins/author.rb +11 -5
- data/lib/gooddata/mixins/is_dimension.rb +13 -0
- data/lib/gooddata/mixins/md_object_indexer.rb +17 -1
- data/lib/gooddata/mixins/md_object_query.rb +10 -2
- data/lib/gooddata/mixins/md_relations.rb +2 -2
- data/lib/gooddata/mixins/rest_resource.rb +1 -0
- data/lib/gooddata/models/data_result.rb +0 -1
- data/lib/gooddata/models/datawarehouse.rb +90 -0
- data/lib/gooddata/models/domain.rb +202 -76
- data/lib/gooddata/models/execution.rb +11 -0
- data/lib/gooddata/models/from_wire.rb +4 -4
- data/lib/gooddata/models/invitation.rb +0 -5
- data/lib/gooddata/models/membership.rb +121 -91
- data/lib/gooddata/models/metadata.rb +1 -2
- data/lib/gooddata/models/metadata/attribute.rb +7 -0
- data/lib/gooddata/models/metadata/dashboard.rb +1 -1
- data/lib/gooddata/models/metadata/dimension.rb +52 -0
- data/lib/gooddata/models/metadata/fact.rb +1 -1
- data/lib/gooddata/models/metadata/label.rb +21 -7
- data/lib/gooddata/models/metadata/metric.rb +1 -23
- data/lib/gooddata/models/metadata/report.rb +2 -2
- data/lib/gooddata/models/metadata/report_definition.rb +22 -2
- data/lib/gooddata/models/metadata/variable.rb +81 -0
- data/lib/gooddata/models/model.rb +2 -1
- data/lib/gooddata/models/process.rb +3 -4
- data/lib/gooddata/models/profile.rb +50 -82
- data/lib/gooddata/models/project.rb +170 -213
- data/lib/gooddata/models/project_blueprint.rb +14 -5
- data/lib/gooddata/models/project_creator.rb +2 -2
- data/lib/gooddata/models/schedule.rb +10 -8
- data/lib/gooddata/models/to_wire.rb +2 -2
- data/lib/gooddata/models/user_filters/mandatory_user_filter.rb +67 -0
- data/lib/gooddata/models/user_filters/user_filter.rb +96 -0
- data/lib/gooddata/models/user_filters/user_filter_builder.rb +409 -0
- data/lib/gooddata/{rest/connections/connections.rb → models/user_filters/user_filters.rb} +1 -0
- data/lib/gooddata/models/user_filters/variable_user_filter.rb +14 -0
- data/lib/gooddata/rest/client.rb +32 -21
- data/lib/gooddata/rest/connection.rb +283 -11
- data/lib/gooddata/rest/connections/rest_client_connection.rb +47 -109
- data/lib/gooddata/version.rb +1 -1
- data/spec/data/column_based_permissions.csv +7 -0
- data/spec/data/column_based_permissions2.csv +6 -0
- data/spec/data/hello_world_process/hello_world.rb +3 -1
- data/spec/data/line_based_permissions.csv +3 -0
- data/spec/data/m_n_model/blueprint.json +76 -0
- data/spec/data/{model_view.json → wire_models/model_view.json} +0 -0
- data/spec/data/wire_models/nu_model.json +3046 -0
- data/spec/helpers/process_helper.rb +2 -2
- data/spec/helpers/project_helper.rb +29 -0
- data/spec/helpers/schedule_helper.rb +1 -1
- data/spec/integration/command_datawarehouse_spec.rb +32 -0
- data/spec/integration/create_project_spec.rb +0 -1
- data/spec/integration/full_process_schedule_spec.rb +13 -5
- data/spec/integration/full_project_spec.rb +2 -1
- data/spec/integration/over_to_user_filters_spec.rb +92 -0
- data/spec/integration/project_spec.rb +233 -0
- data/spec/integration/rest_spec.rb +209 -0
- data/spec/integration/user_filters_spec.rb +193 -0
- data/spec/integration/variables_spec.rb +196 -0
- data/spec/unit/commands/command_auth_spec.rb +0 -7
- data/spec/unit/commands/command_process_spec.rb +10 -13
- data/spec/unit/core/connection_spec.rb +0 -19
- data/spec/unit/helpers/global_helpers_spec.rb +57 -0
- data/spec/unit/models/domain_spec.rb +80 -40
- data/spec/unit/models/from_wire_spec.rb +8 -1
- data/spec/unit/models/params_spec.rb +6 -6
- data/spec/unit/models/profile_spec.rb +23 -22
- data/spec/unit/models/project_blueprint_spec.rb +1 -6
- data/spec/unit/models/project_spec.rb +331 -286
- data/spec/unit/models/schedule_spec.rb +39 -14
- data/spec/unit/models/user_filters_spec.rb +89 -0
- data/spec/unit/models/variable_spec.rb +259 -0
- metadata +31 -7
- data/lib/gooddata/rest/connections/dummy_connection.rb +0 -52
- data/spec/unit/core/rest_spec.rb +0 -106
|
@@ -55,7 +55,6 @@ describe GoodData::Command::Auth do
|
|
|
55
55
|
|
|
56
56
|
describe "#ask_for_credentials" do
|
|
57
57
|
it 'Interactively asks user for crendentials' do
|
|
58
|
-
pending("Mock STDIO")
|
|
59
58
|
@input.string = ''
|
|
60
59
|
@input << DEFAULT_CREDENTIALS[:email] << "\n"
|
|
61
60
|
@input << DEFAULT_CREDENTIALS[:password] << "\n"
|
|
@@ -102,8 +101,6 @@ describe GoodData::Command::Auth do
|
|
|
102
101
|
|
|
103
102
|
describe "#store" do
|
|
104
103
|
it 'Stores credentials' do
|
|
105
|
-
pending("Mock STDIO")
|
|
106
|
-
|
|
107
104
|
@input.string = ''
|
|
108
105
|
@input << DEFAULT_CREDENTIALS[:email] << "\n"
|
|
109
106
|
@input << DEFAULT_CREDENTIALS[:password] << "\n"
|
|
@@ -117,8 +114,6 @@ describe GoodData::Command::Auth do
|
|
|
117
114
|
end
|
|
118
115
|
|
|
119
116
|
it 'Overwrites credentials if confirmed' do
|
|
120
|
-
pending("Mock STDIO")
|
|
121
|
-
|
|
122
117
|
@input.string = ''
|
|
123
118
|
@input << DEFAULT_CREDENTIALS[:email] << "\n"
|
|
124
119
|
@input << DEFAULT_CREDENTIALS[:password] << "\n"
|
|
@@ -133,8 +128,6 @@ describe GoodData::Command::Auth do
|
|
|
133
128
|
end
|
|
134
129
|
|
|
135
130
|
it 'Do not overwrites credentials if not confirmed' do
|
|
136
|
-
pending("Mock STDIO")
|
|
137
|
-
|
|
138
131
|
@input.string = ''
|
|
139
132
|
@input << DEFAULT_CREDENTIALS_OVER[:email] << "\n"
|
|
140
133
|
@input << DEFAULT_CREDENTIALS_OVER[:password] << "\n"
|
|
@@ -24,13 +24,11 @@ describe GoodData::Command::Process do
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
it "Should throw exception if no Process ID specified" do
|
|
27
|
-
expect { GoodData::Command::Process.get(:
|
|
27
|
+
expect { GoodData::Command::Process.get(project_id: ProjectHelper::PROJECT_ID, client: @client) }.to raise_error
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
it "Gets process by process ID" do
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
res = GoodData::Command::Process.get(:project_id => ProjectHelper::PROJECT_ID, :process_id => ProcessHelper::PROCESS_ID)
|
|
31
|
+
res = GoodData::Command::Process.get(project_id: ProjectHelper::PROJECT_ID, process_id: ProcessHelper::PROCESS_ID, client: @client)
|
|
34
32
|
expect(res).to_not be_nil
|
|
35
33
|
expect(res).to be_an_instance_of(GoodData::Process)
|
|
36
34
|
end
|
|
@@ -38,12 +36,11 @@ describe GoodData::Command::Process do
|
|
|
38
36
|
|
|
39
37
|
describe "#deploy" do
|
|
40
38
|
it "Throws exception if no project specified" do
|
|
41
|
-
|
|
42
|
-
expect { GoodData::Command::Process.deploy(deploy_dir) }.to_not raise_error
|
|
39
|
+
GoodData::Command::Process.deploy(deploy_dir, name: ProcessHelper::DEPLOY_NAME, project_id: ProjectHelper::PROJECT_ID, client: @client, project: @project)
|
|
43
40
|
end
|
|
44
41
|
|
|
45
42
|
it "Deploys graph" do
|
|
46
|
-
GoodData::Command::Process.deploy(deploy_dir, :
|
|
43
|
+
GoodData::Command::Process.deploy(deploy_dir, name: ProcessHelper::DEPLOY_NAME, project_id: ProjectHelper::PROJECT_ID, client: @client, project: @project)
|
|
47
44
|
end
|
|
48
45
|
end
|
|
49
46
|
|
|
@@ -58,7 +55,7 @@ describe GoodData::Command::Process do
|
|
|
58
55
|
|
|
59
56
|
describe "#list" do
|
|
60
57
|
it "Returns processes" do
|
|
61
|
-
res = GoodData::Command::Process.list(:
|
|
58
|
+
res = GoodData::Command::Process.list(project_id: ProjectHelper::PROJECT_ID, client: @client, project: @project)
|
|
62
59
|
expect(res).to be_an_instance_of(Array)
|
|
63
60
|
end
|
|
64
61
|
end
|
|
@@ -76,18 +73,18 @@ describe GoodData::Command::Process do
|
|
|
76
73
|
describe "#with_deploy" do
|
|
77
74
|
it "Should throw exception if no project specified" do
|
|
78
75
|
expect do
|
|
79
|
-
GoodData::Process.with_deploy(
|
|
76
|
+
GoodData::Process.with_deploy('./spec/data/hello_world_process', type: :ruby, name: ProcessHelper::DEPLOY_NAME, client: @client) do
|
|
80
77
|
msg = "Hello World!"
|
|
81
78
|
end
|
|
82
|
-
|
|
83
79
|
end.to raise_error
|
|
84
80
|
end
|
|
85
81
|
|
|
86
82
|
it "Executes block when deploying" do
|
|
87
|
-
|
|
88
|
-
GoodData::Process.with_deploy(
|
|
89
|
-
msg =
|
|
83
|
+
msg = nil
|
|
84
|
+
GoodData::Process.with_deploy('./spec/data/hello_world_process', type: :ruby, name: ProcessHelper::DEPLOY_NAME, client: @client, project: @project) do
|
|
85
|
+
msg = 'Hello World!'
|
|
90
86
|
end
|
|
87
|
+
expect(msg).to eq 'Hello World!'
|
|
91
88
|
end
|
|
92
89
|
end
|
|
93
90
|
|
|
@@ -32,23 +32,4 @@ describe GoodData::Rest::Connection do
|
|
|
32
32
|
c.disconnect
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
|
-
|
|
36
|
-
describe '#connect_with_sst' do
|
|
37
|
-
it 'Connects using SST' do
|
|
38
|
-
pending('Get SST')
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
describe '#create_authenticated_connection' do
|
|
43
|
-
it "Creates authenticated connection" do
|
|
44
|
-
pending('Investigate how the credentials should be passed')
|
|
45
|
-
GoodData.connect(ConnectionHelper::DEFAULT_USERNAME, ConnectionHelper::DEFAULT_PASSWORD)
|
|
46
|
-
opts = {
|
|
47
|
-
:username => ConnectionHelper::DEFAULT_USERNAME,
|
|
48
|
-
:password => ConnectionHelper::DEFAULT_PASSWORD
|
|
49
|
-
}
|
|
50
|
-
GoodData.create_authenticated_connection(opts)
|
|
51
|
-
ConnectionHelper.disconnect
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
35
|
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require 'gooddata/helpers/csv_helper'
|
|
4
|
+
|
|
5
|
+
describe GoodData::Helpers do
|
|
6
|
+
describe '#diff' do
|
|
7
|
+
|
|
8
|
+
before :each do
|
|
9
|
+
|
|
10
|
+
@old_tomas = { id: 1, name: 'Tomas', age: 28 }
|
|
11
|
+
@new_tomas = { id: 1, name: "Lil'Tomas", age: 28 }
|
|
12
|
+
@patrick = { id: 4, name: 'Patrick', age: 24 }
|
|
13
|
+
@old_korczis = { id: 3, name: 'Korczis', age: 23 }
|
|
14
|
+
@new_korczis = { id: 3, name: "Korczis", age: 22 }
|
|
15
|
+
@petr = { id: 2, name: 'Petr', age: 32 }
|
|
16
|
+
@cvengy = { id: 5, name: 'Petr', age: 30 }
|
|
17
|
+
|
|
18
|
+
@old_list = [@cvengy, @old_tomas, @patrick, @old_korczis]
|
|
19
|
+
@new_list = [@cvengy, @new_tomas, @petr, @new_korczis]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'diffs two lists of hashes' do
|
|
23
|
+
diff = GoodData::Helpers.diff(@old_list, @new_list, key: :id)
|
|
24
|
+
|
|
25
|
+
expect(diff[:same]).to eq [@cvengy]
|
|
26
|
+
expect(diff[:added]).to eq [@petr]
|
|
27
|
+
expect(diff[:removed]).to eq [@patrick]
|
|
28
|
+
expect(diff[:changed]).to eq([
|
|
29
|
+
{
|
|
30
|
+
old_obj: @old_tomas,
|
|
31
|
+
new_obj: @new_tomas,
|
|
32
|
+
diff: { name: "Lil'Tomas"}
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
old_obj: @old_korczis,
|
|
36
|
+
new_obj: @new_korczis,
|
|
37
|
+
diff: { age: 22 }
|
|
38
|
+
}
|
|
39
|
+
])
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'diffs two lists of hashes on subset of fields' do
|
|
43
|
+
diff = GoodData::Helpers.diff(@old_list, @new_list, key: :id, fields: [:id, :age])
|
|
44
|
+
|
|
45
|
+
expect(diff[:same]).to eq [@cvengy, @old_tomas]
|
|
46
|
+
expect(diff[:added]).to eq [@petr]
|
|
47
|
+
expect(diff[:removed]).to eq [@patrick]
|
|
48
|
+
expect(diff[:changed]).to eq([
|
|
49
|
+
{
|
|
50
|
+
old_obj: @old_korczis,
|
|
51
|
+
new_obj: @new_korczis,
|
|
52
|
+
diff: { age: 22 }
|
|
53
|
+
}
|
|
54
|
+
])
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -5,6 +5,7 @@ require 'gooddata/models/domain'
|
|
|
5
5
|
describe GoodData::Domain do
|
|
6
6
|
before(:each) do
|
|
7
7
|
@client = ConnectionHelper.create_default_connection
|
|
8
|
+
@domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
after(:each) do
|
|
@@ -12,23 +13,49 @@ describe GoodData::Domain do
|
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
describe '#add_user' do
|
|
15
|
-
|
|
16
|
+
before(:each) do
|
|
17
|
+
@user = nil
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
after(:each) do
|
|
21
|
+
@user.delete if @user
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'Should add user using class method' do
|
|
16
25
|
args = {
|
|
17
26
|
:domain => ConnectionHelper::DEFAULT_DOMAIN,
|
|
18
|
-
:login => "
|
|
27
|
+
:login => "gemtest_#{rand(1e6)}@gooddata.com",
|
|
19
28
|
:password => CryptoHelper.generate_password,
|
|
20
|
-
:client => @client
|
|
21
29
|
}
|
|
22
30
|
|
|
23
|
-
user = GoodData::Domain.add_user(args)
|
|
31
|
+
@user = GoodData::Domain.add_user(args)
|
|
32
|
+
expect(@user).to be_an_instance_of(GoodData::Profile)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'Should add user using instance method' do
|
|
36
|
+
domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
|
|
37
|
+
|
|
38
|
+
login = "gemtest#{rand(1e6)}@gooddata.com"
|
|
39
|
+
password = CryptoHelper.generate_password
|
|
40
|
+
|
|
41
|
+
@user = domain.add_user(:login => login, :password => password, :first_name => 'X', :last_name => 'X')
|
|
42
|
+
expect(@user).to be_an_instance_of(GoodData::Profile)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe '#find_user_by_login' do
|
|
47
|
+
it 'Should find user by login' do
|
|
48
|
+
domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
|
|
49
|
+
user = domain.find_user_by_login(ConnectionHelper::DEFAULT_USERNAME)
|
|
50
|
+
# user = @domain.add_user(args, client: @client)
|
|
24
51
|
expect(user).to be_an_instance_of(GoodData::Profile)
|
|
25
|
-
user.
|
|
52
|
+
expect(user.login).to eq ConnectionHelper::DEFAULT_USERNAME
|
|
26
53
|
end
|
|
27
54
|
end
|
|
28
55
|
|
|
29
56
|
describe '#users' do
|
|
30
57
|
it 'Should list users' do
|
|
31
|
-
users =
|
|
58
|
+
users = @domain.users
|
|
32
59
|
expect(users).to be_instance_of(Array)
|
|
33
60
|
users.each do |user|
|
|
34
61
|
expect(user).to be_an_instance_of(GoodData::Profile)
|
|
@@ -36,7 +63,7 @@ describe GoodData::Domain do
|
|
|
36
63
|
end
|
|
37
64
|
|
|
38
65
|
it 'Accepts pagination options - limit' do
|
|
39
|
-
users =
|
|
66
|
+
users = @domain.users(limit: 10)
|
|
40
67
|
expect(users).to be_instance_of(Array)
|
|
41
68
|
users.each do |user|
|
|
42
69
|
expect(user).to be_an_instance_of(GoodData::Profile)
|
|
@@ -44,7 +71,8 @@ describe GoodData::Domain do
|
|
|
44
71
|
end
|
|
45
72
|
|
|
46
73
|
it 'Accepts pagination options - offset' do
|
|
47
|
-
|
|
74
|
+
pending('not that useful and takes very long')
|
|
75
|
+
users = @domain.users(offset: 1)
|
|
48
76
|
expect(users).to be_instance_of(Array)
|
|
49
77
|
users.each do |user|
|
|
50
78
|
expect(user).to be_an_instance_of(GoodData::Profile)
|
|
@@ -52,44 +80,56 @@ describe GoodData::Domain do
|
|
|
52
80
|
end
|
|
53
81
|
end
|
|
54
82
|
|
|
55
|
-
describe '#
|
|
83
|
+
describe '#create_users' do
|
|
56
84
|
it 'Creates new users from list' do
|
|
57
|
-
list =
|
|
58
|
-
(
|
|
59
|
-
num = rand(1e6)
|
|
60
|
-
login = "gemtest#{num}@gooddata.com"
|
|
61
|
-
|
|
62
|
-
json = {
|
|
63
|
-
'user' => {
|
|
64
|
-
'content' => {
|
|
65
|
-
'email' => login,
|
|
66
|
-
'login' => login,
|
|
67
|
-
'firstname' => 'the',
|
|
68
|
-
'lastname' => num.to_s,
|
|
69
|
-
|
|
70
|
-
# Following lines are ugly hack
|
|
71
|
-
'role' => 'admin',
|
|
72
|
-
'password' => CryptoHelper.generate_password,
|
|
73
|
-
'domain' => ConnectionHelper::DEFAULT_DOMAIN,
|
|
74
|
-
|
|
75
|
-
# And following lines are even much more ugly hack
|
|
76
|
-
# 'sso_provider' => '',
|
|
77
|
-
# 'authentication_modes' => ['sso', 'password']
|
|
78
|
-
},
|
|
79
|
-
'meta' => {}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
user = GoodData::Membership.new(json)
|
|
83
|
-
list << user
|
|
84
|
-
end
|
|
85
|
+
list = (0...10).to_a.map { |i| ProjectHelper.create_random_user(@client) }
|
|
86
|
+
res = @domain.create_users(list)
|
|
85
87
|
|
|
86
|
-
|
|
88
|
+
# no errors
|
|
89
|
+
expect(res.select { |x| x[:type] == :user_added_to_domain }.count).to eq res.count
|
|
90
|
+
expect(@domain.members?(list.map(&:login)).all?).to be_truthy
|
|
87
91
|
|
|
88
|
-
|
|
89
|
-
res.each do |r|
|
|
92
|
+
res.map { |r| r[:user] }.each do |r|
|
|
90
93
|
expect(r).to be_an_instance_of(GoodData::Profile)
|
|
91
94
|
r.delete
|
|
92
95
|
end
|
|
93
96
|
end
|
|
97
|
+
|
|
98
|
+
it 'Update a user' do
|
|
99
|
+
user = @domain.users.sample
|
|
100
|
+
login = user.login
|
|
101
|
+
name = user.first_name
|
|
102
|
+
|
|
103
|
+
user.first_name = name.reverse
|
|
104
|
+
@domain.create_users([user])
|
|
105
|
+
changed_user = @domain.get_user(login)
|
|
106
|
+
expect(changed_user.first_name).to eq name.reverse
|
|
107
|
+
|
|
108
|
+
user.first_name = name
|
|
109
|
+
@domain.create_users([user])
|
|
110
|
+
reverted_user = @domain.get_user(login)
|
|
111
|
+
expect(reverted_user.first_name).to eq name
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it 'Fails with an exception if you try to create a user that is in a different domain' do
|
|
115
|
+
user = ProjectHelper.create_random_user(@client)
|
|
116
|
+
user.login = 'svarovsky@gooddata.com'
|
|
117
|
+
expect do
|
|
118
|
+
@domain.create_user(user)
|
|
119
|
+
end.to raise_exception(GoodData::UserInDifferentDomainError)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it 'updates properties of a profile' do
|
|
123
|
+
user = @domain.users
|
|
124
|
+
.reject { |u| u.login == ConnectionHelper::DEFAULT_USERNAME }.sample
|
|
125
|
+
|
|
126
|
+
old_email = user.email
|
|
127
|
+
user.email = 'john.doe@gooddata.com'
|
|
128
|
+
@domain.update_user(user)
|
|
129
|
+
expect(@domain.get_user(user.login).email).to eq 'john.doe@gooddata.com'
|
|
130
|
+
user.email = old_email
|
|
131
|
+
@domain.update_user(user)
|
|
132
|
+
expect(@domain.get_user(user.login).email).to eq old_email
|
|
133
|
+
end
|
|
94
134
|
end
|
|
95
135
|
end
|
|
@@ -7,7 +7,7 @@ include GoodData::Model
|
|
|
7
7
|
describe GoodData::Model::FromWire do
|
|
8
8
|
|
|
9
9
|
before(:each) do
|
|
10
|
-
@model_view = MultiJson.load(File.read('./spec/data/model_view.json'))
|
|
10
|
+
@model_view = MultiJson.load(File.read('./spec/data/wire_models/model_view.json'))
|
|
11
11
|
@blueprint = FromWire.from_wire(@model_view)
|
|
12
12
|
end
|
|
13
13
|
|
|
@@ -116,4 +116,11 @@ describe GoodData::Model::FromWire do
|
|
|
116
116
|
:default_label => true
|
|
117
117
|
}]
|
|
118
118
|
end
|
|
119
|
+
|
|
120
|
+
it "should be able to deal with fiscal dimensions with weird names" do
|
|
121
|
+
model_view = MultiJson.load(File.read('./spec/data/wire_models/nu_model.json'))
|
|
122
|
+
blueprint = FromWire.from_wire(model_view)
|
|
123
|
+
blueprint.lint
|
|
124
|
+
end
|
|
125
|
+
|
|
119
126
|
end
|
|
@@ -29,7 +29,7 @@ describe 'GoodData::Schedule::Params' do
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
res = @process.create_schedule("0 12 * * *", @graph_path, params: params)
|
|
32
|
-
expect(res).to
|
|
32
|
+
expect(res).to be_truthy
|
|
33
33
|
res.delete
|
|
34
34
|
end
|
|
35
35
|
|
|
@@ -42,7 +42,7 @@ describe 'GoodData::Schedule::Params' do
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
res = @process.create_schedule("0 12 * * *", @graph_path, params: params)
|
|
45
|
-
expect(res).to
|
|
45
|
+
expect(res).to be_truthy
|
|
46
46
|
res.delete
|
|
47
47
|
end
|
|
48
48
|
|
|
@@ -53,7 +53,7 @@ describe 'GoodData::Schedule::Params' do
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
res = @process.create_schedule("0 12 * * *", @graph_path, params: params)
|
|
56
|
-
expect(res).to
|
|
56
|
+
expect(res).to be_truthy
|
|
57
57
|
res.delete
|
|
58
58
|
end
|
|
59
59
|
end
|
|
@@ -65,7 +65,7 @@ describe 'GoodData::Schedule::Params' do
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
res = @process.create_schedule("0 12 * * *", @graph_path, hiddenParams: params)
|
|
68
|
-
expect(res).to
|
|
68
|
+
expect(res).to be_truthy
|
|
69
69
|
res.delete
|
|
70
70
|
end
|
|
71
71
|
|
|
@@ -78,7 +78,7 @@ describe 'GoodData::Schedule::Params' do
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
res = @process.create_schedule("0 12 * * *", @graph_path, hiddenParams: params)
|
|
81
|
-
expect(res).to
|
|
81
|
+
expect(res).to be_truthy
|
|
82
82
|
res.delete
|
|
83
83
|
end
|
|
84
84
|
|
|
@@ -89,7 +89,7 @@ describe 'GoodData::Schedule::Params' do
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
res = @process.create_schedule("0 12 * * *", @graph_path, hiddenParams: params)
|
|
92
|
-
expect(res).to
|
|
92
|
+
expect(res).to be_truthy
|
|
93
93
|
res.delete
|
|
94
94
|
end
|
|
95
95
|
end
|
|
@@ -8,7 +8,8 @@ require 'gooddata/models/project'
|
|
|
8
8
|
describe GoodData::Profile do
|
|
9
9
|
before(:all) do
|
|
10
10
|
@client = ConnectionHelper.create_default_connection
|
|
11
|
-
@
|
|
11
|
+
@domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
|
|
12
|
+
@user = @domain.get_user(ConnectionHelper::DEFAULT_USERNAME)
|
|
12
13
|
|
|
13
14
|
@users = [
|
|
14
15
|
@client.create(GoodData::Profile,
|
|
@@ -83,7 +84,7 @@ describe GoodData::Profile do
|
|
|
83
84
|
user1 = deep_dup(@user)
|
|
84
85
|
user2 = deep_dup(@user)
|
|
85
86
|
res = user1 == user2
|
|
86
|
-
res.should
|
|
87
|
+
res.should be_truthy
|
|
87
88
|
end
|
|
88
89
|
|
|
89
90
|
it 'Returns false for different objects' do
|
|
@@ -94,7 +95,7 @@ describe GoodData::Profile do
|
|
|
94
95
|
user2.first_name = 'kokos'
|
|
95
96
|
|
|
96
97
|
res = user1 == user2
|
|
97
|
-
res.should
|
|
98
|
+
res.should be_falsey
|
|
98
99
|
end
|
|
99
100
|
end
|
|
100
101
|
|
|
@@ -103,7 +104,7 @@ describe GoodData::Profile do
|
|
|
103
104
|
user1 = deep_dup(@user)
|
|
104
105
|
user2 = deep_dup(@user)
|
|
105
106
|
res = user1 != user2
|
|
106
|
-
res.should
|
|
107
|
+
res.should be_falsey
|
|
107
108
|
end
|
|
108
109
|
|
|
109
110
|
it 'Returns true for different objects' do
|
|
@@ -114,27 +115,27 @@ describe GoodData::Profile do
|
|
|
114
115
|
user2.first_name = 'kokos'
|
|
115
116
|
|
|
116
117
|
res = user1 != user2
|
|
117
|
-
res.should
|
|
118
|
+
res.should be_truthy
|
|
118
119
|
end
|
|
119
120
|
end
|
|
120
121
|
|
|
121
122
|
describe '#apply' do
|
|
122
123
|
it 'When diff of two objects applied to first result should be same as second object' do
|
|
124
|
+
skip("We need to resolve this in a simpler way. The assignable members seem to be too complicated")
|
|
123
125
|
user1 = deep_dup(@user)
|
|
124
126
|
user2 = deep_dup(@user)
|
|
125
127
|
|
|
126
128
|
# Do some little modification
|
|
127
129
|
user2.first_name = 'kokos'
|
|
128
|
-
|
|
129
130
|
diff = user1.diff(user2)
|
|
130
131
|
|
|
131
132
|
expect(diff).to be_instance_of(Hash)
|
|
132
133
|
diff.length.should_not eql(0)
|
|
133
134
|
|
|
134
|
-
user1.
|
|
135
|
+
updated_user = GoodData::Profile.create(user1.to_hash.merge(diff))
|
|
135
136
|
|
|
136
137
|
res = user1 == user2
|
|
137
|
-
res.should
|
|
138
|
+
res.should be_truthy
|
|
138
139
|
end
|
|
139
140
|
end
|
|
140
141
|
|
|
@@ -146,14 +147,14 @@ describe GoodData::Profile do
|
|
|
146
147
|
expect(res).to be_instance_of(Hash)
|
|
147
148
|
res.length.should eql(0)
|
|
148
149
|
end
|
|
149
|
-
|
|
150
|
+
|
|
150
151
|
it 'Returns non empty hash for different objects' do
|
|
151
152
|
user1 = deep_dup(@user)
|
|
152
153
|
user2 = deep_dup(@user)
|
|
153
|
-
|
|
154
|
+
|
|
154
155
|
# Do some little modification
|
|
155
156
|
user2.first_name = 'kokos'
|
|
156
|
-
|
|
157
|
+
|
|
157
158
|
res = user1.diff(user2)
|
|
158
159
|
expect(res).to be_instance_of(Hash)
|
|
159
160
|
res.length.should_not eql(0)
|
|
@@ -165,53 +166,53 @@ describe GoodData::Profile do
|
|
|
165
166
|
l1 = [
|
|
166
167
|
@users[0]
|
|
167
168
|
]
|
|
168
|
-
|
|
169
|
+
|
|
169
170
|
l2 = [
|
|
170
171
|
@users[0]
|
|
171
172
|
]
|
|
172
|
-
|
|
173
|
+
|
|
173
174
|
diff = GoodData::Profile.diff_list(l1, l2)
|
|
174
175
|
diff[:added].length.should eql(0)
|
|
175
176
|
diff[:changed].length.should eql(0)
|
|
176
177
|
diff[:removed].length.should eql(0)
|
|
177
178
|
end
|
|
178
|
-
|
|
179
|
+
|
|
179
180
|
it 'Recognizes added element' do
|
|
180
181
|
l1 = []
|
|
181
|
-
|
|
182
|
+
|
|
182
183
|
l2 = [
|
|
183
184
|
@users[0]
|
|
184
185
|
]
|
|
185
|
-
|
|
186
|
+
|
|
186
187
|
diff = GoodData::Profile.diff_list(l1, l2)
|
|
187
188
|
diff[:added].length.should eql(1)
|
|
188
189
|
diff[:changed].length.should eql(0)
|
|
189
190
|
diff[:removed].length.should eql(0)
|
|
190
191
|
end
|
|
191
|
-
|
|
192
|
+
|
|
192
193
|
it 'Recognizes changed element' do
|
|
193
194
|
l1 = [
|
|
194
195
|
@users[0]
|
|
195
196
|
]
|
|
196
|
-
|
|
197
|
+
|
|
197
198
|
l2 = [
|
|
198
199
|
GoodData::Profile.new(@users[0].json.deep_dup)
|
|
199
200
|
]
|
|
200
201
|
l2[0].first_name = 'Peter'
|
|
201
|
-
|
|
202
|
+
|
|
202
203
|
diff = GoodData::Profile.diff_list(l1, l2)
|
|
203
204
|
diff[:added].length.should eql(0)
|
|
204
205
|
diff[:changed].length.should eql(1)
|
|
205
206
|
diff[:removed].length.should eql(0)
|
|
206
207
|
end
|
|
207
|
-
|
|
208
|
+
|
|
208
209
|
it 'Recognizes removed element' do
|
|
209
210
|
l1 = [
|
|
210
211
|
@users[0]
|
|
211
212
|
]
|
|
212
|
-
|
|
213
|
+
|
|
213
214
|
l2 = []
|
|
214
|
-
|
|
215
|
+
|
|
215
216
|
diff = GoodData::Profile.diff_list(l1, l2)
|
|
216
217
|
diff[:added].length.should eql(0)
|
|
217
218
|
diff[:changed].length.should eql(0)
|