gooddata 0.6.0.pre11 → 0.6.0
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/.travis.yml +12 -1
- data/.yardopts +2 -0
- data/README.md +6 -3
- data/Rakefile +24 -7
- data/gooddata +2 -2
- data/gooddata.gemspec +4 -3
- data/lib/gooddata.rb +17 -12
- data/lib/gooddata/bricks/base_downloader.rb +7 -7
- data/lib/gooddata/bricks/brick.rb +7 -8
- data/lib/gooddata/bricks/bricks.rb +4 -1
- data/lib/gooddata/bricks/middleware/base_middleware.rb +2 -2
- data/lib/gooddata/bricks/middleware/bench_middleware.rb +5 -6
- data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +21 -22
- data/lib/gooddata/bricks/middleware/fs_upload_middleware.rb +3 -4
- data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +14 -14
- data/lib/gooddata/bricks/middleware/logger_middleware.rb +6 -6
- data/lib/gooddata/bricks/middleware/middleware.rb +4 -1
- data/lib/gooddata/bricks/middleware/restforce_middleware.rb +29 -32
- data/lib/gooddata/bricks/middleware/stdout_middleware.rb +5 -5
- data/lib/gooddata/bricks/middleware/twitter_middleware.rb +6 -8
- data/lib/gooddata/bricks/utils.rb +3 -3
- data/lib/gooddata/cli/cli.rb +4 -2
- data/lib/gooddata/cli/commands/api_cmd.rb +6 -4
- data/lib/gooddata/cli/commands/auth_cmd.rb +5 -3
- data/lib/gooddata/cli/commands/console_cmd.rb +1 -1
- data/lib/gooddata/cli/commands/process_cmd.rb +6 -4
- data/lib/gooddata/cli/commands/profile_cmd.rb +5 -3
- data/lib/gooddata/cli/commands/project_cmd.rb +24 -22
- data/lib/gooddata/cli/commands/run_ruby_cmd.rb +12 -10
- data/lib/gooddata/cli/commands/scaffold_cmd.rb +8 -6
- data/lib/gooddata/cli/hooks.rb +4 -2
- data/lib/gooddata/cli/shared.rb +3 -1
- data/lib/gooddata/cli/terminal.rb +16 -0
- data/lib/gooddata/client.rb +28 -22
- data/lib/gooddata/commands/api.rb +43 -26
- data/lib/gooddata/commands/auth.rb +22 -53
- data/lib/gooddata/commands/base.rb +2 -0
- data/lib/gooddata/commands/commands.rb +3 -0
- data/lib/gooddata/commands/datasets.rb +39 -136
- data/lib/gooddata/commands/process.rb +134 -130
- data/lib/gooddata/commands/profile.rb +2 -0
- data/lib/gooddata/commands/projects.rb +91 -129
- data/lib/gooddata/commands/runners.rb +11 -11
- data/lib/gooddata/commands/scaffold.rb +28 -26
- data/lib/gooddata/connection.rb +61 -68
- data/lib/gooddata/core/core.rb +1 -2
- data/lib/gooddata/data/data.rb +7 -0
- data/lib/gooddata/data/guesser.rb +114 -0
- data/lib/gooddata/exceptions/command_failed.rb +7 -0
- data/lib/gooddata/exceptions/exceptions.rb +7 -0
- data/lib/gooddata/{exceptions.rb → exceptions/project_not_found.rb} +2 -2
- data/lib/gooddata/extensions/big_decimal.rb +5 -0
- data/lib/gooddata/extract.rb +2 -0
- data/lib/gooddata/goodzilla/goodzilla.rb +11 -12
- data/lib/gooddata/helpers.rb +49 -35
- data/lib/gooddata/models/attribute.rb +7 -5
- data/lib/gooddata/models/dashboard.rb +44 -45
- data/lib/gooddata/models/data_result.rb +10 -13
- data/lib/gooddata/models/data_set.rb +6 -6
- data/lib/gooddata/models/display_form.rb +4 -4
- data/lib/gooddata/models/empty_result.rb +4 -3
- data/lib/gooddata/models/fact.rb +5 -5
- data/lib/gooddata/models/links.rb +3 -1
- data/lib/gooddata/models/metadata.rb +34 -32
- data/lib/gooddata/models/metric.rb +33 -34
- data/lib/gooddata/models/model.rb +165 -173
- data/lib/gooddata/models/models.rb +3 -0
- data/lib/gooddata/models/process.rb +18 -17
- data/lib/gooddata/models/profile.rb +3 -1
- data/lib/gooddata/models/project.rb +107 -35
- data/lib/gooddata/models/project_metadata.rb +12 -12
- data/lib/gooddata/models/report.rb +31 -30
- data/lib/gooddata/models/report_data_result.rb +22 -19
- data/lib/gooddata/models/report_definition.rb +101 -80
- data/lib/gooddata/version.rb +5 -3
- data/lib/templates/bricks/brick.rb.erb +3 -3
- data/lib/templates/bricks/main.rb.erb +3 -2
- data/lib/templates/project/Goodfile.erb +2 -2
- data/lib/templates/project/model/model.rb.erb +19 -19
- data/spec/data/.gooddata +4 -0
- data/spec/helpers/blueprint_helper.rb +2 -2
- data/spec/helpers/cli_helper.rb +28 -0
- data/spec/helpers/connection_helper.rb +2 -2
- data/spec/integration/command_projects_spec.rb +1 -1
- data/spec/integration/create_from_template_spec.rb +12 -0
- data/spec/integration/full_project_spec.rb +2 -2
- data/spec/integration/partial_md_export_import_spec.rb +36 -0
- data/spec/logging_in_logging_out_spec.rb +1 -1
- data/spec/spec_helper.rb +29 -2
- data/spec/unit/cli/cli_spec.rb +3 -3
- data/spec/unit/cli/commands/cmd_api_spec.rb +21 -4
- data/spec/unit/cli/commands/cmd_auth_spec.rb +2 -4
- data/spec/unit/cli/commands/cmd_process_spec.rb +20 -4
- data/spec/unit/cli/commands/cmd_profile_spec.rb +9 -4
- data/spec/unit/cli/commands/cmd_project_spec.rb +53 -4
- data/spec/unit/cli/commands/cmd_run_ruby_spec.rb +2 -4
- data/spec/unit/cli/commands/cmd_scaffold_spec.rb +14 -4
- data/spec/unit/commands/command_api_spec.rb +21 -2
- data/spec/unit/commands/command_auth_spec.rb +62 -1
- data/spec/unit/commands/command_dataset_spec.rb +31 -3
- data/spec/unit/commands/command_process_spec.rb +75 -1
- data/spec/unit/commands/command_profile_spec.rb +7 -1
- data/spec/unit/commands/command_projects_spec.rb +1 -1
- data/spec/unit/commands/command_scaffold_spec.rb +46 -1
- data/spec/unit/core/connection_spec.rb +1 -0
- data/spec/unit/data/guesser_spec.rb +54 -0
- data/spec/unit/helpers_spec.rb +47 -0
- data/spec/unit/model/schema_builder_spec.rb +2 -0
- data/spec/unit/model/tools_spec.rb +89 -0
- data/test/test_upload.rb +39 -15
- metadata +98 -75
- data/test/test_commands.rb +0 -85
- data/test/test_guessing.rb +0 -46
- data/test/test_model.rb +0 -81
- data/test/test_rest_api_basic.rb +0 -41
|
@@ -1,12 +1,73 @@
|
|
|
1
|
+
require 'highline'
|
|
2
|
+
|
|
3
|
+
require 'gooddata/cli/terminal'
|
|
1
4
|
require 'gooddata/commands/auth'
|
|
2
5
|
|
|
3
6
|
describe GoodData::Command::Auth do
|
|
7
|
+
ORIG_TERMINAL = GoodData::CLI::DEFAULT_TERMINAL
|
|
8
|
+
|
|
9
|
+
before(:all) do
|
|
10
|
+
@input = StringIO.new
|
|
11
|
+
@output = StringIO.new
|
|
12
|
+
@terminal = HighLine.new(@input, @output)
|
|
13
|
+
|
|
14
|
+
GoodData::CLI::DEFAULT_TERMINAL = @terminal
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
after(:all) do
|
|
18
|
+
GoodData::CLI::DEFAULT_TERMINAL = ORIG_TERMINAL
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
|
|
4
22
|
before(:each) do
|
|
5
|
-
|
|
23
|
+
ConnectionHelper::create_default_connection
|
|
6
24
|
end
|
|
7
25
|
|
|
8
26
|
it "Is Possible to create GoodData::Command::Auth instance" do
|
|
9
27
|
cmd = GoodData::Command::Auth.new()
|
|
10
28
|
cmd.should be_a(GoodData::Command::Auth)
|
|
11
29
|
end
|
|
30
|
+
|
|
31
|
+
describe "#credentials_file" do
|
|
32
|
+
it "Returns credentials_file" do
|
|
33
|
+
GoodData::Command::Auth.credentials_file
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe "#ensure_credentials" do
|
|
38
|
+
it "Ensures credentials existence" do
|
|
39
|
+
pending("Mock STDIO")
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe "#ask_for_credentials" do
|
|
44
|
+
credentials = {
|
|
45
|
+
:email => 'joedoe@example.com',
|
|
46
|
+
:password => 'secretPassword',
|
|
47
|
+
:token => 't0k3n1sk0',
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
it 'Interactively asks user for crendentials' do
|
|
51
|
+
pending("Mock STDIO")
|
|
52
|
+
|
|
53
|
+
@input << credentials[:email] << "\n"
|
|
54
|
+
@input << credentials[:password] << "\n"
|
|
55
|
+
@input << credentials[:token] << "\n"
|
|
56
|
+
@input.rewind
|
|
57
|
+
|
|
58
|
+
GoodData::Command::Auth.ask_for_credentials
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
describe "#store" do
|
|
63
|
+
it 'Stores credentials' do
|
|
64
|
+
pending("Mock STDIO")
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
describe "#unstore" do
|
|
69
|
+
it 'Removes stored credentials' do
|
|
70
|
+
pending("Mock fileutils")
|
|
71
|
+
end
|
|
72
|
+
end
|
|
12
73
|
end
|
|
@@ -2,11 +2,39 @@ require 'gooddata/commands/datasets'
|
|
|
2
2
|
|
|
3
3
|
describe GoodData::Command::Datasets do
|
|
4
4
|
before(:each) do
|
|
5
|
-
|
|
5
|
+
ConnectionHelper::create_default_connection
|
|
6
|
+
@cmd = GoodData::Command::Datasets.new()
|
|
6
7
|
end
|
|
7
8
|
|
|
8
9
|
it "Is Possible to create GoodData::Command::Datasets instance" do
|
|
9
|
-
cmd
|
|
10
|
-
|
|
10
|
+
@cmd.should be_a(GoodData::Command::Datasets)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "#index" do
|
|
14
|
+
it "Lists all datasets" do
|
|
15
|
+
pending("GoodData::Command::Dataset#with_project not working")
|
|
16
|
+
@cmd.index
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe "#describe" do
|
|
21
|
+
it "Describes dataset" do
|
|
22
|
+
pending("GoodData::Command::Dataset#extract_option not working")
|
|
23
|
+
@cmd.describe
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe "#apply" do
|
|
28
|
+
it "Creates a server-side model" do
|
|
29
|
+
pending("GoodData::Command::Dataset#with_project not working")
|
|
30
|
+
@cmd.apply
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe "#load" do
|
|
35
|
+
it "Loads a CSV file into an existing dataset" do
|
|
36
|
+
pending("GoodData::Command::Dataset#with_project not working")
|
|
37
|
+
@cmd.load
|
|
38
|
+
end
|
|
11
39
|
end
|
|
12
40
|
end
|
|
@@ -1,12 +1,86 @@
|
|
|
1
1
|
require 'gooddata/commands/process'
|
|
2
2
|
|
|
3
3
|
describe GoodData::Command::Process do
|
|
4
|
+
deploy_dir = './'
|
|
5
|
+
|
|
4
6
|
before(:each) do
|
|
5
|
-
|
|
7
|
+
ConnectionHelper::create_default_connection
|
|
6
8
|
end
|
|
7
9
|
|
|
8
10
|
it "Is Possible to create GoodData::Command::Process instance" do
|
|
9
11
|
cmd = GoodData::Command::Process.new()
|
|
10
12
|
cmd.should be_a(GoodData::Command::Process)
|
|
11
13
|
end
|
|
14
|
+
|
|
15
|
+
describe "#get" do
|
|
16
|
+
it "Should throw exception if no project specified" do
|
|
17
|
+
expect { GoodData::Command::Process.get }.to raise_error
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "Returns processes" do
|
|
21
|
+
pending('Project ID needed')
|
|
22
|
+
GoodData::Command::Process.get
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe "#deploy" do
|
|
27
|
+
it "Throws exception if no project specified" do
|
|
28
|
+
expect { GoodData::Command::Process.deploy(deploy_dir) }.to raise_error
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "Deploys graph" do
|
|
32
|
+
pending('Project ID needed')
|
|
33
|
+
GoodData::Command::Process.deploy(deploy_dir)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe "#execute_process" do
|
|
38
|
+
it "Throws exceptions when wrong URL specified" do
|
|
39
|
+
link = "/gdc"
|
|
40
|
+
expect do
|
|
41
|
+
GoodData::Command::Process.execute_process(link, deploy_dir)
|
|
42
|
+
end.to raise_exception
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe "#list" do
|
|
47
|
+
it "Should throw exception if no project specified" do
|
|
48
|
+
expect { GoodData::Command::Process.list }.to raise_error
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "Returns processes" do
|
|
52
|
+
pending('Project ID needed')
|
|
53
|
+
GoodData::Command::Process.list
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
describe "#run" do
|
|
58
|
+
it "Throws exception if no project specified" do
|
|
59
|
+
expect { GoodData::Command::Process.run(deploy_dir) }.to raise_error
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "Runs process" do
|
|
63
|
+
pending('Project ID needed')
|
|
64
|
+
GoodData::Command::Process.run(deploy_dir)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
describe "#with_deploy" do
|
|
69
|
+
it "Should throw exception if no project specified" do
|
|
70
|
+
expect do
|
|
71
|
+
GoodData::Command::Process.with_deploy(deploy_dir) do
|
|
72
|
+
msg = "Hello World!"
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
end.to raise_error
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "Executes block when deploying" do
|
|
79
|
+
pending('Project ID needed')
|
|
80
|
+
GoodData::Command::Process.with_deploy(deploy_dir) do
|
|
81
|
+
msg = "Hello World!"
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
12
86
|
end
|
|
@@ -2,11 +2,17 @@ require 'gooddata/commands/profile'
|
|
|
2
2
|
|
|
3
3
|
describe GoodData::Command::Profile do
|
|
4
4
|
before(:each) do
|
|
5
|
-
|
|
5
|
+
ConnectionHelper::create_default_connection
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
it "Is Possible to create GoodData::Command::Profile instance" do
|
|
9
9
|
cmd = GoodData::Command::Profile.new()
|
|
10
10
|
cmd.should be_a(GoodData::Command::Profile)
|
|
11
11
|
end
|
|
12
|
+
|
|
13
|
+
describe "#show" do
|
|
14
|
+
it "Shows profile" do
|
|
15
|
+
GoodData::Command::Profile.show
|
|
16
|
+
end
|
|
17
|
+
end
|
|
12
18
|
end
|
|
@@ -2,7 +2,7 @@ require 'gooddata/commands/projects'
|
|
|
2
2
|
|
|
3
3
|
describe GoodData::Command::Projects do
|
|
4
4
|
before(:each) do
|
|
5
|
-
|
|
5
|
+
ConnectionHelper::create_default_connection
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
it "Is Possible to create GoodData::Command::Projects instance" do
|
|
@@ -1,12 +1,57 @@
|
|
|
1
1
|
require 'gooddata/commands/scaffold'
|
|
2
2
|
|
|
3
3
|
describe GoodData::Command::Scaffold do
|
|
4
|
+
before(:all) do
|
|
5
|
+
@suffix = Time.now.strftime('%Y%m%d%H%M%S')
|
|
6
|
+
end
|
|
7
|
+
|
|
4
8
|
before(:each) do
|
|
5
|
-
|
|
9
|
+
ConnectionHelper::create_default_connection
|
|
6
10
|
end
|
|
7
11
|
|
|
8
12
|
it "Is Possible to create GoodData::Command::Scaffold instance" do
|
|
9
13
|
cmd = GoodData::Command::Scaffold.new()
|
|
10
14
|
cmd.should be_a(GoodData::Command::Scaffold)
|
|
11
15
|
end
|
|
16
|
+
|
|
17
|
+
describe "#brick" do
|
|
18
|
+
before(:each) do
|
|
19
|
+
@brick_name = "test_brick_#{@suffix}"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
after(:each) do
|
|
23
|
+
FileUtils.rm_rf @brick_name
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "Throws ArgumentError exception if no name specified" do
|
|
27
|
+
expect do
|
|
28
|
+
GoodData::Command::Scaffold.brick(nil)
|
|
29
|
+
end.to raise_exception
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "Scaffolds new brick" do
|
|
33
|
+
GoodData::Command::Scaffold.brick(@brick_name)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe "#project" do
|
|
38
|
+
before(:each) do
|
|
39
|
+
@project_name = "test_project_#{@suffix}"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
after(:each) do
|
|
43
|
+
FileUtils.rm_rf @project_name
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "Throws ArgumentError exception if no name specified" do
|
|
47
|
+
expect do
|
|
48
|
+
GoodData::Command::Scaffold.project(nil)
|
|
49
|
+
end.to raise_exception
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "Scaffolds new project" do
|
|
53
|
+
GoodData::Command::Scaffold.project(@project_name)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
12
57
|
end
|
|
@@ -19,6 +19,7 @@ describe GoodData::Connection do
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
it "Connects using username and password" do
|
|
22
|
+
pending("This will no longer work. Discuss with Korczis")
|
|
22
23
|
c = ConnectionHelper::create_default_connection(USERNAME, PASSWORD)
|
|
23
24
|
c.should be_a(GoodData::Connection)
|
|
24
25
|
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require 'gooddata'
|
|
2
|
+
|
|
3
|
+
describe GoodData::Data::Guesser do
|
|
4
|
+
it "order LDM types as follows: cp, fact, date, attribute" do
|
|
5
|
+
expect = [:connection_point, :fact, :date, :attribute]
|
|
6
|
+
result = GoodData::Data::Guesser::sort_types([:fact, :attribute, :connection_point, :date])
|
|
7
|
+
result.should == expect
|
|
8
|
+
|
|
9
|
+
expect = [:fact]
|
|
10
|
+
result = GoodData::Data::Guesser::sort_types([:fact])
|
|
11
|
+
result.should == expect
|
|
12
|
+
|
|
13
|
+
expect = []
|
|
14
|
+
result = GoodData::Data::Guesser::sort_types([])
|
|
15
|
+
result.should == expect
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "guess facts, dates and connection points from a simple CSV" do
|
|
19
|
+
csv = [
|
|
20
|
+
['cp', 'a1', 'a2', 'd1', 'd2', 'f'],
|
|
21
|
+
['1', 'one', 'huh', '2001-01-02', nil, '-1'],
|
|
22
|
+
['2', 'two', 'blah', nil, '1970-10-23', '2.3'],
|
|
23
|
+
['3', 'three', 'bleh', '0000-00-00', nil, '-3.14159'],
|
|
24
|
+
['4', 'one', 'huh', '2010-02-28 08:12:34', '1970-10-23', nil]
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
fields = GoodData::Data::Guesser.new(csv).guess(csv.size + 10)
|
|
28
|
+
|
|
29
|
+
expect = GoodData::Data::Guesser::sort_types([:connection_point, :fact, :attribute])
|
|
30
|
+
result = fields['cp']
|
|
31
|
+
result.should == expect
|
|
32
|
+
|
|
33
|
+
expect = [:attribute]
|
|
34
|
+
result = fields['a1']
|
|
35
|
+
expect.should == result
|
|
36
|
+
|
|
37
|
+
expect = [:attribute]
|
|
38
|
+
result = fields['a2']
|
|
39
|
+
result.should == expect
|
|
40
|
+
|
|
41
|
+
expect = GoodData::Data::Guesser::sort_types([:attribute, :connection_point, :date])
|
|
42
|
+
result = fields['d1']
|
|
43
|
+
result.should == expect
|
|
44
|
+
|
|
45
|
+
expect = GoodData::Data::Guesser::sort_types([:attribute, :date])
|
|
46
|
+
result = fields['d2']
|
|
47
|
+
result.should == expect
|
|
48
|
+
|
|
49
|
+
expect = GoodData::Data::Guesser::sort_types([:attribute, :connection_point, :fact])
|
|
50
|
+
result = fields['f']
|
|
51
|
+
result.should == expect
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require 'gooddata/client'
|
|
4
|
+
require 'gooddata/models/model'
|
|
5
|
+
|
|
6
|
+
describe GoodData::Helpers do
|
|
7
|
+
describe '#home_directory' do
|
|
8
|
+
it 'works' do
|
|
9
|
+
GoodData::Helpers.home_directory
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe '#running_on_windows?' do
|
|
14
|
+
it 'works' do
|
|
15
|
+
result = GoodData::Helpers.running_on_windows?
|
|
16
|
+
!!result.should == result
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe '#running_on_mac?' do
|
|
21
|
+
it 'works' do
|
|
22
|
+
result = GoodData::Helpers.running_on_a_mac?
|
|
23
|
+
!!result.should == result
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe '#error' do
|
|
28
|
+
it 'works' do
|
|
29
|
+
expect { GoodData::Helpers.error('Test Error') }.to raise_error(SystemExit)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe '#find_goodfile' do
|
|
34
|
+
it 'works' do
|
|
35
|
+
pending "Ask @fluke777 how to create one"
|
|
36
|
+
GoodData::Helpers.find_goodfile.should_not be_nil
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe '#sanitize_string' do
|
|
41
|
+
it 'works' do
|
|
42
|
+
expect = 'helloworld'
|
|
43
|
+
result = GoodData::Helpers.sanitize_string('Hello World')
|
|
44
|
+
result.should == expect
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -4,6 +4,8 @@ require 'gooddata/models/model'
|
|
|
4
4
|
describe GoodData::Model::SchemaBuilder do
|
|
5
5
|
|
|
6
6
|
it "should create a schema" do
|
|
7
|
+
# pending("Using of humanize")
|
|
8
|
+
|
|
7
9
|
builder = GoodData::Model::SchemaBuilder.new("a_title")
|
|
8
10
|
schema = builder.to_schema
|
|
9
11
|
schema.title.should == "A title"
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require 'gooddata/client'
|
|
4
|
+
require 'gooddata/models/model'
|
|
5
|
+
|
|
6
|
+
describe GoodData::Model do
|
|
7
|
+
COLUMNS = [
|
|
8
|
+
{:type =>:anchor, :name =>'cp', 'title' => 'CP', 'folder' => 'test'},
|
|
9
|
+
{:type =>:attribute, :name =>'a1', 'title' => 'A1', 'folder' => 'test'},
|
|
10
|
+
{:type =>:attribute, :name =>'a2', 'title' => 'A2', 'folder' => 'test'},
|
|
11
|
+
{:type =>:date, :name =>'event', 'title' => 'Event', 'folder' => 'test'},
|
|
12
|
+
{:type =>:fact, :name =>'f1', 'title' => 'F1', 'folder' => 'test'},
|
|
13
|
+
{:type =>:fact, :name =>'f2', 'title' => 'F2', 'folder' => 'test'},
|
|
14
|
+
]
|
|
15
|
+
SCHEMA = GoodData::Model::Schema.new :name => 'test', :title => 'test', :columns => COLUMNS
|
|
16
|
+
|
|
17
|
+
before(:all) do
|
|
18
|
+
GoodData::connect
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'generate identifiers starting with letters and without ugly characters' do
|
|
22
|
+
pending "We need o figure out what is the right way to do it"
|
|
23
|
+
expect = 'fact.test.blah'
|
|
24
|
+
result = GoodData::Model::Fact.new({:name =>'blah'}, SCHEMA).identifier
|
|
25
|
+
result.should == expect
|
|
26
|
+
|
|
27
|
+
expect = 'attr.test.blah'
|
|
28
|
+
result = GoodData::Model::Attribute.new({:name =>'1_2_3 blah'}, SCHEMA).identifier
|
|
29
|
+
result.should == expect
|
|
30
|
+
|
|
31
|
+
expect = 'dim.blaz'
|
|
32
|
+
result = GoodData::Model::AttributeFolder.new(' b*ĺ*á#ž$').identifier
|
|
33
|
+
result.should == expect
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "create a simple model in a sandbox project using project.model.add_dataset" do
|
|
37
|
+
pending "Throws 400 - Bad request now"
|
|
38
|
+
|
|
39
|
+
project = GoodData::Project.create :title => "gooddata-ruby test #{Time.new.to_i}"
|
|
40
|
+
objects = project.add_dataset 'Mrkev', COLUMNS
|
|
41
|
+
|
|
42
|
+
uris = objects['uris']
|
|
43
|
+
uris[0].should == "#{project.md['obj']}/1"
|
|
44
|
+
# fetch last object (temporary objects can be placed at the begining of the list)
|
|
45
|
+
GoodData.get uris[uris.length - 1]
|
|
46
|
+
project.delete
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "create a simple model in a sandbox project using Model.add_dataset" do
|
|
50
|
+
pending "Throws 400 - Bad request now"
|
|
51
|
+
|
|
52
|
+
project = GoodData::Project.create :title => "gooddata-ruby test #{Time.new.to_i}"
|
|
53
|
+
GoodData.use project
|
|
54
|
+
objects = GoodData::Model.add_dataset 'Mrkev', COLUMNS
|
|
55
|
+
|
|
56
|
+
uris = objects['uris']
|
|
57
|
+
uris[0].should == "#{project.md['obj']}/1"
|
|
58
|
+
|
|
59
|
+
# fetch last object (temporary objects can be placed at the begining of the list)
|
|
60
|
+
GoodData.get uris[uris.length - 1]
|
|
61
|
+
|
|
62
|
+
# created model should define SLI interface on the 'Mrkev' data set
|
|
63
|
+
# TODO move this into a standalone test covering gooddata/metadata.rb
|
|
64
|
+
ds = GoodData::DataSet['dataset.mrkev']
|
|
65
|
+
ds.should_not be_nil
|
|
66
|
+
|
|
67
|
+
project.delete
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "create a simple model with no CP in a sandbox project using Model.add_dataset" do
|
|
71
|
+
pending "Throws 400 - Bad request now"
|
|
72
|
+
|
|
73
|
+
project = GoodData::Project.create :title => "gooddata-ruby test #{Time.new.to_i}"
|
|
74
|
+
GoodData.use project
|
|
75
|
+
|
|
76
|
+
# create a similar data set but without the connection point column
|
|
77
|
+
cols_no_cp = COLUMNS.select { |c| c['type'] != 'CONNECTION_POINT' }
|
|
78
|
+
objects = GoodData::Model.add_dataset 'No CP', cols_no_cp
|
|
79
|
+
uris = objects['uris']
|
|
80
|
+
|
|
81
|
+
# Repeat check of metadata objects expected to be created on the server side
|
|
82
|
+
GoodData.get uris[uris.length - 1]
|
|
83
|
+
ds = GoodData::DataSet['dataset.nocp']
|
|
84
|
+
ds.should_not be_nil
|
|
85
|
+
|
|
86
|
+
# clean-up
|
|
87
|
+
project.delete
|
|
88
|
+
end
|
|
89
|
+
end
|