teamcity 1.3.1
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 +7 -0
- data/.gitignore +19 -0
- data/.travis.yml +3 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +83 -0
- data/Gemfile +4 -0
- data/Guardfile +9 -0
- data/LICENSE.txt +22 -0
- data/README.md +194 -0
- data/Rakefile +1 -0
- data/lib/faraday/null_response_body.rb +17 -0
- data/lib/teamcity.rb +26 -0
- data/lib/teamcity/api.rb +19 -0
- data/lib/teamcity/client.rb +16 -0
- data/lib/teamcity/client/build_types.rb +305 -0
- data/lib/teamcity/client/builds.rb +92 -0
- data/lib/teamcity/client/common.rb +23 -0
- data/lib/teamcity/client/projects.rb +159 -0
- data/lib/teamcity/client/tests.rb +24 -0
- data/lib/teamcity/client/vcs_roots.rb +70 -0
- data/lib/teamcity/configuration.rb +51 -0
- data/lib/teamcity/connection.rb +28 -0
- data/lib/teamcity/element_builder.rb +27 -0
- data/lib/teamcity/headers.rb +47 -0
- data/lib/teamcity/request.rb +35 -0
- data/lib/teamcity/version.rb +3 -0
- data/spec/cassettes/BuildTypes/DELETE/_delete_agent_requirement/should_delete_the_agent_requirement.yml +83 -0
- data/spec/cassettes/BuildTypes/DELETE/_delete_buildtype/should_delete_a_buildtype.yml +40 -0
- data/spec/cassettes/BuildTypes/DELETE/_delete_buildtype_parameter/should_delete_a_buildtype_parameter.yml +81 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype/should_fetch_the_details_of_a_buildtype_by_id.yml +89 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype/should_raise_an_error_if_the_buildtype_does_not_exist.yml +52 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_agent_requirements/should_fetch_the_build_configuration_agent_requirements_for_a_buildtype.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_agent_requirements/should_return_an_array.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_agent_requirements/should_return_nil_if_there_are_no_agent_requirements_defined.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_artifact_dependencies/should_fetch_the_build_configuration_artifact_dependencies_for_a_buildtype.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_artifact_dependencies/should_return_an_array.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_artifact_dependencies/should_return_nil_if_there_are_no_artifact_dependencies_defined.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_branches/should_fetch_vcs_branches_the_vcs_root_is_configured_to_use.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_features/should_fetch_the_build_configuration_features_for_a_buildtype.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_features/should_return_an_array.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_features/should_return_nil_if_there_are_no_features_defined.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_investigations/should_get_investigation_details.yml +48 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_investigations/should_return_nil_if_no_one_is_investigating.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_parameters/should_fetch_the_build_configuration_parameters_for_a_buildtype.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_parameters/should_return_an_array.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_parameters/should_return_nil_if_there_are_no_parameters_defined.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_settings/should_fetch_the_settings_for_a_given_buildtype.yml +89 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_settings/should_return_an_array.yml +89 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_snapshot_dependencies/should_fetch_the_build_configuration_snapshot_dependencies_for_a_buildtype.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_snapshot_dependencies/should_return_an_array.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_snapshot_dependencies/should_return_nil_if_there_are_no_snapshot_dependencies_defined.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_state/should_fetch_the_state_of_the_buildtype.yml +89 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_steps/should_fetch_the_build_configuration_steps_for_a_buildtype.yml +47 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_steps/should_return_an_array.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_steps/should_return_nil_if_there_are_no_steps_defined.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_template/should_return_nil_if_the_buildtype_is_not_associated_with_a_template.yml +52 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_template/should_return_the_attributes_of_the_associated_template.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_triggers/should_fetch_the_build_configuration_triggers_for_a_buildtype.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_triggers/should_return_an_array.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_triggers/should_return_nil_if_there_are_no_triggers_defined.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_vcs_root_entries/should_fetch_the_build_configuration_vcs_root_entries_for_a_buildtype.yml +47 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_vcs_root_entries/should_return_an_array.yml +47 -0
- data/spec/cassettes/BuildTypes/GET/_buildtype_vcs_root_entries/should_return_nil_if_there_are_no_vcs_root_entries_defined.yml +46 -0
- data/spec/cassettes/BuildTypes/GET/_buildtypes/should_fetch_all_the_buildtypes.yml +46 -0
- data/spec/cassettes/BuildTypes/POST/_attach_vcs_root/should_attach_a_vcs_root_to_a_buildtype.yml +47 -0
- data/spec/cassettes/BuildTypes/POST/_create_agent_requirement/should_create_an_agent_requirement_for_a_buildtype.yml +46 -0
- data/spec/cassettes/BuildTypes/POST/_create_build_step/should_create_a_build_step_for_a_given_build_type.yml +46 -0
- data/spec/cassettes/BuildTypes/POST/_create_build_trigger/should_create_a_build_trigger_for_a_given_build_type.yml +46 -0
- data/spec/cassettes/BuildTypes/POST/_create_buildtype/should_create_a_build_type.yml +86 -0
- data/spec/cassettes/BuildTypes/PUT/_set_build_step_field/should_disable_a_build_step.yml +44 -0
- data/spec/cassettes/BuildTypes/PUT/_set_build_step_field/should_enable_a_build_step.yml +48 -0
- data/spec/cassettes/BuildTypes/PUT/_set_buildtype_field/should_pause_a_project.yml +44 -0
- data/spec/cassettes/BuildTypes/PUT/_set_buildtype_field/should_set_a_projects_description.yml +44 -0
- data/spec/cassettes/BuildTypes/PUT/_set_buildtype_field/should_set_the_buildtype_name.yml +44 -0
- data/spec/cassettes/BuildTypes/PUT/_set_buildtype_parameter/should_set_a_buildtype_parameter.yml +44 -0
- data/spec/cassettes/BuildTypes/PUT/_set_buildtype_setting/should_set_if_it_should_perform_clean_builds.yml +46 -0
- data/spec/cassettes/BuildTypes/PUT/_set_buildtype_setting/should_set_what_is_the_timeout_in_minutes_when_executing_builds.yml +46 -0
- data/spec/cassettes/BuildTypes/PUT/_set_buildtype_setting/should_set_where_the_checkout_happens_when_building.yml +46 -0
- data/spec/cassettes/Builds/DELETE/_unpin_build/should_unpin_a_build.yml +83 -0
- data/spec/cassettes/Builds/GET/_build/should_fetch_the_build_details.yml +91 -0
- data/spec/cassettes/Builds/GET/_build/should_raise_an_error_if_the_build_does_not_exist.yml +53 -0
- data/spec/cassettes/Builds/GET/_build_artifacts/should_fetch_all_the_artifacts.yml +89 -0
- data/spec/cassettes/Builds/GET/_build_pinned_/should_return_false_when_a_build_is_not_pinned.yml +126 -0
- data/spec/cassettes/Builds/GET/_build_pinned_/should_return_true_when_a_build_is_pinned.yml +126 -0
- data/spec/cassettes/Builds/GET/_build_statistics/should_return_statistics_for_a_build.yml +89 -0
- data/spec/cassettes/Builds/GET/_build_tags/should_fetch_the_build_tags.yml +89 -0
- data/spec/cassettes/Builds/GET/_build_tags/should_return_an_empty_array_if_there_are_no_build_tags_defined_for_a_build.yml +89 -0
- data/spec/cassettes/Builds/GET/_builds/should_allow_you_to_filter_by_multiple_build_locators.yml +46 -0
- data/spec/cassettes/Builds/GET/_builds/should_allow_you_to_filter_results_by_build_locators.yml +46 -0
- data/spec/cassettes/Builds/GET/_builds/should_fetch_all_the_builds.yml +46 -0
- data/spec/cassettes/Builds/GET/_builds/should_return_an_empty_array_if_no_results_are_found.yml +46 -0
- data/spec/cassettes/Builds/PUT/_pin_build/should_pin_a_build.yml +83 -0
- data/spec/cassettes/Projects/DELETE/_delete_project/should_delete_a_project.yml +82 -0
- data/spec/cassettes/Projects/DELETE/_delete_project_parameter/should_delete_a_project_parameter.yml +123 -0
- data/spec/cassettes/Projects/GET/_parent_project/should_fetch_the_parent_project_for_a_given_project.yml +46 -0
- data/spec/cassettes/Projects/GET/_parent_project/should_return_nil_if_there_is_no_parent_project_for_a_given_project.yml +46 -0
- data/spec/cassettes/Projects/GET/_project/should_fetch_a_single_project_by_id.yml +47 -0
- data/spec/cassettes/Projects/GET/_project/should_raise_an_error_if_the_project_does_not_exist.yml +52 -0
- data/spec/cassettes/Projects/GET/_project_buildtypes/should_fetch_all_the_buildTypes_for_a_project.yml +46 -0
- data/spec/cassettes/Projects/GET/_project_buildtypes/should_return_nil_if_the_project_does_not_have_any_build_types.yml +46 -0
- data/spec/cassettes/Projects/GET/_project_parameters/should_fetch_all_the_paramters_for_a_given_project.yml +46 -0
- data/spec/cassettes/Projects/GET/_project_parameters/should_return_nil_if_there_are_no_parameters_defined_for_a_project.yml +46 -0
- data/spec/cassettes/Projects/GET/_projects/should_fetch_projects.yml +46 -0
- data/spec/cassettes/Projects/POST/_copy_project/should_copy_a_project.yml +135 -0
- data/spec/cassettes/Projects/POST/_create_project/should_create_a_project.yml +45 -0
- data/spec/cassettes/Projects/PUT/_set_parent_project/should_set_a_parent_project_for_a_given_project.yml +134 -0
- data/spec/cassettes/Projects/PUT/_set_project_field/should_archive_a_project.yml +86 -0
- data/spec/cassettes/Projects/PUT/_set_project_field/should_set_a_projects_description.yml +86 -0
- data/spec/cassettes/Projects/PUT/_set_project_field/should_set_a_projects_name.yml +86 -0
- data/spec/cassettes/Projects/PUT/_set_project_parameter/should_set_a_project_parameter.yml +86 -0
- data/spec/cassettes/Tests/GET/_tests/should_allow_you_to_filter_by_test_id.yml +49 -0
- data/spec/cassettes/Tests/GET/_tests/should_allow_you_to_filter_results_by_test_count_locator.yml +55 -0
- data/spec/cassettes/Tests/GET/_tests/should_fetch_all_the_tests.yml +60 -0
- data/spec/cassettes/Tests/GET/_tests/should_return_an_empty_array_if_no_build_is_found.yml +51 -0
- data/spec/cassettes/Tests/GET/_tests/should_return_an_empty_array_if_no_test_is_found.yml +51 -0
- data/spec/cassettes/Tests/GET/_tests/should_return_an_empty_array_if_not_build_is_given.yml +51 -0
- data/spec/cassettes/VCSRoots/GET/_vcs_root_details/should_fetch_the_vcs_root_details.yml +91 -0
- data/spec/cassettes/VCSRoots/GET/_vcs_roots/should_fetch_vcs_roots.yml +47 -0
- data/spec/cassettes/VCSRoots/POST/_create_vcs_root/should_create_a_git_vcs_root_that_is_shared_with_the_project_and_sub-projects.yml +89 -0
- data/spec/cassettes/VCSRoots/POST/_create_vcs_root/should_create_a_subversion_vcs_root_that_is_shared_with_the_project_and_sub-projects.yml +89 -0
- data/spec/cassettes/VCSRoots/PUT/_set_vcs_root_field/should_set_a_vcs_modification_check_interval.yml +179 -0
- data/spec/faraday/null_response_body_spec.rb +18 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/support/vcr_setup.rb +9 -0
- data/spec/teamcity/api_spec.rb +64 -0
- data/spec/teamcity/client/builds_spec.rb +113 -0
- data/spec/teamcity/client/buildtypes_spec.rb +308 -0
- data/spec/teamcity/client/projects_spec.rb +207 -0
- data/spec/teamcity/client/tests_spec.rb +47 -0
- data/spec/teamcity/client/vcs_roots_spec.rb +86 -0
- data/spec/teamcity/client_spec.rb +14 -0
- data/spec/teamcity/element_builder_spec.rb +30 -0
- data/spec/teamcity/headers_spec.rb +43 -0
- data/spec/teamcity/version_spec.rb +7 -0
- data/spec/teamcity_spec.rb +89 -0
- data/teamcity.gemspec +26 -0
- metadata +344 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
require_relative '../../spec_helper'
|
|
2
|
+
|
|
3
|
+
describe 'Builds' do
|
|
4
|
+
|
|
5
|
+
before(:each) do
|
|
6
|
+
@tc = TeamCity
|
|
7
|
+
configure_client_with_authentication
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Get requests
|
|
11
|
+
describe 'GET', :vcr do
|
|
12
|
+
|
|
13
|
+
before(:each) do
|
|
14
|
+
@buildtype_id = 'BuildTests_GetBuildTests'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe '.builds' do
|
|
18
|
+
it 'should fetch all the builds' do
|
|
19
|
+
builds = @tc.builds
|
|
20
|
+
builds.should have_at_least(1).items
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'should allow you to filter results by build locators' do
|
|
24
|
+
@tc.builds(count:1).should have(1).items
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'should allow you to filter by multiple build locators' do
|
|
28
|
+
@tc.builds(count: 2, status: 'SUCCESS').should have(2).items
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'should return an empty array if no results are found' do
|
|
32
|
+
@tc.builds(tags: 'return-empty-result').should be_empty
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe '.build' do
|
|
37
|
+
it 'should fetch the build details' do
|
|
38
|
+
build_id = @tc.builds.first.id
|
|
39
|
+
@tc.build(id: build_id).id.should eq(build_id)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'should raise an error if the build does not exist' do
|
|
43
|
+
expect { @tc.build(id: 'doesnotexist') }.to raise_error
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'should raise an error if an id is not provided' do
|
|
47
|
+
expect { @tc.build }.to raise_exception(ArgumentError)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe '.build_tags' do
|
|
52
|
+
it 'should fetch the build tags' do
|
|
53
|
+
build = @tc.builds(tags: 'tag-test').first
|
|
54
|
+
tags = @tc.build_tags(id: build.id)
|
|
55
|
+
tags.should include('tag-test')
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'should return an empty array if there are no build tags defined for a build' do
|
|
59
|
+
build = @tc.builds.first
|
|
60
|
+
@tc.build_tags(id: build.id).should be_empty
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
describe '.build_pinned?', :vcr do
|
|
65
|
+
it 'should return true when a build is pinned' do
|
|
66
|
+
build_to_pin = @tc.builds.first
|
|
67
|
+
@tc.pin_build(build_to_pin.id)
|
|
68
|
+
@tc.build_pinned?(build_to_pin.id).should be_true
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'should return false when a build is not pinned' do
|
|
72
|
+
build_to_unpin = @tc.builds.first
|
|
73
|
+
@tc.unpin_build(build_to_unpin.id)
|
|
74
|
+
@tc.build_pinned?(build_to_unpin.id).should be_false
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
describe '.build_statistics' do
|
|
79
|
+
it 'should return statistics for a build' do
|
|
80
|
+
build = @tc.builds.first
|
|
81
|
+
results = @tc.build_statistics(build.id)
|
|
82
|
+
results.should have_at_least(1).items
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
describe '.build_artifacts' do
|
|
87
|
+
it 'should fetch all the artifacts' do
|
|
88
|
+
build = @tc.builds.first
|
|
89
|
+
artifacts = @tc.build_artifacts(build.id)
|
|
90
|
+
artifacts.should have_at_least(2).items
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
describe 'PUT', :vcr do
|
|
96
|
+
describe '.pin_build' do
|
|
97
|
+
it 'should pin a build' do
|
|
98
|
+
build_to_pin = @tc.builds.first
|
|
99
|
+
comment = 'this will add a comment'
|
|
100
|
+
@tc.pin_build(build_to_pin.id, comment).should be_nil
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
describe 'DELETE', :vcr do
|
|
106
|
+
describe '.unpin_build' do
|
|
107
|
+
it 'should unpin a build' do
|
|
108
|
+
build_to_unpin = @tc.builds.first
|
|
109
|
+
@tc.unpin_build(build_to_unpin.id).should be_nil
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
require_relative '../../spec_helper'
|
|
2
|
+
|
|
3
|
+
describe 'BuildTypes' do
|
|
4
|
+
|
|
5
|
+
before(:each) do
|
|
6
|
+
@tc = TeamCity
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
after(:all) do
|
|
10
|
+
TeamCity.reset
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Get requests
|
|
14
|
+
describe 'GET', :vcr do
|
|
15
|
+
|
|
16
|
+
before(:each) do
|
|
17
|
+
TeamCity.reset
|
|
18
|
+
TeamCity.configure do |config|
|
|
19
|
+
config.endpoint = 'http://localhost:8111/guestAuth/app/rest'
|
|
20
|
+
end
|
|
21
|
+
@tc = TeamCity
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe '.buildtypes' do
|
|
25
|
+
it 'should fetch all the buildtypes' do
|
|
26
|
+
build_types = @tc.buildtypes
|
|
27
|
+
build_types.should_not be_empty
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe '.buildtype' do
|
|
32
|
+
it 'should fetch the details of a buildtype by id' do
|
|
33
|
+
build_type = @tc.buildtypes[0]
|
|
34
|
+
@tc.buildtype(id: build_type.id).id.should_not be_empty
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'should raise an error if the buildtype does not exist' do
|
|
38
|
+
expect { @tc.buildtype(id: 'missing') }.to raise_error
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'should raise an error if an id is not provided' do
|
|
42
|
+
expect { @tc.buildtype }.to raise_error
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe '.buildtype_branches' do
|
|
47
|
+
it 'should fetch vcs branches the vcs root is configured to use' do
|
|
48
|
+
buildtype_id = 'BuildTypeTests_GetBuildTypeConfigTests'
|
|
49
|
+
@tc.buildtype_branches(buildtype_id).first.name.should eq('refs/heads/master')
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
describe '.buildtype_state' do
|
|
54
|
+
it 'should fetch the state of the buildtype' do
|
|
55
|
+
build_type = @tc.buildtypes[0]
|
|
56
|
+
@tc.buildtype_state(id: build_type.id).should eq('false')
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe '.buildtype_settings' do
|
|
61
|
+
|
|
62
|
+
before(:each) do
|
|
63
|
+
@build_type = @tc.buildtypes[0]
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it 'should fetch the settings for a given buildtype' do
|
|
67
|
+
@tc.buildtype_settings(id: @build_type.id).should_not be_empty
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it 'should return an array' do
|
|
71
|
+
@tc.buildtype_settings(id: @build_type.id).should be_kind_of(Array)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
describe '.buildtype_template' do
|
|
76
|
+
it 'should return the attributes of the associated template' do
|
|
77
|
+
@tc.buildtype_template(id: 'BuildTypeTests_BuildTypeWithTemplate').id.should_not be_nil
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it 'should return nil if the buildtype is not associated with a template' do
|
|
81
|
+
@tc.buildtype_template(id: 'BuildTypeTests_BuildTypeWithNoTemplate').should be_nil
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
[
|
|
86
|
+
:parameters,
|
|
87
|
+
:steps,
|
|
88
|
+
:features,
|
|
89
|
+
:triggers,
|
|
90
|
+
:agent_requirements,
|
|
91
|
+
:snapshot_dependencies,
|
|
92
|
+
:artifact_dependencies,
|
|
93
|
+
:vcs_root_entries
|
|
94
|
+
].each do |type|
|
|
95
|
+
describe ".buildtype_#{type}" do
|
|
96
|
+
|
|
97
|
+
before(:each) do
|
|
98
|
+
@method_name = "buildtype_#{type}"
|
|
99
|
+
@buildtype_id_with_settings = 'BuildTypeTests_GetBuildTypeConfigTests'
|
|
100
|
+
@buildtype_id_with_no_settings = 'BuildTypeTests_GetBuildTypeEmptyConfigTests'
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it "should fetch the build configuration #{type} for a buildtype" do
|
|
104
|
+
@tc.send(@method_name, id: @buildtype_id_with_settings).should have_at_least(1).items
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it 'should return an array' do
|
|
108
|
+
@tc.send(@method_name, id: @buildtype_id_with_settings).should be_kind_of(Array)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it "should return nil if there are no #{type} defined" do
|
|
112
|
+
@tc.send(@method_name, id: @buildtype_id_with_no_settings).should be_empty
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
describe '.buildtype_investigations' do
|
|
118
|
+
before(:each) do
|
|
119
|
+
configure_client_with_authentication
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it 'should get investigation details' do
|
|
123
|
+
@tc.buildtype_investigations('BuildTypeTests_GetBuildTypeWithInvestigations').should_not be_empty
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it 'should return nil if no one is investigating' do
|
|
127
|
+
@tc.buildtype_investigations('BuildTypeTests_GetBuildTypeWithNoInvestigations').should be_empty
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
describe 'PUT', :vcr do
|
|
133
|
+
|
|
134
|
+
before(:all) do
|
|
135
|
+
configure_client_with_authentication
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
describe '.set_buildtype_parameter' do
|
|
139
|
+
it 'should set a buildtype parameter' do
|
|
140
|
+
buildtype_id = 'BuildTypeTests_PutSetBuildTypeParameters'
|
|
141
|
+
param_name = 'test-setting-buildtype-parameters'
|
|
142
|
+
param_value = 'param-value'
|
|
143
|
+
@tc.set_buildtype_parameter(buildtype_id, param_name, param_value).should eq(param_value)
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
describe '.set_buildtype_field' do
|
|
148
|
+
before(:each) do
|
|
149
|
+
@buildtype_id = 'BuildTypeTests_PutSetBuildTypeField'
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
it 'should set the buildtype name' do
|
|
153
|
+
field_name = 'name'
|
|
154
|
+
field_value = 'PutSetBuildTypeField_Name_Changed_By_Test'
|
|
155
|
+
@tc.set_buildtype_field(@buildtype_id, field_name, field_value).should eq(field_value)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
it 'should set a projects description' do
|
|
159
|
+
field_name = 'description'
|
|
160
|
+
field_value = 'description-set_buildtype_field'
|
|
161
|
+
@tc.set_buildtype_field(@buildtype_id, field_name, field_value).should eq(field_value)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it 'should pause a project' do
|
|
165
|
+
field_name = 'paused'
|
|
166
|
+
field_value = 'true'
|
|
167
|
+
@tc.set_buildtype_field(@buildtype_id, field_name, field_value).should eq(field_value)
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
describe '.set_buildtype_setting' do
|
|
172
|
+
before(:each) do
|
|
173
|
+
@buildtype_id = 'BuildTypeTests_PutSetBuildTypeSettings'
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
it 'should set if it should perform clean builds' do
|
|
177
|
+
settings_name = 'cleanBuild'
|
|
178
|
+
settings_value = 'true'
|
|
179
|
+
@tc.set_buildtype_setting(@buildtype_id, settings_name, settings_value).should eq(settings_value)
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
it 'should set where the checkout happens when building' do
|
|
183
|
+
settings_name = 'checkoutMode'
|
|
184
|
+
settings_value = 'ON_AGENT'
|
|
185
|
+
@tc.set_buildtype_setting(@buildtype_id, settings_name, settings_value).should eq(settings_value)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
it 'should set what is the timeout in minutes when executing builds' do
|
|
189
|
+
settings_name = 'executionTimeoutMin'
|
|
190
|
+
settings_value = '10'
|
|
191
|
+
@tc.set_buildtype_setting(@buildtype_id, settings_name, settings_value).should eq(settings_value)
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
describe '.set_build_step_field' do
|
|
196
|
+
before(:each) do
|
|
197
|
+
@buildtype_id = 'BuildTypeTests_PutSetBuildStepField'
|
|
198
|
+
@build_step_id = 'RUNNER_7'
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
it 'should disable a build step' do
|
|
202
|
+
field_name = 'disabled'
|
|
203
|
+
field_value = 'true'
|
|
204
|
+
@tc.set_build_step_field(@buildtype_id, @build_step_id, field_name, field_value)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
it 'should enable a build step' do
|
|
208
|
+
field_name = 'disabled'
|
|
209
|
+
field_value = 'false'
|
|
210
|
+
@tc.set_build_step_field(@build_type_id, @build_step_id, field_name, field_value)
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
describe 'POST', :vcr do
|
|
216
|
+
before(:all) do
|
|
217
|
+
configure_client_with_authentication
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
before(:each) do
|
|
221
|
+
@buildtype_id = 'BuildTypeTests_PostBuildTypeTests'
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
describe '.create_buildtype' do
|
|
225
|
+
it 'should create a build type' do
|
|
226
|
+
project_id = 'ProjectToTestBuildTypes'
|
|
227
|
+
buildtype_name = 'PostCreateBuildType'
|
|
228
|
+
buildtype_id = "#{project_id}_#{buildtype_name}"
|
|
229
|
+
@tc.create_project(project_id)
|
|
230
|
+
response = @tc.create_buildtype(project_id, buildtype_name)
|
|
231
|
+
response.id.should eq(buildtype_id)
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
describe '.attach_vcs_root' do
|
|
236
|
+
it 'should attach a vcs root to a buildtype' do
|
|
237
|
+
vcs_root_id = 'teamcity_ruby_client'
|
|
238
|
+
@tc.attach_vcs_root(@buildtype_id, vcs_root_id).id.should eq(vcs_root_id)
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
describe '.create_agent_requirement' do
|
|
243
|
+
it 'should create an agent requirement for a buildtype' do
|
|
244
|
+
parameter_name = 'post-agent-requirement-name'
|
|
245
|
+
parameter_value = 'post-agent-requirement-value'
|
|
246
|
+
condition = 'equals'
|
|
247
|
+
args = [@buildtype_id, parameter_name, parameter_value, condition]
|
|
248
|
+
response = @tc.create_agent_requirement(*args)
|
|
249
|
+
response.id.should eq(parameter_name)
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
describe '.create_build_step' do
|
|
254
|
+
it 'should create a build step for a given build type' do
|
|
255
|
+
response = @tc.create_build_step(@buildtype_id, name: 'Unit Tests', type: 'Maven') do |properties|
|
|
256
|
+
properties['goals'] = 'verify'
|
|
257
|
+
properties['mavenSelection'] = 'mavenSelection:default'
|
|
258
|
+
properties['pomLocation'] = 'pom.xml'
|
|
259
|
+
end
|
|
260
|
+
response.name.should eq('Unit Tests')
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
describe '.create_build_trigger' do
|
|
265
|
+
it 'should create a build trigger for a given build type' do
|
|
266
|
+
response = @tc.create_build_trigger(@buildtype_id, type: 'vcsTrigger') do |properties|
|
|
267
|
+
properties['groupCheckkinsByCommitter'] = 'true'
|
|
268
|
+
properties['perCheckinTriggering'] = 'true'
|
|
269
|
+
properties['quietPeriodMode'] = 'DO_NOT_USE'
|
|
270
|
+
end
|
|
271
|
+
response.type.should eq('vcsTrigger')
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
describe 'DELETE', :vcr do
|
|
277
|
+
before(:all) do
|
|
278
|
+
configure_client_with_authentication
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
before(:each) do
|
|
282
|
+
@buildtype_id = 'BuildTypeTests_DeleteBuildTypeSettings'
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
describe '.delete_buildtype_parameter' do
|
|
286
|
+
it 'should delete a buildtype parameter' do
|
|
287
|
+
param_to_delete = 'delete-buildtype-param'
|
|
288
|
+
@tc.set_buildtype_parameter(@buildtype_id, param_to_delete, '')
|
|
289
|
+
@tc.delete_buildtype_parameter(@buildtype_id, 'delete-me').should be_nil
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
describe '.delete_agent_requirement' do
|
|
294
|
+
it 'should delete the agent requirement' do
|
|
295
|
+
agent_requirement_to_delete = 'delete-agent-requirement'
|
|
296
|
+
@tc.create_agent_requirement(@buildtype_id, agent_requirement_to_delete, '', 'equals')
|
|
297
|
+
@tc.delete_agent_requirement(@buildtype_id, agent_requirement_to_delete).should be_nil
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
describe '.delete_buildtype' do
|
|
302
|
+
it 'should delete a buildtype' do
|
|
303
|
+
project_id_to_delete = 'BuildTypeTests_DeleteBuildTypeRequest'
|
|
304
|
+
@tc.delete_buildtype(project_id_to_delete).should be_nil
|
|
305
|
+
end
|
|
306
|
+
end
|
|
307
|
+
end
|
|
308
|
+
end
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
require_relative '../../spec_helper'
|
|
2
|
+
|
|
3
|
+
describe 'Projects' do
|
|
4
|
+
|
|
5
|
+
before(:each) do
|
|
6
|
+
@tc = TeamCity
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
after(:all) do
|
|
10
|
+
TeamCity.reset
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# GET requests
|
|
14
|
+
describe 'GET', :vcr do
|
|
15
|
+
|
|
16
|
+
before(:all) do
|
|
17
|
+
TeamCity.configure do |config|
|
|
18
|
+
config.endpoint = 'http://localhost:8111/guestAuth/app/rest'
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
before(:each) do
|
|
23
|
+
@tc = TeamCity
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe '.projects' do
|
|
27
|
+
it 'should fetch projects' do
|
|
28
|
+
@tc.projects.should_not be_nil
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe '.project' do
|
|
33
|
+
|
|
34
|
+
it 'should fetch a single project by id' do
|
|
35
|
+
@tc.project(id: 'GetProjectRequest').should_not be_nil
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'should raise an error if the project does not exist' do
|
|
39
|
+
expect { @tc.project(id: 'missing') }.to raise_error
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'should raise an error if an id is not provided' do
|
|
43
|
+
expect { @tc.project }.to raise_error
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
describe '.project_buildtypes' do
|
|
49
|
+
|
|
50
|
+
it 'should fetch all the buildTypes for a project' do
|
|
51
|
+
bts = @tc.project_buildtypes(id: 'GetProjectBuildTypes')
|
|
52
|
+
bts.each do |bt|
|
|
53
|
+
bt.projectId.should eq('GetProjectBuildTypes')
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'should return nil if the project does not have any build types' do
|
|
58
|
+
bts = @tc.project_buildtypes(id: 'GetProjectWithNoBuildTypes')
|
|
59
|
+
bts.should be_empty
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
describe '.project_parameters' do
|
|
64
|
+
it 'should fetch all the paramters for a given project' do
|
|
65
|
+
parameters = @tc.project_parameters(id: 'GetProjectWithParameters')
|
|
66
|
+
parameters.size.should_not eq(0)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'should return nil if there are no parameters defined for a project' do
|
|
70
|
+
parameters = @tc.project_parameters(id: 'GetProjectWithNoParameters')
|
|
71
|
+
parameters.should be_empty
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'should raise an error if the project does not exist' do
|
|
75
|
+
expect { @tc.project_parameters(id: 'missing')}
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
describe '.parent_project' do
|
|
80
|
+
it 'should fetch the parent project for a given project' do
|
|
81
|
+
parent = @tc.parent_project(id: 'GetProjectWithParent').should_not be_nil
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it 'should return nil if there is no parent project for a given project' do
|
|
85
|
+
parent = @tc.parent_project(id: 'GetProjectWithNoParent').should be_nil
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it 'should raise an error if the project does not exist' do
|
|
89
|
+
expect { @tc.parent_project(id: 'missing') }
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# POST Requests
|
|
95
|
+
describe 'POST', :vcr do
|
|
96
|
+
|
|
97
|
+
before(:all) do
|
|
98
|
+
configure_client_with_authentication
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
describe '.create_project' do
|
|
102
|
+
it 'should create a project' do
|
|
103
|
+
response = @tc.create_project('PostCreateProject')
|
|
104
|
+
response.id.should eq('PostCreateProject')
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
describe '.copy_project' do
|
|
109
|
+
it 'should copy a project' do
|
|
110
|
+
@tc.create_project('PostProjectToBeCopied')
|
|
111
|
+
source_project = @tc.project(id: 'PostProjectToBeCopied')
|
|
112
|
+
copied_project_name = 'PostCopyProject'
|
|
113
|
+
response = @tc.copy_project(
|
|
114
|
+
source_project.id,
|
|
115
|
+
copied_project_name,
|
|
116
|
+
:copyAllAssociatedSettings => true
|
|
117
|
+
)
|
|
118
|
+
response.name.should eq(copied_project_name)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
describe 'DELETE', :vcr do
|
|
124
|
+
|
|
125
|
+
before(:all) do
|
|
126
|
+
configure_client_with_authentication
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
describe '.delete_project' do
|
|
130
|
+
it 'should delete a project' do
|
|
131
|
+
response = @tc.create_project('ProjectToDelete')
|
|
132
|
+
@tc.delete_project(response.id).should be_nil
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
describe '.delete_project_parameter' do
|
|
137
|
+
it 'should delete a project parameter' do
|
|
138
|
+
project_id = 'DeleteProjectParameters'
|
|
139
|
+
param_to_delete = 'delete-this-param'
|
|
140
|
+
@tc.create_project(project_id)
|
|
141
|
+
@tc.set_project_parameter(project_id, param_to_delete, 'delete-me')
|
|
142
|
+
response = @tc.delete_project_parameter(project_id, param_to_delete)
|
|
143
|
+
response.should be_nil
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
describe 'PUT', :vcr do
|
|
149
|
+
|
|
150
|
+
before(:all) do
|
|
151
|
+
configure_client_with_authentication
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
describe '.set_project_parameter' do
|
|
155
|
+
it 'should set a project parameter' do
|
|
156
|
+
project_id = 'PutCreateProjectParam'
|
|
157
|
+
param_name = 'set-with-param'
|
|
158
|
+
param_value = 'some-value'
|
|
159
|
+
@tc.create_project(project_id)
|
|
160
|
+
@tc.set_project_parameter(project_id, param_name, param_value).should eq(param_value)
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
describe '.set_project_field' do
|
|
165
|
+
it 'should set a projects name' do
|
|
166
|
+
project_id = 'PutSetProjectNameField'
|
|
167
|
+
@tc.create_project(project_id)
|
|
168
|
+
field_value = 'PutNewProjectName'
|
|
169
|
+
@tc.set_project_field(project_id, 'name', field_value).should eq(field_value)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it 'should set a projects description' do
|
|
173
|
+
project_id = 'PutSetProjectDescriptionField'
|
|
174
|
+
@tc.create_project(project_id)
|
|
175
|
+
field_value = 'description-changed-by-test'
|
|
176
|
+
@tc.set_project_field(project_id, 'description', field_value).should eq(field_value)
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
it 'should archive a project' do
|
|
180
|
+
project_id = 'PutSetProjectArchiveField'
|
|
181
|
+
@tc.create_project(project_id)
|
|
182
|
+
field_value = 'true'
|
|
183
|
+
@tc.set_project_field(project_id, 'archived', field_value).should eq(field_value)
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
describe '.set_parent_project' do
|
|
188
|
+
it 'should set a parent project for a given project' do
|
|
189
|
+
project_id = 'PutSetParentProject'
|
|
190
|
+
@tc.create_project(project_id)
|
|
191
|
+
|
|
192
|
+
parent_project_id = 'PutParentProject'
|
|
193
|
+
@tc.create_project(parent_project_id)
|
|
194
|
+
|
|
195
|
+
@tc.set_parent_project(project_id, parent_project_id)['id'].should eq(project_id)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
it 'should raise an error if the parent project does not exist' do
|
|
199
|
+
expect { @tc.parent_project('GetProjectWithoutParent', 'missing') }.to raise_error
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
it 'should raise an error if the child project does not exist' do
|
|
203
|
+
expect { @tc.parent_project('missing', 'GetParentProject') }.to raise_error
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
end
|