go_api_client 0.0.8 → 0.3.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.
- 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
         |