toolshed 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +14 -0
  3. data/Rakefile +11 -0
  4. data/bin/toolshed.rb +95 -16
  5. data/lib/toolshed/base.rb +7 -0
  6. data/lib/toolshed/cli.rb +13 -6
  7. data/lib/toolshed/client.rb +105 -83
  8. data/lib/toolshed/commands/checkout_branch.rb +26 -0
  9. data/lib/toolshed/commands/create_branch.rb +60 -0
  10. data/lib/toolshed/commands/create_pivotal_tracker_note.rb +9 -4
  11. data/lib/toolshed/commands/create_pull_request.rb +137 -0
  12. data/lib/toolshed/commands/delete_branch.rb +27 -0
  13. data/lib/toolshed/commands/get_daily_time_update.rb +21 -0
  14. data/lib/toolshed/commands/get_pivotal_tracker_story_information.rb +6 -3
  15. data/lib/toolshed/commands/list_branches.rb +13 -0
  16. data/lib/toolshed/commands/push_branch.rb +11 -0
  17. data/lib/toolshed/commands/update_pivotal_tracker_story_status.rb +8 -5
  18. data/lib/toolshed/git/git.rb +134 -0
  19. data/lib/toolshed/git/github.rb +88 -0
  20. data/lib/toolshed/ticket_tracking/pivotal_tracker.rb +111 -0
  21. data/lib/toolshed/ticket_tracking/ticket_tracking.rb +6 -0
  22. data/lib/toolshed/time_tracking/harvest.rb +68 -0
  23. data/lib/toolshed/time_tracking/time_tracking.rb +6 -0
  24. data/lib/toolshed/version.rb +1 -1
  25. data/lib/toolshed.rb +8 -2
  26. data/test/commands/checkout_branch_test.rb +28 -0
  27. data/test/commands/commands_helper.rb +2 -0
  28. data/test/commands/create_branch_test.rb +44 -0
  29. data/test/commands/create_pull_request_test.rb +125 -0
  30. data/test/commands/delete_branch_test.rb +75 -0
  31. data/test/commands/push_branch_test.rb +49 -0
  32. data/test/config.rb +1 -0
  33. data/test/git/git_helper.rb +31 -0
  34. data/test/git/git_test.rb +115 -0
  35. data/test/git/github_test.rb +91 -0
  36. data/test/helper.rb +98 -0
  37. data/toolshed.gemspec +8 -0
  38. metadata +151 -9
  39. data/lib/toolshed/commands/checkout_git_branch.rb +0 -23
  40. data/lib/toolshed/commands/create_git_branch.rb +0 -28
  41. data/lib/toolshed/commands/create_github_pull_request.rb +0 -77
  42. data/lib/toolshed/commands/push_git_branch.rb +0 -10
  43. data/lib/toolshed/github.rb +0 -89
  44. data/lib/toolshed/pivotal_tracker.rb +0 -87
data/lib/toolshed.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require "toolshed/version"
2
2
  require 'httparty'
3
3
  require 'pivotal-tracker'
4
+ require 'harvested'
5
+ require 'veto'
4
6
 
5
7
  module Toolshed
6
8
  BLANK_REGEX = /\S+/
@@ -20,6 +22,10 @@ end
20
22
 
21
23
  require 'toolshed/base'
22
24
  require 'toolshed/client'
23
- require 'toolshed/github'
24
- require 'toolshed/pivotal_tracker'
25
+ require 'toolshed/git/git'
26
+ require 'toolshed/git/github'
27
+ require 'toolshed/ticket_tracking/ticket_tracking'
28
+ require 'toolshed/ticket_tracking/pivotal_tracker'
29
+ require 'toolshed/time_tracking/time_tracking'
30
+ require 'toolshed/time_tracking/harvest'
25
31
  require 'toolshed/error'
@@ -0,0 +1,28 @@
1
+ require 'commands/commands_helper'
2
+ require 'toolshed/commands/checkout_branch'
3
+
4
+ class CheckoutBranchTest < Test::Unit::TestCase
5
+ def test_checkout_branch
6
+ current_branch = Toolshed::Git::Base.branch_name
7
+
8
+ new_branch_name = random_branch_name
9
+ create_and_checkout_branch(new_branch_name)
10
+
11
+ output = capture_stdout { Toolshed::Commands::CheckoutBranch.new.execute({}, { branch_name: current_branch }) }
12
+
13
+ assert_match /Switched to 'master'/, output
14
+ end
15
+
16
+ def test_checkout_branch_prompt
17
+ current_branch = Toolshed::Git::Base.branch_name
18
+
19
+ new_branch_name = random_branch_name
20
+ create_and_checkout_branch(new_branch_name)
21
+
22
+ # stub the possible input
23
+ Toolshed::Commands::CheckoutBranch.any_instance.stubs(:read_user_input).returns(current_branch)
24
+
25
+ output = capture_stdout { Toolshed::Commands::CheckoutBranch.new.execute({}) }
26
+ assert_match /Switched to 'master'/, output
27
+ end
28
+ end
@@ -0,0 +1,2 @@
1
+ require 'helper'
2
+ require 'git/git_helper'
@@ -0,0 +1,44 @@
1
+ require 'commands/commands_helper'
2
+ require 'toolshed/commands/create_branch'
3
+
4
+ class CreateBranchTest < Test::Unit::TestCase
5
+ def test_create_new_branch_passing_in_branch_name_branch_from
6
+ Toolshed::Client.pull_from_remote_name = 'origin'
7
+ Toolshed::Client.push_to_remote_name = 'origin'
8
+
9
+ current_branch = Toolshed::Git::Base.branch_name
10
+ new_branch_name = ::Faker::Lorem.word.downcase
11
+
12
+ output = capture_stdout { Toolshed::Commands::CreateBranch.new.execute({}, { branch_name: new_branch_name, branch_from: 'development' }) }
13
+
14
+ assert_match /Branch #{new_branch_name} has been created/, output
15
+
16
+ assert_equal new_branch_name, Toolshed::Git::Base.branch_name
17
+ assert_equal 'development', Toolshed::Git::Base.branched_from
18
+
19
+ Toolshed::Git::Base.checkout(current_branch)
20
+ delete_branch(new_branch_name)
21
+ end
22
+
23
+ def test_create_new_branch_not_passing_in_branch_name_or_branch_from
24
+ Toolshed::Client.pull_from_remote_name = 'origin'
25
+ Toolshed::Client.push_to_remote_name = 'origin'
26
+
27
+ current_branch = Toolshed::Git::Base.branch_name
28
+ new_branch_name = ::Faker::Lorem.word.downcase
29
+
30
+ # stub the possible input
31
+ Toolshed::Commands::CreateBranch.any_instance.stubs(:read_user_input_branch_name).returns(new_branch_name)
32
+ Toolshed::Commands::CreateBranch.any_instance.stubs(:read_user_input_branch_from).returns('development')
33
+
34
+ output = capture_stdout { Toolshed::Commands::CreateBranch.new.execute({}) }
35
+
36
+ assert_match /Branch #{new_branch_name} has been created/, output
37
+
38
+ assert_equal new_branch_name, Toolshed::Git::Base.branch_name
39
+ assert_equal 'development', Toolshed::Git::Base.branched_from
40
+
41
+ Toolshed::Git::Base.checkout(current_branch)
42
+ delete_branch(new_branch_name)
43
+ end
44
+ end
@@ -0,0 +1,125 @@
1
+ require 'commands/commands_helper'
2
+ require 'toolshed/commands/create_pull_request'
3
+
4
+ class CreatePullRequestTest < Test::Unit::TestCase
5
+ def test_create_github_pull_request_no_ticket_tracking
6
+ Toolshed::Client.ticket_tracking_tool = ''
7
+ Toolshed::Client.git_tool = 'github'
8
+ Toolshed::Client.github_username = 'sample'
9
+ Toolshed::Client.github_password = 'sample'
10
+
11
+ Toolshed::Client.pull_from_repository_user = 'sample'
12
+ Toolshed::Client.pull_from_repository_name = 'sample_repo'
13
+
14
+ # mock up the pull request
15
+ expected_result = {
16
+ "html_url" => "github.com/pulls/1",
17
+ }.to_json
18
+ http_mock = mock('Net::HTTPResponse')
19
+ http_mock.stubs(:code => '200', :message => "OK", :content_type => "text/html", :body => expected_result)
20
+
21
+ http_party_mock = mock('HTTParty')
22
+ http_party_mock.stubs(:response => http_mock)
23
+
24
+ # create new github object
25
+ github = Toolshed::Git::Github.new
26
+
27
+ github_default_options = github.default_options
28
+ github_default_options.merge!({
29
+ body: {
30
+ title: 'Sample',
31
+ body: 'Sample Body',
32
+ head: "#{Toolshed::Client.github_username}:#{Toolshed::Git::Base.branch_name}",
33
+ base: Toolshed::Git::Base.branched_from
34
+ }.to_json
35
+ })
36
+
37
+ HTTParty.
38
+ expects(:post).
39
+ with("#{Toolshed::Client::GITHUB_BASE_API_URL}repos/#{Toolshed::Client.pull_from_repository_user}/#{Toolshed::Client.pull_from_repository_name}/pulls", github_default_options).
40
+ returns(http_party_mock)
41
+
42
+ # stub the possible input
43
+ Toolshed::Commands::CreatePullRequest.any_instance.stubs(:read_user_input_add_note_to_ticket).returns(false)
44
+
45
+ output = capture_stdout { Toolshed::Commands::CreatePullRequest.new.execute({}, { title: 'Sample', body: 'Sample Body' }) }
46
+ assert_match /Created Pull Request: github.com\/pulls\/1/, output
47
+ end
48
+
49
+ def test_create_github_pull_request_with_pivotal_tracker
50
+ Toolshed::Client.ticket_tracking_tool = 'pivotal_tracker'
51
+ Toolshed::Client.git_tool = 'github'
52
+ Toolshed::Client.github_username = 'sample'
53
+ Toolshed::Client.github_password = 'sample'
54
+ Toolshed::Client.pivotal_tracker_username = 'ptusername'
55
+ Toolshed::Client.pivotal_tracker_password = 'ptpassword'
56
+ Toolshed::Client.default_pivotal_tracker_project_id = '1234'
57
+ Toolshed::Client.pull_from_repository_user = 'sample'
58
+ Toolshed::Client.pull_from_repository_name = 'sample_repo'
59
+ Toolshed::Client.use_defaults = true
60
+
61
+ # mock up the pull request
62
+ expected_result = {
63
+ "html_url" => "github.com/pulls/1",
64
+ }.to_json
65
+ http_mock = mock('Net::HTTPResponse')
66
+ http_mock.stubs(:code => '200', :message => "OK", :content_type => "text/html", :body => expected_result)
67
+
68
+ http_party_mock = mock('HTTParty')
69
+ http_party_mock.stubs(:response => http_mock)
70
+
71
+ # create new github object
72
+ github = Toolshed::Git::Github.new
73
+
74
+ github_default_options = github.default_options
75
+ github_default_options.merge!({
76
+ body: {
77
+ title: 'Sample',
78
+ body: 'Sample Body',
79
+ head: "#{Toolshed::Client.github_username}:#{Toolshed::Git::Base.branch_name}",
80
+ base: Toolshed::Git::Base.branched_from
81
+ }.to_json
82
+ })
83
+
84
+ HTTParty.
85
+ expects(:post).
86
+ with("#{Toolshed::Client::GITHUB_BASE_API_URL}repos/#{Toolshed::Client.pull_from_repository_user}/#{Toolshed::Client.pull_from_repository_name}/pulls", github_default_options).
87
+ returns(http_party_mock)
88
+
89
+
90
+ # mock up the pivotal_tracker stuff
91
+ PivotalTracker::Client.expects(:token).
92
+ with(Toolshed::TicketTracking::PivotalTracker.username, Toolshed::TicketTracking::PivotalTracker.password).
93
+ returns('3454354token')
94
+
95
+ # mock up the project response
96
+ pivotal_tracker_mock = mock('PivotalTracker::Client')
97
+ pivotal_tracker_mock.stubs(:id => '1')
98
+
99
+ PivotalTracker::Project.expects(:find).
100
+ with(Toolshed::Client.default_pivotal_tracker_project_id).
101
+ returns(pivotal_tracker_mock)
102
+
103
+ # mock up the story information
104
+ pivotal_tracker_story_mock = mock('PivotalTracker::Story')
105
+ pivotal_tracker_story_mock.stubs(:url => 'http://www.example.com', :id => '1', :name => "Test Title")
106
+
107
+ Toolshed::TicketTracking::PivotalTracker.any_instance.expects(:story_information).
108
+ with('1').
109
+ returns(pivotal_tracker_story_mock)
110
+
111
+ # stub the possible input
112
+ Toolshed::Commands::CreatePullRequest.any_instance.stubs(:read_user_input_ticket_tracker_ticket_id).returns('1')
113
+ Toolshed::Commands::CreatePullRequest.any_instance.stubs(:read_user_input_add_note_to_ticket).returns(false)
114
+
115
+ output = capture_stdout { Toolshed::Commands::CreatePullRequest.new.execute({}, { title: 'Sample', body: 'Sample Body' }) }
116
+ assert_match /Created Pull Request: github.com\/pulls\/1/, output
117
+ end
118
+
119
+ def test_create_github_pull_request_with_invalid_ticket_tracker
120
+ Toolshed::Client.ticket_tracking_tool = 'unfuddle'
121
+ Toolshed::Client.git_tool = 'github'
122
+ output = capture_stdout { Toolshed::Commands::CreatePullRequest.new.execute({}, { title: 'Sample', body: 'Sample Body' }) }
123
+ assert_match /Ticket tracking tool is not supported at this time/, output
124
+ end
125
+ end
@@ -0,0 +1,75 @@
1
+ require 'commands/commands_helper'
2
+ require 'toolshed/commands/delete_branch'
3
+
4
+ class DeleteBranchTest < Test::Unit::TestCase
5
+ def test_delete_branch_with_branch_name_passed
6
+ current_branch = Toolshed::Git::Base.branch_name
7
+
8
+ new_branch_name = random_branch_name
9
+ create_and_checkout_branch(new_branch_name, 'master')
10
+
11
+ # go to the remote repo and verify it exists
12
+ Dir.chdir(File.join(TEST_ROOT, "remote"))
13
+ remote_current_branch = Toolshed::Git::Base.branch_name
14
+ Toolshed::Git::Base.checkout(new_branch_name)
15
+ assert_equal new_branch_name, Toolshed::Git::Base.branch_name
16
+ Toolshed::Git::Base.checkout(remote_current_branch)
17
+
18
+ Dir.chdir(File.join(TEST_ROOT, "local"))
19
+ Toolshed::Git::Base.checkout(current_branch)
20
+
21
+ output = capture_stdout { Toolshed::Commands::DeleteBranch.new.execute({}, { branch_name: new_branch_name }) }
22
+ assert_match /#{new_branch_name} has been deleted/, output
23
+
24
+ branch_found = `git branch | grep #{new_branch_name}`
25
+ assert_equal '', branch_found
26
+ end
27
+
28
+ def test_delete_branch_with_ticket_id_only_passed
29
+ current_branch = Toolshed::Git::Base.branch_name
30
+
31
+ new_branch_name = "1234333_#{random_branch_name}"
32
+ create_and_checkout_branch(new_branch_name, 'master')
33
+
34
+ # go to the remote repo and verify it exists
35
+ Dir.chdir(File.join(TEST_ROOT, "remote"))
36
+ remote_current_branch = Toolshed::Git::Base.branch_name
37
+ Toolshed::Git::Base.checkout(new_branch_name)
38
+ assert_equal new_branch_name, Toolshed::Git::Base.branch_name
39
+ Toolshed::Git::Base.checkout(remote_current_branch)
40
+
41
+ Dir.chdir(File.join(TEST_ROOT, "local"))
42
+ Toolshed::Git::Base.checkout(current_branch)
43
+
44
+ output = capture_stdout { Toolshed::Commands::DeleteBranch.new.execute({}, { branch_name: '1234333' }) }
45
+ assert_match /#{new_branch_name} has been deleted/, output
46
+
47
+ branch_found = `git branch | grep #{new_branch_name}`
48
+ assert_equal '', branch_found
49
+ end
50
+
51
+ def test_delete_branch_without_branch_name_passed
52
+ current_branch = Toolshed::Git::Base.branch_name
53
+
54
+ new_branch_name = random_branch_name
55
+ create_and_checkout_branch(new_branch_name, 'master')
56
+
57
+ # go to the remote repo and verify it exists
58
+ Dir.chdir(File.join(TEST_ROOT, "remote"))
59
+ remote_current_branch = Toolshed::Git::Base.branch_name
60
+ Toolshed::Git::Base.checkout(new_branch_name)
61
+ assert_equal new_branch_name, Toolshed::Git::Base.branch_name
62
+ Toolshed::Git::Base.checkout(remote_current_branch)
63
+
64
+ Dir.chdir(File.join(TEST_ROOT, "local"))
65
+ Toolshed::Git::Base.checkout(current_branch)
66
+
67
+ Toolshed::Commands::DeleteBranch.any_instance.stubs(:read_user_input).returns(new_branch_name)
68
+
69
+ output = capture_stdout { Toolshed::Commands::DeleteBranch.new.execute({}) }
70
+ assert_match /#{new_branch_name} has been deleted/, output
71
+
72
+ branch_found = `git branch | grep #{new_branch_name}`
73
+ assert_equal '', branch_found
74
+ end
75
+ end
@@ -0,0 +1,49 @@
1
+ require 'commands/commands_helper'
2
+ require 'toolshed/commands/push_branch'
3
+
4
+ class PushBranchTest < Test::Unit::TestCase
5
+ def test_push_branch_current_working_branch
6
+ Toolshed::Client.push_to_remote_name = 'origin'
7
+
8
+ current_branch = Toolshed::Git::Base.branch_name
9
+
10
+ new_branch_name = random_branch_name
11
+ create_and_checkout_branch(new_branch_name, 'master')
12
+
13
+ output = capture_stdout { Toolshed::Commands::PushBranch.new.execute({}) }
14
+ assert_match /#{new_branch_name} has been pushed/, output
15
+
16
+ Toolshed::Git::Base.checkout(current_branch)
17
+ delete_branch(new_branch_name)
18
+ end
19
+
20
+ def test_push_branch_by_ticket_id
21
+ Toolshed::Client.push_to_remote_name = 'origin'
22
+
23
+ current_branch = Toolshed::Git::Base.branch_name
24
+
25
+ new_branch_name = "555558_#{random_branch_name}"
26
+ create_and_checkout_branch(new_branch_name, 'master')
27
+
28
+ output = capture_stdout { Toolshed::Commands::PushBranch.new.execute({}, { branch_name: '555558' }) }
29
+ assert_match /#{new_branch_name} has been pushed/, output
30
+
31
+ Toolshed::Git::Base.checkout(current_branch)
32
+ delete_branch(new_branch_name)
33
+ end
34
+
35
+ def test_push_branch_current_working_branch_with_force
36
+ Toolshed::Client.push_to_remote_name = 'origin'
37
+
38
+ current_branch = Toolshed::Git::Base.branch_name
39
+
40
+ new_branch_name = random_branch_name
41
+ create_and_checkout_branch(new_branch_name, 'master')
42
+
43
+ output = capture_stdout { Toolshed::Commands::PushBranch.new.execute({}, { force: true }) }
44
+ assert_match /#{new_branch_name} has been pushed/, output
45
+
46
+ Toolshed::Git::Base.checkout(current_branch)
47
+ delete_branch(new_branch_name)
48
+ end
49
+ end
data/test/config.rb ADDED
@@ -0,0 +1 @@
1
+ TEST_ROOT = File.expand_path(File.dirname(__FILE__))
@@ -0,0 +1,31 @@
1
+ require 'helper'
2
+
3
+ def create_and_checkout_branch(name, branch_from='master')
4
+ save_stash
5
+
6
+ until system("git checkout -b #{name} origin/#{branch_from} #{Toolshed::Client.git_quiet}")
7
+ sleep 1
8
+ end
9
+
10
+ until system("git push origin #{name} #{Toolshed::Client.git_quiet}")
11
+ sleep 1
12
+ end
13
+ end
14
+
15
+ def pop_stash
16
+ system("git stash pop #{Toolshed::Client.git_quiet}")
17
+ end
18
+
19
+ def save_stash
20
+ system("git stash save #{Toolshed::Client.git_quiet}")
21
+ end
22
+
23
+ def delete_branch(branch_name)
24
+ until system("git branch -D #{branch_name} --quiet")
25
+ sleep 1
26
+ end
27
+ end
28
+
29
+ def random_branch_name
30
+ "#{::Faker::Lorem.word.downcase}_#{Time.now.to_i}"
31
+ end
@@ -0,0 +1,115 @@
1
+ require 'git/git_helper'
2
+
3
+ class GitTest < Test::Unit::TestCase
4
+ def test_get_branch_name
5
+ current_branch = Toolshed::Git::Base.branch_name
6
+
7
+ new_branch_name = random_branch_name
8
+ create_and_checkout_branch(new_branch_name)
9
+
10
+ assert_equal new_branch_name, Toolshed::Git::Base.branch_name
11
+
12
+ Toolshed::Git::Base.checkout(current_branch)
13
+ pop_stash
14
+ delete_branch(new_branch_name)
15
+ end
16
+
17
+ def test_checkout_branch
18
+ current_branch = Toolshed::Git::Base.branch_name
19
+
20
+ new_branch_name = random_branch_name
21
+ create_and_checkout_branch(new_branch_name)
22
+
23
+ Toolshed::Git::Base.checkout(current_branch)
24
+
25
+ assert_equal current_branch, Toolshed::Git::Base.branch_name
26
+
27
+ delete_branch(new_branch_name)
28
+ end
29
+
30
+ def test_checkout_branch_by_id
31
+ current_branch = Toolshed::Git::Base.branch_name
32
+
33
+ branch_id = "124233"
34
+
35
+ new_branch_name = random_branch_name
36
+ new_branch_name = "#{branch_id}_#{new_branch_name}"
37
+ create_and_checkout_branch(new_branch_name)
38
+
39
+ Toolshed::Git::Base.checkout(current_branch)
40
+ assert_equal current_branch, Toolshed::Git::Base.branch_name
41
+
42
+ Toolshed::Git::Base.checkout(branch_id)
43
+ assert_equal new_branch_name, Toolshed::Git::Base.branch_name
44
+
45
+ Toolshed::Git::Base.checkout(current_branch)
46
+ delete_branch(new_branch_name)
47
+ end
48
+
49
+ def test_branched_from
50
+ current_branch = Toolshed::Git::Base.branch_name
51
+ current_branch_branched_from = Toolshed::Git::Base.branched_from
52
+
53
+ new_branch_name = random_branch_name
54
+ create_and_checkout_branch(new_branch_name, 'development')
55
+
56
+ assert_equal 'development', Toolshed::Git::Base.branched_from
57
+
58
+ Toolshed::Git::Base.checkout(current_branch)
59
+ delete_branch(new_branch_name)
60
+ end
61
+
62
+ def test_create_new_branch
63
+ current_branch = Toolshed::Git::Base.branch_name
64
+
65
+ new_branch_name = random_branch_name
66
+ git = Toolshed::Git::Base.new({
67
+ from_remote_branch_name: 'development',
68
+ to_remote_branch_name: new_branch_name,
69
+ from_remote_name: 'origin',
70
+ to_remote_name: 'origin',
71
+ })
72
+ git.create_branch
73
+
74
+ assert_equal new_branch_name, Toolshed::Git::Base.branch_name
75
+ assert_equal 'development', Toolshed::Git::Base.branched_from
76
+
77
+ Toolshed::Git::Base.checkout(current_branch)
78
+ delete_branch(new_branch_name)
79
+ end
80
+
81
+ def test_create_branch_from_remote_name_empty
82
+ new_branch_name = random_branch_name
83
+ git = Toolshed::Git::Base.new({
84
+ from_remote_branch_name: '',
85
+ to_remote_branch_name: new_branch_name,
86
+ from_remote_name: 'origin',
87
+ to_remote_name: 'origin',
88
+ })
89
+
90
+ exception = assert_raise(Veto::InvalidEntity) { git.create_branch }
91
+ assert_equal 'from_remote_branch_name is not present', exception.message.first
92
+ end
93
+
94
+ def test_delete_branch
95
+ current_branch = Toolshed::Git::Base.branch_name
96
+
97
+ new_branch_name = random_branch_name
98
+ create_and_checkout_branch(new_branch_name, 'master')
99
+
100
+ # go to the remote repo and verify it exists
101
+ Dir.chdir(File.join(TEST_ROOT, "remote"))
102
+ remote_current_branch = Toolshed::Git::Base.branch_name
103
+ Toolshed::Git::Base.checkout(new_branch_name)
104
+ assert_equal new_branch_name, Toolshed::Git::Base.branch_name
105
+ Toolshed::Git::Base.checkout(remote_current_branch)
106
+
107
+ Dir.chdir(File.join(TEST_ROOT, "local"))
108
+ Toolshed::Git::Base.checkout(current_branch)
109
+
110
+ Toolshed::Git::Base.delete(new_branch_name)
111
+
112
+ branch_found = `git branch | grep #{new_branch_name}`
113
+ assert_equal '', branch_found
114
+ end
115
+ end
@@ -0,0 +1,91 @@
1
+ require 'git/git_helper'
2
+
3
+ class GitHubTest < Test::Unit::TestCase
4
+ def test_list_branches
5
+ Toolshed::Client.github_username = 'sample'
6
+ Toolshed::Client.pull_from_repository_name = 'sample'
7
+
8
+ expected_result = [
9
+ {
10
+ "name" => "master",
11
+ "commit" => {
12
+ "sha" => "6dcb09b5b57875f334f61aebed695e2e4193db5e",
13
+ "url" => "https://api.github.com/repos/octocat/Hello-World/commits/c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc"
14
+ }
15
+ },
16
+ {
17
+ "name" => "develop",
18
+ "commit" => {
19
+ "sha" => "6dcb09b5b57875f334f61aebed695e2e4193db5e",
20
+ "url" => "https://api.github.com/repos/octocat/Hello-World/commits/345lj5ae6c19d5c5df71a34c7fbeeda2479ccbc"
21
+ }
22
+ }
23
+ ].to_json
24
+ http_mock = mock('Net::HTTPResponse')
25
+ http_mock.stubs(:code => '200', :message => "OK", :content_type => "text/html", :body => expected_result)
26
+
27
+ http_party_mock = mock('HTTParty')
28
+ http_party_mock.stubs(:response => http_mock)
29
+
30
+ # create new github object
31
+ github = Toolshed::Git::Github.new
32
+
33
+ HTTParty.
34
+ expects(:get).
35
+ with("#{Toolshed::Client::GITHUB_BASE_API_URL}repos/#{Toolshed::Client.github_username}/#{Toolshed::Client.pull_from_repository_name}/branches", github.default_options).
36
+ returns(http_party_mock)
37
+
38
+ assert_equal JSON.parse(expected_result), github.list_branches
39
+ end
40
+
41
+ def test_create_pull_request
42
+ current_branch = Toolshed::Git::Base.branch_name
43
+ new_branch_name = '1234_testing'
44
+
45
+ Toolshed::Client.pull_from_repository_user = 'sample'
46
+ Toolshed::Client.pull_from_repository_name = 'sample_repo'
47
+ create_and_checkout_branch(new_branch_name)
48
+
49
+ expected_result = {
50
+ "html_url" => "github.com/pulls/1",
51
+ }.to_json
52
+ http_mock = mock('Net::HTTPResponse')
53
+ http_mock.stubs(:code => '200', :message => "OK", :content_type => "text/html", :body => expected_result)
54
+
55
+ http_party_mock = mock('HTTParty')
56
+ http_party_mock.stubs(:response => http_mock)
57
+
58
+ # create new github object
59
+ github = Toolshed::Git::Github.new
60
+
61
+ github_default_options = github.default_options
62
+ github_default_options.merge!({
63
+ body: {
64
+ title: 'Sample',
65
+ body: 'Sample Body',
66
+ head: "#{Toolshed::Client.github_username}:#{Toolshed::Git::Base.branch_name}",
67
+ base: Toolshed::Git::Base.branched_from
68
+ }.to_json
69
+ })
70
+
71
+ HTTParty.
72
+ expects(:post).
73
+ with("#{Toolshed::Client::GITHUB_BASE_API_URL}repos/#{Toolshed::Client.pull_from_repository_user}/#{Toolshed::Client.pull_from_repository_name}/pulls", github_default_options).
74
+ returns(http_party_mock)
75
+
76
+ assert_equal JSON.parse(expected_result), github.create_pull_request('Sample', 'Sample Body')
77
+
78
+ Toolshed::Git::Base.checkout(current_branch)
79
+ delete_branch(new_branch_name)
80
+ end
81
+
82
+ def test_get_username
83
+ Toolshed::Client.github_username = 'tester'
84
+ assert_equal 'tester', Toolshed::Git::Github.username
85
+ end
86
+
87
+ def test_get_password
88
+ Toolshed::Client.github_password = 'tester1234'
89
+ assert_equal 'tester1234', Toolshed::Git::Github.password
90
+ end
91
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,98 @@
1
+ require 'config'
2
+ require 'simplecov'
3
+
4
+ if (ENV["COVERAGE"])
5
+ SimpleCov.start do
6
+ add_filter 'test/'
7
+ end
8
+ end
9
+
10
+ require 'test/unit'
11
+ require 'mocha/test_unit'
12
+ require 'faker'
13
+ require 'veto'
14
+ require 'fileutils'
15
+ require 'json'
16
+
17
+ require 'toolshed'
18
+
19
+ Test::Unit.at_start do
20
+ Toolshed::Client.use_git_submodules = false
21
+ #Toolshed::Client.git_quiet = '&> /dev/null' unless ENV['RUNNING_ON_CI']
22
+
23
+ I18n.config.enforce_available_locales = true
24
+
25
+ FileUtils.rm_rf(File.join(TEST_ROOT, "remote"))
26
+ FileUtils.rm_rf(File.join(TEST_ROOT, "local"))
27
+
28
+ # setup a fake remote directory so we can reference everything locally
29
+ if (Dir.exists? (File.join(TEST_ROOT, "remote")))
30
+ Dir.rmdir(File.join(TEST_ROOT, "remote"))
31
+ end
32
+
33
+ Dir.mkdir(File.join(TEST_ROOT, "remote"), 0777)
34
+ Dir.chdir(File.join(TEST_ROOT, "remote"))
35
+
36
+ # setup a couple of branches acting as the remote repository
37
+ until system("git init #{Toolshed::Client.git_quiet}")
38
+ sleep 1
39
+ end
40
+
41
+ FileUtils.touch('file.txt')
42
+
43
+ until system("git add file.txt #{Toolshed::Client.git_quiet}")
44
+ sleep 1
45
+ end
46
+
47
+ until system("git commit -m 'Add empty file as commit' #{Toolshed::Client.git_quiet}")
48
+ sleep 1
49
+ end
50
+
51
+ until system("git checkout -b development master #{Toolshed::Client.git_quiet}")
52
+ sleep 1
53
+ end
54
+
55
+ until system("git checkout master #{Toolshed::Client.git_quiet}")
56
+ sleep 1
57
+ end
58
+
59
+ if (Dir.exists? (File.join(TEST_ROOT, "local")))
60
+ Dir.rmdir(File.join(TEST_ROOT, "local"))
61
+ end
62
+
63
+ Dir.mkdir(File.join(TEST_ROOT, "local"), 0777)
64
+ Dir.chdir(File.join(TEST_ROOT, "local"))
65
+
66
+ # setup the new repository with an empty set this is configured in the config.rb file
67
+ until system("git init #{Toolshed::Client.git_quiet}")
68
+ sleep 1
69
+ end
70
+
71
+ until system("git remote add origin #{File.join(TEST_ROOT, "remote")} #{Toolshed::Client.git_quiet}")
72
+ sleep 1
73
+ end
74
+
75
+ until system("git remote update #{Toolshed::Client.git_quiet}")
76
+ sleep 1
77
+ end
78
+
79
+ until system("git checkout -b master origin/master #{Toolshed::Client.git_quiet}")
80
+ sleep 1
81
+ end
82
+ end
83
+
84
+ Test::Unit.at_exit do
85
+ FileUtils.rm_rf(File.join(TEST_ROOT, "remote"))
86
+ FileUtils.rm_rf(File.join(TEST_ROOT, "local"))
87
+ end
88
+
89
+ def capture_stdout(&block)
90
+ original_stdout = $stdout
91
+ $stdout = fake = StringIO.new
92
+ begin
93
+ yield
94
+ ensure
95
+ $stdout = original_stdout
96
+ end
97
+ fake.string
98
+ end