gitlab-fogbugz 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,62 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+ require "fogbugz_listener"
3
+
4
+ class FogbugzListenerTest < Test::Unit::TestCase
5
+ def setup
6
+ @service = mock("fogbugz-service")
7
+ end
8
+
9
+ def test_accumulates_fix_plus_case_and_post
10
+ @listener = FogbugzListener.new(:sha1 => "a1231", :message => "The full commit message, fixes #1111.")
11
+ @listener.fix
12
+ @listener.case("1111")
13
+ @service.expects(:fix).with(:case => "1111", :message => "Commit: a1231\n\nThe full commit message, fixes #1111.")
14
+ @listener.update_fogbugz(@service)
15
+ end
16
+
17
+ def test_accumulates_reopen_plus_case_and_post
18
+ @listener = FogbugzListener.new(:sha1 => "c829a13", :message => "Reopens #3211")
19
+ @listener.reopen
20
+ @listener.case("3211")
21
+ @service.expects(:reopen).with(:case => "3211", :message => "Commit: c829a13\n\nReopens #3211")
22
+ @listener.update_fogbugz(@service)
23
+ end
24
+
25
+ def test_accumulates_implement_two_cases_and_post
26
+ @listener = FogbugzListener.new(:sha1 => "c829a13", :message => "Implements #3322 and #7219")
27
+ @listener.implement
28
+ @listener.case("3322")
29
+ @listener.case("7219")
30
+ @service.expects(:implement).with(:case => "3322", :message => "Commit: c829a13\n\nImplements #3322 and #7219")
31
+ @service.expects(:implement).with(:case => "7219", :message => "Commit: c829a13\n\nImplements #3322 and #7219")
32
+ @listener.update_fogbugz(@service)
33
+ end
34
+
35
+ def test_adds_link_to_github_in_message_if_repo_in_options
36
+ @listener = FogbugzListener.new(:sha1 => "c829a13", :message => "Reopens #3211", :commit_url => "http://github.com/johnreilly/github-fogbuz")
37
+ @listener.reopen
38
+ @listener.case("3211")
39
+ @service.expects(:reopen).with(:case => "3211", :message => "Commit: c829a13\nhttp://github.com/johnreilly/github-fogbuz\n\nReopens #3211")
40
+ @listener.update_fogbugz(@service)
41
+ end
42
+
43
+ def test_reference_adds_extra_text_to_link_cases_together
44
+ @listener = FogbugzListener.new(:sha1 => "c829a13", :message => "Implements #1112, references #9219, #9220", :commit_url => "http://github.com/johnreilly/github-fogbuz")
45
+ @listener.implement
46
+ @listener.case("1112")
47
+ @listener.reference
48
+ @listener.case("9219")
49
+ @listener.case("9220")
50
+ @service.expects(:implement).with(:case => "1112",
51
+ :message => "Commit: c829a13\nhttp://github.com/johnreilly/github-fogbuz\n\nImplements #1112, references #9219, #9220\n\nReferences case 9219, case 9220")
52
+ @listener.update_fogbugz(@service)
53
+ end
54
+
55
+ def test_reference_only_adds_message_to_proper_case
56
+ @listener = FogbugzListener.new(:sha1 => "c829a13", :message => "References #3211", :commit_url => "http://github.com/johnreilly/github-fogbuz/commit/c829a13")
57
+ @listener.reference
58
+ @listener.case("3211")
59
+ @service.expects(:append_message).with(:case => "3211", :message => "Commit: c829a13\nhttp://github.com/johnreilly/github-fogbuz/commit/c829a13\n\nReferences #3211")
60
+ @listener.update_fogbugz(@service)
61
+ end
62
+ end
@@ -0,0 +1,61 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+ require "fogbugz_service"
3
+
4
+ class FogbugzServiceCaseEditingTest < Test::Unit::TestCase
5
+ TOKEN = "andf09j"
6
+
7
+ def setup
8
+ @service_uri = URI.parse("http://fogbugz.my-service.com/")
9
+ @service = FogbugzService.new(@service_uri, "/path/to/curl", TOKEN)
10
+ @service.stubs(:get).returns(REXML::Document.new(VALID_API_RESPONSE))
11
+ @uri = @service.validate!
12
+ end
13
+
14
+ def test_implement_calls_fogbugz_with_cmd_set_to_resolve_and_status_set_to_implement
15
+ params = {"cmd" => "resolve", "ixBug" => "2211", "ixStatus" => FogbugzService::STATES[:implemented],
16
+ "sEvent" => "this is the message", "token" => TOKEN}
17
+ @service.expects(:get).with(@uri, params).returns(REXML::Document.new(VALID_EDIT_RESPONSE))
18
+ @service.implement(:case => "2211", :message => "this is the message")
19
+ end
20
+
21
+ def test_fix_calls_fogbugz_with_cmd_set_to_resolve_and_status_set_to_fixed
22
+ params = {"cmd" => "resolve", "ixBug" => "2211", "ixStatus" => FogbugzService::STATES[:fixed],
23
+ "sEvent" => "this is the message", "token" => TOKEN}
24
+ @service.expects(:get).with(@uri, params).returns(REXML::Document.new(VALID_EDIT_RESPONSE))
25
+ @service.fix(:case => "2211", :message => "this is the message")
26
+ end
27
+
28
+ def test_complete_calls_fogbugz_with_cmd_set_to_resolve_and_status_set_to_completed
29
+ params = {"cmd" => "resolve", "ixBug" => "2211", "ixStatus" => FogbugzService::STATES[:completed],
30
+ "sEvent" => "this is the message", "token" => TOKEN}
31
+ @service.expects(:get).with(@uri, params).returns(REXML::Document.new(VALID_EDIT_RESPONSE))
32
+ @service.complete(:case => "2211", :message => "this is the message")
33
+ end
34
+
35
+ def test_close_calls_fogbugz_with_cmd_set_to_close
36
+ params = {"cmd" => "close", "ixBug" => "2211",
37
+ "sEvent" => "this is the message", "token" => TOKEN}
38
+ @service.expects(:get).with(@uri, params).returns(REXML::Document.new(VALID_EDIT_RESPONSE))
39
+ @service.close(:case => "2211", :message => "this is the message")
40
+ end
41
+
42
+ def test_append_message_calls_fogbugz_with_cmd_set_to_edit
43
+ params = {"cmd" => "edit", "ixBug" => "2211",
44
+ "sEvent" => "this is the message", "token" => TOKEN}
45
+ @service.expects(:get).with(@uri, params).returns(REXML::Document.new(VALID_EDIT_RESPONSE))
46
+ @service.append_message(:case => "2211", :message => "this is the message")
47
+ end
48
+
49
+ VALID_API_RESPONSE = <<-API
50
+ <?xml version="1.0" encoding="UTF-8" ?>
51
+ <response>
52
+ <version>3</version>
53
+ <minversion>1</minversion>
54
+ <url>api.asp?</url>
55
+ </response>
56
+ API
57
+
58
+ VALID_EDIT_RESPONSE = <<-API
59
+ <?xml version="1.0" encoding="UTF-8" ?>
60
+ API
61
+ end
@@ -0,0 +1,47 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+ require "fogbugz_service"
3
+
4
+ class FogbugzServiceLogonTest < Test::Unit::TestCase
5
+ def setup
6
+ @service_uri = URI.parse("http://fogbugz.my-service.com/")
7
+ @service = FogbugzService.new(@service_uri, "/path/to/curl")
8
+ @service.stubs(:get).returns(REXML::Document.new(VALID_API_RESPONSE))
9
+ @uri = @service.validate!
10
+ end
11
+
12
+ def test_logon_calls_fogbugz_to_retrieve_token
13
+ params = {"cmd" => "logon", "email" => "me@my-domain.com", "password" => "my-super-duper-password"}
14
+ @service.expects(:get).with(@uri, params).returns(REXML::Document.new(VALID_LOGON_RESPONSE))
15
+ @service.logon("me@my-domain.com", "my-super-duper-password")
16
+ end
17
+
18
+ def test_logon_returns_token
19
+ @service.stubs(:get).returns(REXML::Document.new(VALID_LOGON_RESPONSE))
20
+ assert_equal "24dsg34lok43un23", @service.logon("me@my-domain.com", "my-super-duper-password")
21
+ end
22
+
23
+ def test_logon_raises_bad_credentials_when_logon_fails
24
+ @service.stubs(:get).returns(REXML::Document.new(FAILED_LOGON_RESPONSE))
25
+ assert_raise FogbugzService::BadCredentials do
26
+ @service.logon("me@my-domain.com", "my-super-duper-password")
27
+ end
28
+ end
29
+
30
+ VALID_API_RESPONSE = <<-API
31
+ <?xml version="1.0" encoding="UTF-8" ?>
32
+ <response>
33
+ <version>3</version>
34
+ <minversion>1</minversion>
35
+ <url>api.asp?</url>
36
+ </response>
37
+ API
38
+
39
+ VALID_LOGON_RESPONSE = <<-API
40
+ <?xml version="1.0" encoding="UTF-8" ?>
41
+ <response><token>24dsg34lok43un23</token></response>
42
+ API
43
+
44
+ FAILED_LOGON_RESPONSE = <<-API
45
+ <response><error code="1">Error Message To Show User</error></response>
46
+ API
47
+ end
@@ -0,0 +1,83 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+ require "fogbugz_service"
3
+
4
+ class FogbugzServiceTest < Test::Unit::TestCase
5
+ def setup
6
+ @service_uri = URI.parse("http://fogbugz.my-service.com/")
7
+ @service = FogbugzService.new(@service_uri, "/path/to/curl")
8
+ end
9
+
10
+ def test_validate_connects_to_fogbugz_and_retrieves_the_api_url
11
+ @service.expects(:get).with(@service_uri.merge("api.xml")).returns(REXML::Document.new(VALID_API_RESPONSE))
12
+ @service.validate!
13
+ end
14
+
15
+ def test_validate_parses_response_to_find_url
16
+ @service.stubs(:get).returns(REXML::Document.new(VALID_API_RESPONSE))
17
+ @service.validate!
18
+ assert_equal @service_uri.merge("api.asp?"), @service.api_uri
19
+ end
20
+
21
+ def test_validate_returns_the_api_uri
22
+ @service.stubs(:get).returns(REXML::Document.new(VALID_API_RESPONSE))
23
+ assert_equal @service_uri.merge("api.asp?"), @service.validate!
24
+ end
25
+
26
+ def test_validate_raises_if_minimum_version_is_not_one
27
+ @service.stubs(:get).returns(REXML::Document.new(RECENT_API_RESPONSE))
28
+ assert_raise(FogbugzService::ClientOutOfDate) do
29
+ @service.validate!
30
+ end
31
+ end
32
+
33
+ def test_validate_raises_if_xhtml_returned
34
+ @service.stubs(:get).returns(REXML::Document.new(VALID_XHTML_RESPONSE))
35
+ assert_raise(FogbugzService::BadXml) do
36
+ @service.validate!
37
+ end
38
+ end
39
+
40
+ def test_validate_does_validation_only_once
41
+ @service.expects(:get).once.returns(REXML::Document.new(VALID_API_RESPONSE))
42
+ @service.validate!
43
+ end
44
+
45
+ def test_connect_calls_validate_and_yields
46
+ @service.expects(:validate!)
47
+ yielded = false
48
+ @service.connect do |service|
49
+ assert_equal service, @service
50
+ yielded = true
51
+ end
52
+
53
+ assert yielded
54
+ end
55
+
56
+ VALID_API_RESPONSE = <<-API
57
+ <?xml version="1.0" encoding="UTF-8" ?>
58
+ <response>
59
+ <version>3</version>
60
+ <minversion>1</minversion>
61
+ <url>api.asp?</url>
62
+ </response>
63
+ API
64
+
65
+ RECENT_API_RESPONSE = <<-API
66
+ <?xml version="1.0" encoding="UTF-8" ?>
67
+ <response>
68
+ <version>9</version>
69
+ <minversion>7</minversion>
70
+ <url>api.asp?</url>
71
+ </response>
72
+ API
73
+
74
+ VALID_XHTML_RESPONSE = <<-API
75
+ <html>
76
+ <head>
77
+ <title>Fogbugz API</title>
78
+ </head>
79
+ <body>
80
+ </body>
81
+ </html>
82
+ API
83
+ end
@@ -0,0 +1,80 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+ require "message_parser"
3
+
4
+ class MessageParserTest < Test::Unit::TestCase
5
+ def setup
6
+ @listener = mock("listener")
7
+ end
8
+
9
+ def test_parse_message_without_fogbugz_data
10
+ assert_nothing_raised do
11
+ MessageParser.parse("this is a test", @listener)
12
+ end
13
+ end
14
+
15
+ def test_parse_message_with_reference_to_case_notifies_listener_about_case
16
+ @listener.expects(:reference)
17
+ @listener.expects(:case).with("1231").once
18
+ MessageParser.parse("This is a test. References #1231", @listener)
19
+ end
20
+
21
+ def test_parse_message_with_closing_case_notifies_listener
22
+ @listener.expects(:close)
23
+ @listener.expects(:case).with("3321").once
24
+ MessageParser.parse("Closes #3321", @listener)
25
+ end
26
+
27
+ def test_parse_fixes_with_two_cases_notifies_listener
28
+ @listener.expects(:fix)
29
+ @listener.expects(:case).with("3321").once
30
+ @listener.expects(:case).with("1234").once
31
+ MessageParser.parse("Fixes #3321, #1234", @listener)
32
+ end
33
+
34
+ def test_parse_reopens
35
+ @listener.expects(:reopen)
36
+ @listener.expects(:case).with("1234").once
37
+ MessageParser.parse("Reopens #1234", @listener)
38
+ end
39
+
40
+ def test_parse_implements
41
+ @listener.expects(:implement)
42
+ @listener.expects(:case).with("1334").once
43
+ MessageParser.parse("Implements #1334", @listener)
44
+ end
45
+
46
+ def test_parse_completes
47
+ @listener.expects(:complete)
48
+ @listener.expects(:case).with("1334").once
49
+ MessageParser.parse("Completes #1334", @listener)
50
+ end
51
+
52
+ def test_parse_bugzid_1
53
+ @listener.expects(:reference)
54
+ @listener.expects(:case).with("1234").once
55
+ MessageParser.parse("BugzID: #1234", @listener)
56
+ end
57
+
58
+ def test_parse_bugzid_2
59
+ @listener.expects(:reference)
60
+ @listener.expects(:case).with("1234").once
61
+ MessageParser.parse("BugzID #1234", @listener)
62
+ end
63
+
64
+ def test_parse_bugzid_3
65
+ @listener.expects(:reference)
66
+ @listener.expects(:case).with("1234").once
67
+ MessageParser.parse("bugid: #1234", @listener)
68
+ end
69
+
70
+ def test_parse_bugzid_4
71
+ @listener.expects(:reference)
72
+ @listener.expects(:case).with("1234").once
73
+ MessageParser.parse("bugsid #1234", @listener)
74
+ end
75
+ def test_parse_refs
76
+ @listener.expects(:reference)
77
+ @listener.expects(:case).with("1234").once
78
+ MessageParser.parse("refs #1234", @listener)
79
+ end
80
+ end
@@ -0,0 +1,3 @@
1
+ require "rubygems"
2
+ require "test/unit"
3
+ require "mocha"
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gitlab-fogbugz
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - John Reilly
9
+ - François Beausoleil
10
+ - Markus Fischer
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2012-07-14 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: json
18
+ requirement: !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: 1.1.2
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ~>
30
+ - !ruby/object:Gem::Version
31
+ version: 1.1.2
32
+ description: Fork of github-fogbugz, a gem that acts as the gateway between GitLab
33
+ and Fogbugz.
34
+ email:
35
+ - jr@trms.com
36
+ - francois@teksol.info
37
+ - markus@fischer.name
38
+ executables:
39
+ - gitlab-fogbugz-server
40
+ - gitlab-fogbugz
41
+ extensions: []
42
+ extra_rdoc_files:
43
+ - README.markdown
44
+ - LICENSE
45
+ - TODO
46
+ files:
47
+ - LICENSE
48
+ - README.markdown
49
+ - Rakefile
50
+ - TODO
51
+ - lib/message_parser.rb
52
+ - lib/message_parser_machine.rb
53
+ - lib/fogbugz_listener.rb
54
+ - lib/fogbugz_service.rb
55
+ - test/fogbugz_service_logon_test.rb
56
+ - test/fogbugz_service_test.rb
57
+ - test/fogbugz_listener_test.rb
58
+ - test/fogbugz_service_case_editing_test.rb
59
+ - test/message_parser_test.rb
60
+ - test/test_helper.rb
61
+ - config/config.yml.example
62
+ - samples/test-fogbugz-url.rb
63
+ - samples/test-receive-commit.rb
64
+ - bin/gitlab-fogbugz-server
65
+ - bin/gitlab-fogbugz
66
+ homepage: http://github.com/mfn/gitlab-fogbugz
67
+ licenses: []
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ requirements: []
85
+ rubyforge_project:
86
+ rubygems_version: 1.8.24
87
+ signing_key:
88
+ specification_version: 3
89
+ summary: Fork of github-fogbugz, a gem that acts as the gateway between GitLab and
90
+ Fogbugz.
91
+ test_files: []