geet 0.3.14 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +8 -0
  4. data/README.md +4 -8
  5. data/bin/geet +23 -8
  6. data/geet.gemspec +1 -1
  7. data/lib/geet/commandline/commands.rb +4 -0
  8. data/lib/geet/commandline/configuration.rb +26 -1
  9. data/lib/geet/git/repository.rb +21 -3
  10. data/lib/geet/github/api_interface.rb +2 -0
  11. data/lib/geet/github/branch.rb +1 -1
  12. data/lib/geet/github/issue.rb +2 -2
  13. data/lib/geet/github/label.rb +2 -2
  14. data/lib/geet/github/milestone.rb +29 -2
  15. data/lib/geet/github/pr.rb +1 -2
  16. data/lib/geet/github/remote_repository.rb +37 -0
  17. data/lib/geet/github/user.rb +2 -2
  18. data/lib/geet/gitlab/api_interface.rb +2 -0
  19. data/lib/geet/gitlab/label.rb +2 -2
  20. data/lib/geet/gitlab/milestone.rb +1 -1
  21. data/lib/geet/gitlab/user.rb +1 -1
  22. data/lib/geet/helpers/os_helper.rb +4 -3
  23. data/lib/geet/services/add_upstream_repo.rb +37 -0
  24. data/lib/geet/services/close_milestones.rb +46 -0
  25. data/lib/geet/services/comment_pr.rb +2 -2
  26. data/lib/geet/services/create_issue.rb +5 -3
  27. data/lib/geet/services/create_milestone.rb +24 -0
  28. data/lib/geet/services/create_pr.rb +10 -6
  29. data/lib/geet/services/list_issues.rb +4 -1
  30. data/lib/geet/services/merge_pr.rb +55 -4
  31. data/lib/geet/services/open_repo.rb +50 -0
  32. data/lib/geet/shared/selection.rb +3 -0
  33. data/lib/geet/utils/attributes_selection_manager.rb +12 -3
  34. data/lib/geet/utils/git_client.rb +122 -29
  35. data/lib/geet/version.rb +1 -1
  36. data/spec/integration/comment_pr_spec.rb +1 -1
  37. data/spec/integration/create_issue_spec.rb +4 -4
  38. data/spec/integration/create_label_spec.rb +5 -5
  39. data/spec/integration/create_milestone_spec.rb +34 -0
  40. data/spec/integration/create_pr_spec.rb +13 -8
  41. data/spec/integration/list_issues_spec.rb +6 -6
  42. data/spec/integration/list_labels_spec.rb +4 -4
  43. data/spec/integration/list_milestones_spec.rb +4 -4
  44. data/spec/integration/list_prs_spec.rb +3 -3
  45. data/spec/integration/merge_pr_spec.rb +33 -4
  46. data/spec/integration/open_pr_spec.rb +1 -1
  47. data/spec/integration/open_repo_spec.rb +46 -0
  48. data/spec/vcr_cassettes/create_issue.yml +1 -1
  49. data/spec/vcr_cassettes/create_issue_upstream.yml +1 -1
  50. data/spec/vcr_cassettes/github_com/create_milestone.yml +82 -0
  51. metadata +11 -4
@@ -30,8 +30,10 @@ module Geet
30
30
  @selections_data = []
31
31
  end
32
32
 
33
+ # selection_type: SELECTION_SINGLE or SELECTION_MULTIPLE
34
+ #
33
35
  def add_attribute(repository_call, description, pattern, selection_type, name_method: nil, &pre_selection_hook)
34
- raise "Unrecognized selection type #{selection_type.inspect}" if ![:single, :multiple].include?(selection_type)
36
+ raise "Unrecognized selection type #{selection_type.inspect}" if ![SELECTION_SINGLE, SELECTION_MULTIPLE].include?(selection_type)
35
37
 
36
38
  finder_thread = find_attribute_entries(repository_call)
37
39
 
@@ -47,9 +49,9 @@ module Geet
47
49
  entries = pre_selection_hook.(entries) if pre_selection_hook
48
50
 
49
51
  case selection_type
50
- when :single
52
+ when SELECTION_SINGLE
51
53
  select_entry(description, entries, pattern, name_method)
52
- when :multiple
54
+ when SELECTION_MULTIPLE
53
55
  select_entries(description, entries, pattern, name_method)
54
56
  end
55
57
  end
@@ -86,6 +88,13 @@ module Geet
86
88
  # select_entries('reviewer', all_collaborators, 'donaldduck', nil)
87
89
  #
88
90
  def select_entries(entry_type, entries, pattern, name_method)
91
+ # Support both formats Array and String.
92
+ # It seems that at some point, SimpleScripting started splitting arrays automatically, so until
93
+ # the code is adjusted accordingly, this accommodates both the CLI and the test suite.
94
+ # Tracked here: https://github.com/saveriomiroddi/geet/issues/171.
95
+ #
96
+ pattern = pattern.join(',') if pattern.is_a?(Array)
97
+
89
98
  if pattern == MANUAL_LIST_SELECTION_FLAG
90
99
  Geet::Utils::ManualListSelection.new.select_entries(entry_type, entries, name_method: name_method)
91
100
  else
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'English'
3
4
  require 'shellwords'
4
5
  require_relative '../helpers/os_helper'
5
6
 
@@ -10,20 +11,33 @@ module Geet
10
11
  class GitClient
11
12
  include Geet::Helpers::OsHelper
12
13
 
13
- ORIGIN_NAME = 'origin'
14
+ ORIGIN_NAME = 'origin'
14
15
  UPSTREAM_NAME = 'upstream'
15
16
 
16
- # For simplicity, we match any character except the ones the separators.
17
- REMOTE_ORIGIN_REGEX = %r{
17
+ # Simplified, but good enough, pattern.
18
+ #
19
+ # Relevant matches:
20
+ #
21
+ # 1: protocol + suffix
22
+ # 2: domain
23
+ # 3: domain<>path separator
24
+ # 4: path (repo, project)
25
+ # 5: suffix
26
+ #
27
+ REMOTE_URL_REGEX = %r{
18
28
  \A
19
- (?:https://(.+?)/|git@(.+?):)
20
- ([^/]+/.*?)
21
- (?:\.git)?
29
+ (https://|git@)
30
+ (.+?)
31
+ ([/:])
32
+ (.+/.+?)
33
+ (\.git)?
22
34
  \Z
23
35
  }x
24
36
 
25
37
  UPSTREAM_BRANCH_REGEX = %r{\A[^/]+/([^/]+)\Z}
26
38
 
39
+ MAIN_BRANCH_CONFIG_ENTRY = 'custom.development-branch'
40
+
27
41
  CLEAN_TREE_MESSAGE_REGEX = /^nothing to commit, working tree clean$/
28
42
 
29
43
  def initialize(location: nil)
@@ -38,13 +52,13 @@ module Geet
38
52
  # (which start with `-`)
39
53
  #
40
54
  def cherry(limit)
41
- raw_commits = execute_command("git #{gitdir_option} cherry #{limit.shellescape}")
55
+ raw_commits = execute_git_command("cherry #{limit.shellescape}")
42
56
 
43
57
  raw_commits.split("\n").grep(/^\+/).map { |line| line[3..-1] }
44
58
  end
45
59
 
46
60
  def current_branch
47
- branch = execute_command("git #{gitdir_option} rev-parse --abbrev-ref HEAD")
61
+ branch = execute_git_command("rev-parse --abbrev-ref HEAD")
48
62
 
49
63
  raise "Couldn't find current branch" if branch == 'HEAD'
50
64
 
@@ -53,12 +67,14 @@ module Geet
53
67
 
54
68
  # Not to be confused with `upstream` repository!
55
69
  #
70
+ # This API doesn't reveal if the remote branch is gone.
71
+ #
56
72
  # return: nil, if the upstream branch is not configured.
57
73
  #
58
74
  def upstream_branch
59
- head_symbolic_ref = execute_command("git #{gitdir_option} symbolic-ref -q HEAD")
75
+ head_symbolic_ref = execute_git_command("symbolic-ref -q HEAD")
60
76
 
61
- raw_upstream_branch = execute_command("git #{gitdir_option} for-each-ref --format='%(upstream:short)' #{head_symbolic_ref.shellescape}").strip
77
+ raw_upstream_branch = execute_git_command("for-each-ref --format='%(upstream:short)' #{head_symbolic_ref.shellescape}").strip
62
78
 
63
79
  if raw_upstream_branch != ''
64
80
  raw_upstream_branch[UPSTREAM_BRANCH_REGEX, 1] || raise("Unexpected upstream format: #{raw_upstream_branch}")
@@ -67,8 +83,43 @@ module Geet
67
83
  end
68
84
  end
69
85
 
86
+ # TODO: May be merged with :upstream_branch, although it would require designing how a gone
87
+ # remote branch is expressed.
88
+ #
89
+ # Sample command output:
90
+ #
91
+ # ## add_milestone_closing...origin/add_milestone_closing [gone]
92
+ # M spec/integration/merge_pr_spec.rb
93
+ #
94
+ def upstream_branch_gone?
95
+ git_command = "status -b --porcelain"
96
+ status_output = execute_git_command(git_command)
97
+
98
+ # Simplified branch naming pattern. The exact one (see https://stackoverflow.com/a/3651867)
99
+ # is not worth implementing.
100
+ #
101
+ if status_output =~ %r(^## .+\.\.\..+?( \[gone\])?$)
102
+ !!$LAST_MATCH_INFO[1]
103
+ else
104
+ raise "Unexpected git command #{git_command.inspect} output: #{status_output}"
105
+ end
106
+ end
107
+
108
+ # See https://saveriomiroddi.github.io/Conveniently-Handling-non-master-development-default-branches-in-git-hub
109
+ #
110
+ def main_branch
111
+ branch_name = execute_git_command("config --get #{MAIN_BRANCH_CONFIG_ENTRY}", allow_error: true)
112
+
113
+ if branch_name.empty?
114
+ full_branch_name = execute_git_command("rev-parse --abbrev-ref #{ORIGIN_NAME}/HEAD")
115
+ full_branch_name.split('/').last
116
+ else
117
+ branch_name
118
+ end
119
+ end
120
+
70
121
  def working_tree_clean?
71
- git_message = execute_command("git #{gitdir_option} status")
122
+ git_message = execute_git_command("status")
72
123
 
73
124
  !!(git_message =~ CLEAN_TREE_MESSAGE_REGEX)
74
125
  end
@@ -80,19 +131,26 @@ module Geet
80
131
  # Show the description ("<subject>\n\n<body>") for the given git object.
81
132
  #
82
133
  def show_description(object)
83
- execute_command("git #{gitdir_option} show --quiet --format='%s\n\n%b' #{object.shellescape}")
134
+ execute_git_command("show --quiet --format='%s\n\n%b' #{object.shellescape}")
84
135
  end
85
136
 
86
137
  ##########################################################################
87
- # REPOSITORY/REMOTE APIS
138
+ # REPOSITORY/REMOTE QUERYING APIS
88
139
  ##########################################################################
89
140
 
141
+ # Return the components of the remote, according to REMOTE_URL_REGEX; doesn't include the full
142
+ # match.
143
+ #
144
+ def remote_components(name: nil)
145
+ remote.match(REMOTE_URL_REGEX)[1..]
146
+ end
147
+
90
148
  # Example: `donaldduck/geet`
91
149
  #
92
150
  def path(upstream: false)
93
- remote_name = upstream ? UPSTREAM_NAME : ORIGIN_NAME
151
+ remote_name_option = upstream ? {name: UPSTREAM_NAME} : {}
94
152
 
95
- remote(remote_name)[REMOTE_ORIGIN_REGEX, 3]
153
+ remote(**remote_name_option)[REMOTE_URL_REGEX, 4]
96
154
  end
97
155
 
98
156
  def owner
@@ -101,12 +159,10 @@ module Geet
101
159
 
102
160
  def provider_domain
103
161
  # We assume that it's not possible to have origin and upstream on different providers.
104
- #
105
- remote_url = remote(ORIGIN_NAME)
106
162
 
107
- domain = remote_url[REMOTE_ORIGIN_REGEX, 1] || remote_url[REMOTE_ORIGIN_REGEX, 2]
163
+ domain = remote()[REMOTE_URL_REGEX, 2]
108
164
 
109
- raise "Can't identify domain in the provider domain string: #{domain}" if domain !~ /(.*)\.\w+/
165
+ raise "Can't identify domain in the provider domain string: #{domain}" if domain !~ /\w+\.\w+/
110
166
 
111
167
  domain
112
168
  end
@@ -116,12 +172,15 @@ module Geet
116
172
  #
117
173
  # The result is in the format `git@github.com:donaldduck/geet.git`
118
174
  #
119
- def remote(name)
120
- remote_url = execute_command("git #{gitdir_option} ls-remote --get-url #{name}")
175
+ # options
176
+ # :name: remote name; if unspecified, the default remote is used.
177
+ #
178
+ def remote(name: nil)
179
+ remote_url = execute_git_command("ls-remote --get-url #{name}")
121
180
 
122
- if remote_url == name
181
+ if !remote_defined?(name)
123
182
  raise "Remote #{name.inspect} not found!"
124
- elsif remote_url !~ REMOTE_ORIGIN_REGEX
183
+ elsif remote_url !~ REMOTE_URL_REGEX
125
184
  raise "Unexpected remote reference format: #{remote_url.inspect}"
126
185
  end
127
186
 
@@ -132,9 +191,10 @@ module Geet
132
191
  # purposes, any any action that needs to work with the remote, uses #remote.
133
192
  #
134
193
  def remote_defined?(name)
135
- remote_url = execute_command("git #{gitdir_option} ls-remote --get-url #{name}")
194
+ remote_url = execute_git_command("ls-remote --get-url #{name}")
136
195
 
137
- # If the remote is not define, `git ls-remote` will return the passed value.
196
+ # If the remote is not defined, `git ls-remote` will return the passed value.
197
+ #
138
198
  remote_url != name
139
199
  end
140
200
 
@@ -142,12 +202,36 @@ module Geet
142
202
  # OPERATION APIS
143
203
  ##########################################################################
144
204
 
205
+ def checkout(branch)
206
+ execute_git_command("checkout #{branch.shellescape}")
207
+ end
208
+
209
+ # Unforced deletion.
210
+ #
211
+ def delete_branch(branch)
212
+ execute_git_command("branch --delete #{branch.shellescape}")
213
+ end
214
+
215
+ def rebase
216
+ execute_git_command("rebase")
217
+ end
218
+
145
219
  # upstream_branch: create an upstream branch.
146
220
  #
147
221
  def push(upstream_branch: nil)
148
- upstream_branch_option = "-u origin #{upstream_branch.shellescape}" if upstream_branch
222
+ upstream_branch_option = "-u #{ORIGIN_NAME} #{upstream_branch.shellescape}" if upstream_branch
223
+
224
+ execute_git_command("push #{upstream_branch_option}")
225
+ end
226
+
227
+ # Performs pruning.
228
+ #
229
+ def fetch
230
+ execute_git_command("fetch --prune")
231
+ end
149
232
 
150
- execute_command("git #{gitdir_option} push #{upstream_branch_option}")
233
+ def add_remote(name, url)
234
+ execute_git_command("remote add #{name.shellescape} #{url}")
151
235
  end
152
236
 
153
237
  ##########################################################################
@@ -156,8 +240,17 @@ module Geet
156
240
 
157
241
  private
158
242
 
159
- def gitdir_option
160
- "-C #{@location.shellescape}" if @location
243
+ # If executing a git command without calling this API, don't forget to split `gitdir_option`
244
+ # and use it!
245
+ #
246
+ # options (passed to :execute_command):
247
+ # - allow_error
248
+ # - (others)
249
+ #
250
+ def execute_git_command(command, **options)
251
+ gitdir_option = "-C #{@location.shellescape}" if @location
252
+
253
+ execute_command("git #{gitdir_option} #{command}", **options)
161
254
  end
162
255
  end
163
256
  end
data/lib/geet/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Geet
4
- VERSION = '0.3.14'
4
+ VERSION = '0.4.0'
5
5
  end
@@ -17,7 +17,7 @@ describe Geet::Services::CommentPr do
17
17
 
18
18
  it 'should add a comment to the PR for the current branch' do
19
19
  allow(git_client).to receive(:current_branch).and_return(branch)
20
- allow(git_client).to receive(:remote).with('origin').and_return("git@github.com:#{owner}/#{repository_name}")
20
+ allow(git_client).to receive(:remote).with(no_args).and_return("git@github.com:#{owner}/#{repository_name}")
21
21
 
22
22
  expected_pr_number = 3
23
23
  expected_output = <<~STR
@@ -12,7 +12,7 @@ describe Geet::Services::CreateIssue do
12
12
 
13
13
  context 'with labels, assignees and milestones' do
14
14
  it 'should create an issue' do
15
- allow(git_client).to receive(:remote).with('origin').and_return('git@github.com:donaldduck/testrepo_f')
15
+ allow(git_client).to receive(:remote).with(no_args).and_return('git@github.com:donaldduck/testrepo_f')
16
16
 
17
17
  expected_output = <<~STR
18
18
  Finding labels...
@@ -47,8 +47,8 @@ describe Geet::Services::CreateIssue do
47
47
  context 'without labels, assignees and milestones' do
48
48
  it 'should create an upstream issue' do
49
49
  allow(git_client).to receive(:current_branch).and_return('mybranch')
50
- allow(git_client).to receive(:remote).with('origin').and_return('git@github.com:donaldduck/testrepo')
51
- allow(git_client).to receive(:remote).with('upstream').and_return('git@github.com:momcorp/therepo')
50
+ allow(git_client).to receive(:remote).with(no_args).and_return('git@github.com:donaldduck/testrepo')
51
+ allow(git_client).to receive(:remote).with(name: 'upstream').and_return('git@github.com:momcorp/therepo')
52
52
 
53
53
  expected_output = <<~STR
54
54
  Creating the issue...
@@ -59,7 +59,7 @@ describe Geet::Services::CreateIssue do
59
59
 
60
60
  actual_created_issue = VCR.use_cassette('create_issue_upstream') do
61
61
  create_options = { no_open_issue: true, out: actual_output }
62
- described_class.new(upstream_repository, out: actual_output).execute('Title', 'Description', create_options)
62
+ described_class.new(upstream_repository, out: actual_output).execute('Title', 'Description', **create_options)
63
63
  end
64
64
 
65
65
  expect(actual_output.string).to eql(expected_output)
@@ -13,7 +13,7 @@ describe Geet::Services::CreateLabel do
13
13
  context 'with github.com' do
14
14
  context 'with user-specified color' do
15
15
  it 'should create a label' do
16
- allow(git_client).to receive(:remote).with('origin').and_return('git@github.com:donaldduck/testrepo')
16
+ allow(git_client).to receive(:remote).with(no_args).and_return('git@github.com:donaldduck/testrepo')
17
17
 
18
18
  expected_output = <<~STR
19
19
  Creating label...
@@ -34,8 +34,8 @@ describe Geet::Services::CreateLabel do
34
34
 
35
35
  context 'upstream' do
36
36
  it 'should create a label' do
37
- allow(git_client).to receive(:remote).with('origin').and_return('git@github.com:donaldduck/testrepo')
38
- allow(git_client).to receive(:remote).with('upstream').and_return('git@github.com:donaldduck-fr/testrepo_gh')
37
+ allow(git_client).to receive(:remote).with(no_args).and_return('git@github.com:donaldduck/testrepo')
38
+ allow(git_client).to receive(:remote).with(name: 'upstream').and_return('git@github.com:donaldduck-fr/testrepo_gh')
39
39
 
40
40
  expected_output = <<~STR
41
41
  Creating label...
@@ -58,7 +58,7 @@ describe Geet::Services::CreateLabel do
58
58
 
59
59
  context 'with auto-generated color' do
60
60
  it 'should create a label' do
61
- allow(git_client).to receive(:remote).with('origin').and_return('git@github.com:donaldduck/testrepo')
61
+ allow(git_client).to receive(:remote).with(no_args).and_return('git@github.com:donaldduck/testrepo')
62
62
 
63
63
  actual_output = StringIO.new
64
64
 
@@ -87,7 +87,7 @@ describe Geet::Services::CreateLabel do
87
87
 
88
88
  context 'with gitlab.com' do
89
89
  it 'should create a label' do
90
- allow(git_client).to receive(:remote).with('origin').and_return('git@gitlab.com:donaldduck/testproject')
90
+ allow(git_client).to receive(:remote).with(no_args).and_return('git@gitlab.com:donaldduck/testproject')
91
91
 
92
92
  expected_output = <<~STR
93
93
  Creating label...
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ require_relative '../../lib/geet/git/repository'
6
+ require_relative '../../lib/geet/services/create_milestone'
7
+
8
+ describe Geet::Services::CreateMilestone do
9
+ let(:git_client) { Geet::Utils::GitClient.new }
10
+ let(:repository) { Geet::Git::Repository.new(git_client: git_client) }
11
+ let(:upstream_repository) { Geet::Git::Repository.new(upstream: true, git_client: git_client) }
12
+
13
+ context 'with github.com' do
14
+ it 'should create a milestone' do
15
+ allow(git_client).to receive(:remote).with(no_args).and_return('git@github.com:donaldduck/testrepo_upstream')
16
+
17
+ expected_output = <<~STR
18
+ Creating milestone...
19
+ STR
20
+
21
+ actual_output = StringIO.new
22
+
23
+ actual_created_label = VCR.use_cassette('github_com/create_milestone') do
24
+ described_class.new(repository, out: actual_output).execute('my_milestone')
25
+ end
26
+
27
+ expect(actual_output.string).to eql(expected_output)
28
+
29
+ expect(actual_created_label.number).to eql(6)
30
+ expect(actual_created_label.title).to eql('my_milestone')
31
+ expect(actual_created_label.due_on).to be(nil)
32
+ end
33
+ end # context 'with github.com'
34
+ end # describe Geet::Services::CreateLabel
@@ -14,7 +14,8 @@ describe Geet::Services::CreatePr do
14
14
  context 'with labels, reviewers and milestones' do
15
15
  it 'should create a PR' do
16
16
  allow(git_client).to receive(:current_branch).and_return('mybranch')
17
- allow(git_client).to receive(:remote).with('origin').and_return('git@github.com:donaldduck/testrepo_f')
17
+ allow(git_client).to receive(:main_branch).and_return('master')
18
+ allow(git_client).to receive(:remote).with(no_args).and_return('git@github.com:donaldduck/testrepo_f')
18
19
 
19
20
  expected_output = <<~STR
20
21
  Finding labels...
@@ -50,8 +51,9 @@ describe Geet::Services::CreatePr do
50
51
  context 'on an upstream repository' do
51
52
  it 'should create an upstream PR' do
52
53
  allow(git_client).to receive(:current_branch).and_return('mybranch')
53
- allow(git_client).to receive(:remote).with('origin').and_return('git@github.com:donaldduck/testrepo_f')
54
- allow(git_client).to receive(:remote).with('upstream').and_return('git@github.com:donald-fr/testrepo_u')
54
+ allow(git_client).to receive(:main_branch).and_return('master')
55
+ allow(git_client).to receive(:remote).with(no_args).and_return('git@github.com:donaldduck/testrepo_f')
56
+ allow(git_client).to receive(:remote).with(name: 'upstream').and_return('git@github.com:donald-fr/testrepo_u')
55
57
 
56
58
  expected_output = <<~STR
57
59
  Creating PR...
@@ -80,8 +82,9 @@ describe Geet::Services::CreatePr do
80
82
  context 'without labels, reviewers and milestones' do
81
83
  it 'should create a PR' do
82
84
  allow(git_client).to receive(:current_branch).and_return('mybranch')
83
- allow(git_client).to receive(:remote).with('origin').and_return('git@github.com:donaldduck/testrepo_f')
84
- allow(git_client).to receive(:remote).with('upstream').and_return('git@github.com:donald-fr/testrepo_u')
85
+ allow(git_client).to receive(:main_branch).and_return('master')
86
+ allow(git_client).to receive(:remote).with(no_args).and_return('git@github.com:donaldduck/testrepo_f')
87
+ allow(git_client).to receive(:remote).with(name: 'upstream').and_return('git@github.com:donald-fr/testrepo_u')
85
88
 
86
89
  expected_output = <<~STR
87
90
  Creating PR...
@@ -112,7 +115,7 @@ describe Geet::Services::CreatePr do
112
115
  context 'in automated mode' do
113
116
  it 'should raise an error when the working tree is dirty' do
114
117
  allow(git_client).to receive(:working_tree_clean?).and_return(false)
115
- allow(git_client).to receive(:remote).with('origin').and_return('git@github.com:donaldduck/testrepo_f')
118
+ allow(git_client).to receive(:remote).with(no_args).and_return('git@github.com:donaldduck/testrepo_f')
116
119
 
117
120
  expected_output = <<~STR
118
121
  Error! Saved summary to /tmp/last_geet_edited_summary.md
@@ -133,10 +136,11 @@ describe Geet::Services::CreatePr do
133
136
  it 'should push to the upstream branch' do
134
137
  allow(git_client).to receive(:working_tree_clean?).and_return(true)
135
138
  allow(git_client).to receive(:current_branch).and_return('mybranch')
139
+ allow(git_client).to receive(:main_branch).and_return('master')
136
140
  expect(git_client).to receive(:upstream_branch).and_return('mybranch')
137
141
  expect(git_client).to receive(:push)
138
142
 
139
- allow(git_client).to receive(:remote).with('origin').and_return('git@github.com:donaldduck/testrepo_f')
143
+ allow(git_client).to receive(:remote).with(no_args).and_return('git@github.com:donaldduck/testrepo_f')
140
144
 
141
145
  expected_output = <<~STR
142
146
  Pushing to upstream branch...
@@ -158,10 +162,11 @@ describe Geet::Services::CreatePr do
158
162
  it "should create an upstream branch, when there isn't one (is not tracked)" do
159
163
  allow(git_client).to receive(:working_tree_clean?).and_return(true)
160
164
  allow(git_client).to receive(:current_branch).and_return('mybranch')
165
+ allow(git_client).to receive(:main_branch).and_return('master')
161
166
  expect(git_client).to receive(:upstream_branch).and_return(nil)
162
167
  expect(git_client).to receive(:push).with(upstream_branch: 'mybranch')
163
168
 
164
- allow(git_client).to receive(:remote).with('origin').and_return('git@github.com:donaldduck/testrepo_f')
169
+ allow(git_client).to receive(:remote).with(no_args).and_return('git@github.com:donaldduck/testrepo_f')
165
170
 
166
171
  expected_output = <<~STR
167
172
  Creating upstream branch "mybranch"...