go_api_client 0.0.8 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +7 -39
- data/.rvmrc +1 -0
- data/Gemfile.lock +12 -2
- data/Rakefile +8 -9
- data/go_api_client.gemspec +5 -2
- data/lib/go_api_client/atom/author.rb +25 -1
- data/lib/go_api_client/atom/entry.rb +9 -3
- data/lib/go_api_client/atom/feed.rb +19 -14
- data/lib/go_api_client/atom/feed_page.rb +49 -0
- data/lib/go_api_client/atom.rb +1 -0
- data/lib/go_api_client/commit.rb +30 -0
- data/lib/go_api_client/helpers/simple_attribute_support.rb +11 -0
- data/lib/go_api_client/helpers.rb +1 -0
- data/lib/go_api_client/http_fetcher.rb +41 -0
- data/lib/go_api_client/job.rb +56 -10
- data/lib/go_api_client/pipeline.rb +36 -12
- data/lib/go_api_client/stage.rb +43 -14
- data/lib/go_api_client/user.rb +36 -0
- data/lib/go_api_client/version.rb +7 -1
- data/lib/go_api_client.rb +45 -12
- data/test/fixtures/building/job_1.xml +41 -0
- data/test/fixtures/building/job_2.xml +43 -0
- data/test/fixtures/building/job_3.xml +40 -0
- data/test/fixtures/building/job_4.xml +40 -0
- data/test/fixtures/building/pipeline_1.xml +45 -0
- data/test/fixtures/building/pipeline_2.xml +39 -0
- data/test/fixtures/building/pipeline_3.xml +71 -0
- data/test/fixtures/building/stages.xml +180 -0
- data/test/fixtures/building/stages_1.xml +16 -0
- data/test/fixtures/building/stages_2.xml +16 -0
- data/test/fixtures/building/stages_3.xml +16 -0
- data/test/fixtures/building/stages_4.xml +16 -0
- data/test/fixtures/jobs_1.xml +3 -3
- data/test/fixtures/jobs_with_no_properties.xml +42 -0
- data/test/fixtures/ordering/go/api/jobs/1.xml +29 -0
- data/test/fixtures/ordering/go/api/jobs/10.xml +31 -0
- data/test/fixtures/ordering/go/api/jobs/2.xml +29 -0
- data/test/fixtures/ordering/go/api/jobs/3.xml +29 -0
- data/test/fixtures/ordering/go/api/jobs/4.xml +29 -0
- data/test/fixtures/ordering/go/api/jobs/5.xml +29 -0
- data/test/fixtures/ordering/go/api/jobs/6.xml +29 -0
- data/test/fixtures/ordering/go/api/jobs/7.xml +31 -0
- data/test/fixtures/ordering/go/api/jobs/8.xml +31 -0
- data/test/fixtures/ordering/go/api/jobs/9.xml +31 -0
- data/test/fixtures/ordering/go/api/pipelines/defaultPipeline/1.xml +31 -0
- data/test/fixtures/ordering/go/api/pipelines/defaultPipeline/2.xml +26 -0
- data/test/fixtures/ordering/go/api/pipelines/defaultPipeline/3.xml +26 -0
- data/test/fixtures/ordering/go/api/pipelines/defaultPipeline/4.xml +27 -0
- data/test/fixtures/ordering/go/api/pipelines/defaultPipeline/5.xml +33 -0
- data/test/fixtures/ordering/go/api/pipelines/defaultPipeline/stages.xml +255 -0
- data/test/fixtures/ordering/go/api/stages/1.xml +14 -0
- data/test/fixtures/ordering/go/api/stages/10.xml +14 -0
- data/test/fixtures/ordering/go/api/stages/2.xml +14 -0
- data/test/fixtures/ordering/go/api/stages/3.xml +14 -0
- data/test/fixtures/ordering/go/api/stages/4.xml +14 -0
- data/test/fixtures/ordering/go/api/stages/5.xml +14 -0
- data/test/fixtures/ordering/go/api/stages/6.xml +14 -0
- data/test/fixtures/ordering/go/api/stages/7.xml +14 -0
- data/test/fixtures/ordering/go/api/stages/8.xml +14 -0
- data/test/fixtures/ordering/go/api/stages/9.xml +14 -0
- data/test/fixtures/pagination/stages.xml +636 -0
- data/test/fixtures/pagination/stages_before_7916973.xml +615 -0
- data/test/fixtures/pagination/stages_before_7959831.xml +615 -0
- data/test/fixtures/pipelines_1.xml +8 -1
- data/test/fixtures/stages.xml +1 -1
- data/test/go_api_client/atom/author_test.rb +27 -0
- data/test/go_api_client/atom/entry_test.rb +27 -0
- data/test/go_api_client/atom/feed_page_test.rb +41 -0
- data/test/go_api_client/atom/feed_test.rb +25 -0
- data/test/go_api_client/building_test.rb +38 -0
- data/test/go_api_client/commit_test.rb +38 -0
- data/test/go_api_client/job_test.rb +42 -0
- data/test/go_api_client/pipeline_test.rb +63 -16
- data/test/go_api_client/stage_test.rb +48 -14
- data/test/go_api_client/user_test.rb +27 -0
- data/test/test_helper.rb +19 -3
- metadata +173 -10
- data/bin/go_api_client +0 -3
@@ -1,6 +1,6 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
|
3
|
-
<pipeline name="defaultPipeline" counter="
|
3
|
+
<pipeline name="defaultPipeline" counter="99" label="1">
|
4
4
|
<link rel="self" href="http://localhost:8153/go/api/pipelines/defaultPipeline/1.xml"/>
|
5
5
|
<id><![CDATA[urn:x-go.studios.thoughtworks.com:job-id:defaultPipeline:1]]></id>
|
6
6
|
<scheduleTime>2012-02-23T17:16:15+05:30</scheduleTime>
|
@@ -14,6 +14,13 @@
|
|
14
14
|
<message><![CDATA[Update README]]></message>
|
15
15
|
<file name="README" action="modified"/>
|
16
16
|
</changeset>
|
17
|
+
<changeset changesetUri="http://localhost:8153/go/api/materials/1/changeset/ded20c6210172daee9c100364679e65bded20c6210172daee9c10036467.xml">
|
18
|
+
<user><![CDATA[Ketan Padegaonkar <KetanPadegaonkar@gmail.com>]]></user>
|
19
|
+
<checkinTime>2012-02-23T15:42:10+05:30</checkinTime>
|
20
|
+
<revision><![CDATA[ded20c6210172daee9c100364679e65bded20c6210172daee9c10036467]]></revision>
|
21
|
+
<message><![CDATA[Fixed build]]></message>
|
22
|
+
<file name="Rakefile" action="modified"/>
|
23
|
+
</changeset>
|
17
24
|
</modifications>
|
18
25
|
</material>
|
19
26
|
</materials>
|
data/test/fixtures/stages.xml
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
<link rel="self" href="http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml"/>
|
9
9
|
|
10
10
|
|
11
|
-
<link rel="next" href="http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml?before=6"/>
|
11
|
+
<!-- <link rel="next" href="http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml?before=6"/> -->
|
12
12
|
|
13
13
|
|
14
14
|
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
module GoApiClient
|
4
|
+
module Atom
|
5
|
+
class AuthorTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
test "should be able to parse author's info" do
|
8
|
+
doc = Nokogiri::XML(%Q{<author xmlns="http://www.w3.org/2005/Atom"><name><![CDATA[oogabooga <twgosaas@gmail.com>]]></name><uri>http://oogabooga.example.com<uri></author>})
|
9
|
+
author = Author.new(doc.root).parse!
|
10
|
+
assert_equal Author.new(nil, :name => 'oogabooga', :email => 'twgosaas@gmail.com', :uri => 'http://oogabooga.example.com'), author
|
11
|
+
end
|
12
|
+
|
13
|
+
test "should be able to parse author xml with no email and uri" do
|
14
|
+
doc = Nokogiri::XML(%Q{<author xmlns="http://www.w3.org/2005/Atom"><name><![CDATA[oogabooga]]></name></author>})
|
15
|
+
author = Author.new(doc.root).parse!
|
16
|
+
assert_equal Author.new(nil, :name => 'oogabooga'), author
|
17
|
+
end
|
18
|
+
|
19
|
+
test "should be able to parse author xml with email specified in the name tag" do
|
20
|
+
doc = Nokogiri::XML(%Q{<author xmlns="http://www.w3.org/2005/Atom"><name><![CDATA[oogabooga <twgosaas@gmail.com>]]></name></author>})
|
21
|
+
author = Author.new(doc.root).parse!
|
22
|
+
assert_equal Author.new(nil, :name => 'oogabooga', :email => 'twgosaas@gmail.com'), author
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
module GoApiClient
|
4
|
+
module Atom
|
5
|
+
class EntryTest < Test::Unit::TestCase
|
6
|
+
setup do
|
7
|
+
doc = Nokogiri::XML(file_contents('pagination/stages.xml'))
|
8
|
+
@root = doc.root
|
9
|
+
@entry_node = @root.xpath('./xmlns:entry')[12]
|
10
|
+
end
|
11
|
+
|
12
|
+
test "should parse entry node" do
|
13
|
+
entry = Entry.new(@entry_node).parse!
|
14
|
+
assert_equal 'https://go-server.example.com/go/pipelines/tlb/177/ant_count_go/1', entry.id
|
15
|
+
assert_equal Time.parse('2012-01-22 11:32:57 UTC'), entry.updated_at
|
16
|
+
assert_equal 'tlb(177) stage ant_count_go(1) Passed', entry.title
|
17
|
+
assert_equal 'https://go-server.example.com/go/api/stages/210161.xml', entry.stage_href
|
18
|
+
expected_authors = [
|
19
|
+
Author.new(nil, :name => 'Pavan', :email => 'itspanzi@gmail.com'),
|
20
|
+
Author.new(nil, :name => 'Pavan Sudarshan', :email => 'itspanzi@gmail.com')
|
21
|
+
]
|
22
|
+
|
23
|
+
assert_equal expected_authors, entry.authors
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
module GoApiClient
|
4
|
+
module Atom
|
5
|
+
class FeedPageTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
setup do
|
8
|
+
doc = Nokogiri::XML(file_contents("pagination/stages.xml"))
|
9
|
+
@feed_page = FeedPage.new(doc.root).parse!
|
10
|
+
end
|
11
|
+
|
12
|
+
test "should be able to parse one page of the paginated Go atom feed" do
|
13
|
+
assert_equal 25, @feed_page.entries.count
|
14
|
+
assert_equal 'https://go-server.example.com/go/api/pipelines/tlb/stages.xml', @feed_page.url
|
15
|
+
assert_equal 'https://go-server.example.com/go/api/pipelines/tlb/stages.xml?before=7959831', @feed_page.next_page
|
16
|
+
assert_equal Time.parse('2012-04-17 10:56:53 UTC'), @feed_page.updated_at
|
17
|
+
end
|
18
|
+
|
19
|
+
test "should answer if an entry id is present in the feed page" do
|
20
|
+
assert @feed_page.contains_entry?(@feed_page.entries[5].id)
|
21
|
+
assert_false @feed_page.contains_entry?("foo")
|
22
|
+
end
|
23
|
+
|
24
|
+
test "should answer if an entry object is present in the feed page" do
|
25
|
+
assert @feed_page.contains_entry?(@feed_page.entries[5])
|
26
|
+
assert_false @feed_page.contains_entry?(Entry.new(nil))
|
27
|
+
end
|
28
|
+
|
29
|
+
test "should return entries after a particular entry (top entries in feed)" do
|
30
|
+
entry = @feed_page.entries[5]
|
31
|
+
|
32
|
+
assert_equal @feed_page.entries_after(entry.id), @feed_page.entries_after(entry)
|
33
|
+
|
34
|
+
assert_equal 5, @feed_page.entries_after(entry.id).count
|
35
|
+
assert_equal 5, @feed_page.entries_after(entry).count
|
36
|
+
|
37
|
+
assert_false @feed_page.entries_after(entry).include?(entry)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
module GoApiClient
|
4
|
+
module Atom
|
5
|
+
class FeedTest < Test::Unit::TestCase
|
6
|
+
setup do
|
7
|
+
stub_request(:get, "https://go-server.example.com/go/api/pipelines/tlb/stages.xml").to_return(:body => file_contents("pagination/stages.xml"))
|
8
|
+
stub_request(:get, "https://go-server.example.com/go/api/pipelines/tlb/stages.xml?before=7959831").to_return(:body => file_contents("pagination/stages_before_7959831.xml"))
|
9
|
+
end
|
10
|
+
|
11
|
+
test "should stop at last seen atom entry id" do
|
12
|
+
feed = GoApiClient::Atom::Feed.new('https://go-server.example.com/go/api/pipelines/tlb/stages.xml', 'https://go-server.example.com/go/pipelines/tlb/175/ant_count_tlb/1').fetch!
|
13
|
+
assert_equal (25+4), feed.entries.count
|
14
|
+
end
|
15
|
+
|
16
|
+
test "should stop at first page if entry id not specified" do
|
17
|
+
stub_request(:get, "https://go-server.example.com/go/api/pipelines/tlb/stages.xml?before=7916973").to_return(:body => file_contents("pagination/stages_before_7916973.xml"))
|
18
|
+
|
19
|
+
feed = GoApiClient::Atom::Feed.new('https://go-server.example.com/go/api/pipelines/tlb/stages.xml').fetch!
|
20
|
+
assert_equal 25*3, feed.entries.count
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
module GoApiClient
|
4
|
+
class BuildingTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
test "should report that Go is building if atleast 1 project is building" do
|
7
|
+
feed = %Q{
|
8
|
+
<?xml version="1.0" encoding="utf-8"?>
|
9
|
+
<Projects>
|
10
|
+
<Project name="defaultPipeline :: RailsTests" activity="Building" lastBuildStatus="Success" lastBuildLabel="4" lastBuildTime="2012-07-19T10:03:04" webUrl="http://go-server.2.project:8153/go/pipelines/defaultPipeline/5/RailsTests/1" />
|
11
|
+
<Project name="defaultPipeline :: RailsTests :: Test" activity="Sleeping" lastBuildStatus="Success" lastBuildLabel="4" lastBuildTime="2012-07-19T10:03:04" webUrl="http://go-server.2.project:8153/go/tab/build/detail/defaultPipeline/5/RailsTests/1/Test" />
|
12
|
+
</Projects>
|
13
|
+
}
|
14
|
+
stub_request(:get, "http://go-server.2.project:8153/go/cctray.xml").
|
15
|
+
to_return(:body => feed)
|
16
|
+
assert GoApiClient.build_in_progress?(:host => 'go-server.2.project')
|
17
|
+
end
|
18
|
+
|
19
|
+
test "should report that Go is sleeping if all projects are sleeping" do
|
20
|
+
feed = %Q{
|
21
|
+
<?xml version="1.0" encoding="utf-8"?>
|
22
|
+
<Projects>
|
23
|
+
<Project name="defaultPipeline :: RailsTests" activity="Sleeping" lastBuildStatus="Success" lastBuildLabel="4" lastBuildTime="2012-07-19T10:03:04" webUrl="http://go-server.2.project:8153/go/pipelines/defaultPipeline/5/RailsTests/1" />
|
24
|
+
<Project name="defaultPipeline :: RailsTests :: Test" activity="Sleeping" lastBuildStatus="Success" lastBuildLabel="4" lastBuildTime="2012-07-19T10:03:04" webUrl="http://go-server.2.project:8153/go/tab/build/detail/defaultPipeline/5/RailsTests/1/Test" />
|
25
|
+
</Projects>
|
26
|
+
}
|
27
|
+
stub_request(:get, "http://go-server.2.project:8153/go/cctray.xml").
|
28
|
+
to_return(:body => feed)
|
29
|
+
assert_false GoApiClient.build_in_progress?(:host => 'go-server.2.project')
|
30
|
+
end
|
31
|
+
|
32
|
+
test "should handle empty feeds" do
|
33
|
+
stub_request(:get, "http://go-server.2.project:8153/go/cctray.xml").
|
34
|
+
to_return(:body => nil)
|
35
|
+
assert_false GoApiClient.build_in_progress?(:host => 'go-server.2.project')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
module GoApiClient
|
4
|
+
class CommitTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
test "should parse a changeset xml node" do
|
7
|
+
doc = Nokogiri::XML.parse %q{<changeset changesetUri="http://localhost:8153/go/api/materials/1/changeset/9f77888d7a594699894a17f4d61fc9dfac3cfb74.xml">
|
8
|
+
<bar>
|
9
|
+
<revision>jhgasdfjkhgads</revision>
|
10
|
+
<message>some message</message>
|
11
|
+
<checkinTime>unparsable cruft</checkinTime>
|
12
|
+
<user>unparsable cruft</user>
|
13
|
+
</bar>
|
14
|
+
|
15
|
+
<user><![CDATA[oogabooga <twgosaas@gmail.com>]]></user>
|
16
|
+
<checkinTime>2012-02-21T15:41:30+05:30</checkinTime>
|
17
|
+
<revision><![CDATA[9f77888d7a594699894a17f4d61fc9dfac3cfb74]]></revision>
|
18
|
+
<message><![CDATA[Update README]]></message>
|
19
|
+
<file name="README" action="modified"/>
|
20
|
+
<foo>
|
21
|
+
<revision>jhgasdfjkhgads</revision>
|
22
|
+
<message>some message</message>
|
23
|
+
<checkinTime>unparsable cruft</checkinTime>
|
24
|
+
<user>unparsable cruft</user>
|
25
|
+
</foo>
|
26
|
+
</changeset>
|
27
|
+
}
|
28
|
+
|
29
|
+
commit = Commit.new(doc.root).parse!
|
30
|
+
|
31
|
+
assert_equal '9f77888d7a594699894a17f4d61fc9dfac3cfb74', commit.revision
|
32
|
+
assert_equal 'Update README', commit.message
|
33
|
+
assert_equal Time.parse("2012-02-21 10:11:30 UTC"), commit.time
|
34
|
+
assert_equal User.parse("oogabooga <twgosaas@gmail.com>"), commit.user
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
module GoApiClient
|
4
|
+
class JobTest < Test::Unit::TestCase
|
5
|
+
test "should fetch the job xml and populate itself" do
|
6
|
+
stub_request(:get, "http://localhost:8153/go/api/jobs/1.xml").to_return(:body => file_contents("jobs_1.xml"))
|
7
|
+
|
8
|
+
link = "http://localhost:8153/go/api/jobs/1.xml"
|
9
|
+
job = GoApiClient::Job.from(link)
|
10
|
+
|
11
|
+
assert_equal 'http://localhost:8153/go/api/jobs/1.xml', job.url
|
12
|
+
assert_equal 'http://localhost:8153/go/files/defaultPipeline/1/Units/1/Test', job.artifacts_uri
|
13
|
+
assert_equal 'http://localhost:8153/go/files/defaultPipeline/1/Units/1/Test/cruise-output/console.log', job.console_log_url
|
14
|
+
|
15
|
+
|
16
|
+
assert_equal 'urn:x-go.studios.thoughtworks.com:job-id:defaultPipeline:1:Units:1:Test', job.identifier
|
17
|
+
|
18
|
+
assert_equal 900, job.duration
|
19
|
+
assert_equal "Test", job.name
|
20
|
+
assert_equal "Failed", job.result
|
21
|
+
assert_equal Time.parse('2012-02-23 11:46:15 UTC'), job.scheduled
|
22
|
+
assert_equal Time.parse('2012-02-23 11:46:27 UTC'), job.assigned
|
23
|
+
assert_equal Time.parse('2012-02-23 11:46:37 UTC'), job.preparing
|
24
|
+
assert_equal Time.parse('2012-02-23 11:46:41 UTC'), job.building
|
25
|
+
assert_equal Time.parse('2012-02-23 11:46:42 UTC'), job.completing
|
26
|
+
assert_equal Time.parse('2012-02-23 11:46:45 UTC'), job.completed
|
27
|
+
end
|
28
|
+
|
29
|
+
test "should parse job even when some properties are missing" do
|
30
|
+
stub_request(:get, "http://go-server.1.project:8153/go/api/jobs/1.xml").to_return(:body => file_contents("jobs_with_no_properties.xml"))
|
31
|
+
link = "http://go-server.1.project:8153/go/api/jobs/1.xml"
|
32
|
+
job = GoApiClient::Job.from(link)
|
33
|
+
|
34
|
+
assert_equal 80, job.duration
|
35
|
+
assert_equal "Failed", job.result
|
36
|
+
%w(scheduled assigned preparing building completing completed).each do |property|
|
37
|
+
assert_nil job.send(property)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -7,30 +7,77 @@ module GoApiClient
|
|
7
7
|
stub_request(:get, "http://localhost:8153/go/api/pipelines/defaultPipeline/1.xml").to_return(:body => file_contents("pipelines_1.xml"))
|
8
8
|
end
|
9
9
|
|
10
|
-
|
10
|
+
test "should fetch the pipeline xml and populate itself" do
|
11
11
|
link = "http://localhost:8153/go/api/pipelines/defaultPipeline/1.xml"
|
12
|
-
pipeline = GoApiClient::Pipeline.
|
13
|
-
pipeline.fetch
|
12
|
+
pipeline = GoApiClient::Pipeline.from(link)
|
14
13
|
|
15
14
|
assert_equal "1", pipeline.label
|
16
|
-
assert_equal
|
15
|
+
assert_equal 99, pipeline.counter
|
16
|
+
assert_equal "defaultPipeline", pipeline.name
|
17
|
+
assert_equal "http://localhost:8153/go/api/pipelines/defaultPipeline/1.xml", pipeline.url
|
18
|
+
assert_equal ["Update README", "Fixed build"], pipeline.commits.collect(&:message)
|
19
|
+
assert_equal "urn:x-go.studios.thoughtworks.com:job-id:defaultPipeline:1", pipeline.identifier
|
20
|
+
assert_equal Time.parse('2012-02-23 11:46:15 UTC'), pipeline.schedule_time
|
17
21
|
end
|
18
22
|
|
19
|
-
|
23
|
+
test "should return a list of authors from the first stage" do
|
20
24
|
link = "http://localhost:8153/go/api/pipelines/defaultPipeline/1.xml"
|
21
|
-
pipeline = GoApiClient::Pipeline.
|
22
|
-
author_foo = Atom::Author.new(nil)
|
23
|
-
|
24
|
-
author_foo.email = 'foo@example.com'
|
25
|
-
author_foo.uri = 'http://foo.example.com'
|
26
|
-
|
27
|
-
author_bar = Atom::Author.new(nil)
|
28
|
-
author_bar.name = 'bar'
|
29
|
-
author_bar.email = 'bar@example.com'
|
30
|
-
author_bar.uri = 'http://bar.example.com'
|
25
|
+
pipeline = GoApiClient::Pipeline.from(link)
|
26
|
+
author_foo = Atom::Author.new(nil, :name => 'foo', :email => 'foo@example.com', :uri => 'http://foo.example.com')
|
27
|
+
author_bar = Atom::Author.new(nil, :name => 'bar', :email => 'bar@example.com', :uri => 'http://bar.example.com')
|
31
28
|
|
32
29
|
pipeline.stages << OpenStruct.new(:authors => [author_foo, author_bar])
|
33
|
-
assert_equal
|
30
|
+
assert_equal [author_foo, author_bar], pipeline.authors
|
31
|
+
end
|
32
|
+
|
33
|
+
test "should only parse materials with type=GitMaterial" do
|
34
|
+
doc = Nokogiri::XML.parse %q{<?xml version="1.0" encoding="UTF-8"?>
|
35
|
+
|
36
|
+
<pipeline name="GreenInstallers" counter="286" label="286">
|
37
|
+
<link rel="self" href="https://go.example.com/go/api/pipelines/GreenInstallers/122316.xml"/>
|
38
|
+
<id><![CDATA[urn:x-go.studios.thoughtworks.com:job-id:GreenInstallers:286]]></id>
|
39
|
+
<link rel="insertedBefore" href="https://go.example.com/go/api/pipelines/GreenInstallers/122309.xml"/>
|
40
|
+
<link rel="insertedAfter" href="https://go.example.com/go/api/pipelines/GreenInstallers/122286.xml"/>
|
41
|
+
<scheduleTime>2013-02-08T20:34:12-08:00</scheduleTime>
|
42
|
+
<materials>
|
43
|
+
<material materialUri="https://go.example.com/go/api/materials/5185.xml" type="GitMaterial" url="git@github.com:test-repo.git" branch="master">
|
44
|
+
<modifications>
|
45
|
+
<changeset changesetUri="https://go.example.com/go/api/materials/5185/changeset/bc9cc9401b816d753f267227934e535affcb4028.xml">
|
46
|
+
<user><![CDATA[wdephill <wdephill@thoughtworks.com>]]></user>
|
47
|
+
<checkinTime>2013-02-08T16:19:18-08:00</checkinTime>
|
48
|
+
<revision><![CDATA[bc9cc9401b816d753f267227934e535affcb4028]]></revision>
|
49
|
+
<message><![CDATA[ #14163 - [WYSIWYG] Column layout. Use plugin onchange to ensure that there is an empty p at the end of the doc so that you can get out of the column.]]></message>
|
50
|
+
<file name="public/javascripts/ckeditor/config.js" action="modified"/>
|
51
|
+
<file name="public/javascripts/ckeditor/plugins/onchange/docs/install.html" action="added"/>
|
52
|
+
<file name="public/javascripts/ckeditor/plugins/onchange/docs/styles.css" action="added"/>
|
53
|
+
<file name="public/javascripts/ckeditor/plugins/onchange/plugin.js" action="added"/>
|
54
|
+
</changeset>
|
55
|
+
</modifications>
|
56
|
+
</material>
|
57
|
+
<material materialUri="https://go.example.com/go/api/materials/30536.xml" type="DependencyMaterial" pipelineName="IE8-PostgreSQL9" stageName="Acceptances">
|
58
|
+
<modifications>
|
59
|
+
<changeset changesetUri="https://go.example.com/go/api/stages/264242.xml">
|
60
|
+
<checkinTime>2013-02-08T20:33:45-08:00</checkinTime>
|
61
|
+
<revision>IE8-PostgreSQL9/942/Acceptances/1</revision>
|
62
|
+
</changeset>
|
63
|
+
</modifications>
|
64
|
+
</material>
|
65
|
+
</materials>
|
66
|
+
<stages>
|
67
|
+
<stage href="https://go.example.com/go/api/stages/264258.xml"/>
|
68
|
+
<stage href="https://go.example.com/go/api/stages/264271.xml"/>
|
69
|
+
</stages>
|
70
|
+
<approvedBy><![CDATA[changes]]></approvedBy>
|
71
|
+
</pipeline>
|
72
|
+
}
|
73
|
+
|
74
|
+
pipeline = GoApiClient::Pipeline.new(doc.root).parse!
|
75
|
+
assert_equal 1, pipeline.commits.count
|
76
|
+
commit = pipeline.commits.first
|
77
|
+
|
78
|
+
assert_equal 'bc9cc9401b816d753f267227934e535affcb4028', commit.revision
|
79
|
+
assert_equal User.new('wdephill', 'wdephill@thoughtworks.com'), commit.user
|
80
|
+
assert_equal Time.parse("2013-02-09 00:19:18 UTC"), commit.time
|
34
81
|
end
|
35
82
|
|
36
83
|
end
|
@@ -3,39 +3,73 @@ require "test_helper"
|
|
3
3
|
module GoApiClient
|
4
4
|
class StageTest < Test::Unit::TestCase
|
5
5
|
|
6
|
-
|
6
|
+
test "should return stages in order" do
|
7
|
+
stub_request(:any, /.*go-server.2.project.*/).
|
8
|
+
to_return(
|
9
|
+
lambda do |request|
|
10
|
+
{ :body => file_contents("ordering/#{request.uri.path}")}
|
11
|
+
end
|
12
|
+
).times(9999)
|
13
|
+
|
14
|
+
runs = GoApiClient.runs(:host => 'go-server.2.project')
|
15
|
+
|
16
|
+
assert_equal runs[:pipelines].collect(&:counter).sort, runs[:pipelines].collect(&:counter)
|
17
|
+
|
18
|
+
runs[:pipelines].each do |pipeline|
|
19
|
+
assert_equal pipeline.stages.collect(&:completed_at).sort, pipeline.stages.collect(&:completed_at)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
test "should parse stage" do
|
7
24
|
stub_request(:get, "http://localhost:8153/go/api/pipelines/defaultPipeline/1.xml").to_return(:body => file_contents("pipelines_1.xml"))
|
8
25
|
stub_request(:get, "http://localhost:8153/go/api/stages/1.xml").to_return(:body => file_contents("stages_1.xml"))
|
9
26
|
stub_request(:get, "http://localhost:8153/go/api/stages/2.xml").to_return(:body => file_contents("stages_2.xml"))
|
10
27
|
stub_request(:get, "http://localhost:8153/go/api/jobs/1.xml").to_return(:body => file_contents("jobs_1.xml"))
|
11
28
|
stub_request(:get, "http://localhost:8153/go/api/jobs/2.xml").to_return(:body => file_contents("jobs_2.xml"))
|
12
|
-
end
|
13
29
|
|
14
|
-
def test_stage_parsing
|
15
30
|
stub_request(:get, "http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml").to_return(:body => file_contents("stages.xml"))
|
16
|
-
|
31
|
+
runs = GoApiClient.runs(:host => "localhost", :port => 8153)
|
32
|
+
pipelines = runs[:pipelines]
|
33
|
+
assert_equal "http://localhost:8153/go/pipelines/defaultPipeline/1/Acceptance/1", runs[:latest_atom_entry_id]
|
17
34
|
stages = pipelines.first.stages
|
18
35
|
|
19
36
|
assert_equal 1, pipelines.count
|
20
37
|
assert_equal 2, stages.count
|
21
|
-
|
38
|
+
|
39
|
+
assert_equal "http://localhost:8153/go/api/stages/1.xml", stages.first.url
|
40
|
+
assert_equal "http://localhost:8153/go/api/stages/2.xml", stages.last.url
|
41
|
+
|
42
|
+
assert_equal 1, stages.first.counter
|
43
|
+
assert_equal 1, stages.last.counter
|
44
|
+
|
45
|
+
assert_equal [Time.parse("2012-02-23T17:16:41+05:30").utc, Time.parse("2012-02-23T17:19:31+05:30").utc], stages.collect(&:completed_at)
|
46
|
+
|
47
|
+
assert_equal [Atom::Author.new(nil, :name => 'oogabooga', :email => 'twgosaas@gmail.com')], pipelines.first.authors
|
48
|
+
|
22
49
|
stages.each do |stage|
|
23
|
-
assert_equal
|
50
|
+
assert_equal Atom::Author.new(nil, :name => 'oogabooga', :email => 'twgosaas@gmail.com'), stage.authors.first
|
24
51
|
assert_equal "Failed", stage.result
|
52
|
+
assert stage.failed?
|
53
|
+
assert false == stage.passed?
|
25
54
|
end
|
26
|
-
assert_equal "Acceptance", stages.first.name
|
27
|
-
assert_equal "Units", stages.last.name
|
28
|
-
assert_equal ["Update README"], pipelines.first.commit_messages
|
29
55
|
|
30
|
-
assert_equal "
|
31
|
-
assert_equal "
|
56
|
+
assert_equal "Units", stages.first.name
|
57
|
+
assert_equal "Acceptance", stages.last.name
|
58
|
+
|
59
|
+
assert_equal ["Update README", "Fixed build"], pipelines.first.commits.collect(&:message)
|
60
|
+
|
61
|
+
assert_equal "http://localhost:8153/go/files/defaultPipeline/1/Units/1/Test/cruise-output/console.log", stages.first.jobs.first.console_log_url
|
62
|
+
assert_equal "http://localhost:8153/go/files/defaultPipeline/1/Acceptance/1/Test/cruise-output/console.log", stages.last.jobs.first.console_log_url
|
63
|
+
|
64
|
+
assert_equal 'urn:x-go.studios.thoughtworks.com:stage-id:defaultPipeline:1:Units:1', stages.first.identifier
|
65
|
+
assert_equal 'urn:x-go.studios.thoughtworks.com:stage-id:defaultPipeline:1:Acceptance:1', stages.last.identifier
|
32
66
|
end
|
33
67
|
|
34
|
-
|
68
|
+
test "empty atom feed should not throw up" do
|
35
69
|
stub_request(:get, "http://localhost:8153/go/api/pipelines/defaultPipeline/stages.xml").to_return(:body => file_contents("stages_empty.xml"))
|
36
|
-
|
70
|
+
runs = GoApiClient.runs(:host => "localhost", :port => 8153)
|
37
71
|
|
38
|
-
assert pipelines.empty?
|
72
|
+
assert runs[:pipelines].empty?
|
39
73
|
end
|
40
74
|
end
|
41
75
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
module GoApiClient
|
4
|
+
class UserTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
test "should parse user name and email address" do
|
7
|
+
user = User.parse("foobar <foo@example.com>")
|
8
|
+
assert_equal 'foobar', user.name
|
9
|
+
assert_equal 'foo@example.com', user.email
|
10
|
+
end
|
11
|
+
|
12
|
+
test "should strip name and email when parsing" do
|
13
|
+
user = User.parse("foobar1 <foo1@example.com>")
|
14
|
+
assert_equal 'foobar1', user.name
|
15
|
+
assert_equal 'foo1@example.com', user.email
|
16
|
+
end
|
17
|
+
|
18
|
+
test "equality" do
|
19
|
+
assert_equal User.parse("foobar <foo@example.com>"), User.parse("foobar <foo@example.com>")
|
20
|
+
end
|
21
|
+
|
22
|
+
test "hashcode" do
|
23
|
+
assert_equal User.parse("foobar <foo@example.com>").hash, User.parse("foobar <foo@example.com>").hash
|
24
|
+
assert_not_equal User.parse("bar <bar@example.com>").hash, User.parse("foo <foo@example.com>").hash
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -1,11 +1,27 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'simplecov'
|
4
|
+
SimpleCov.start do
|
5
|
+
add_filter "/.bundle/"
|
6
|
+
add_filter "/bundle/"
|
7
|
+
add_filter "/test/"
|
8
|
+
end
|
9
|
+
|
10
|
+
Bundler.require
|
1
11
|
require 'test/unit'
|
2
12
|
require 'go_api_client'
|
3
13
|
require 'ostruct'
|
4
|
-
Dir["go_api_client/**/*.rb"].each {|f| require f}
|
5
14
|
require 'webmock/test_unit'
|
6
15
|
|
7
|
-
|
8
|
-
|
16
|
+
module WebMock
|
17
|
+
class RequestStub
|
18
|
+
attr_accessor :responses_sequences
|
19
|
+
end
|
20
|
+
end
|
21
|
+
class Test::Unit::TestCase
|
22
|
+
def file_contents(file_name)
|
23
|
+
File.read(File.expand_path("../../test/fixtures/#{file_name}", __FILE__))
|
24
|
+
end
|
9
25
|
end
|
10
26
|
|
11
27
|
module Test::Unit::Assertions
|