gitlab-fogbugz 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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: []