@@ -162,61 +162,61 @@ public class TheGetPullRequestMergeBaseMethod : TestBaseClass
162162 [ Fact ]
163163 public async Task LocalBaseHeadAndMergeBase_DontFetch ( )
164164 {
165- var baseUrl = new UriString ( "https://github.com/owner/repo" ) ;
166- var headUrl = new UriString ( "https://github.com/owner/repo" ) ;
165+ var targetCloneUrl = new UriString ( "https://github.com/owner/repo" ) ;
167166 var baseSha = "baseSha" ;
168167 var headSha = "headSha" ;
169168 var expectMergeBaseSha = "mergeBaseSha" ;
170169 var baseRef = "master" ;
171- var headRef = "headRef" ;
170+ var pullNumber = 0 ;
172171 var repo = MockRepo ( baseSha , headSha , expectMergeBaseSha ) ;
173172 var gitClient = new GitClient ( Substitute . For < IGitHubCredentialProvider > ( ) ) ;
174173
175- var mergeBaseSha = await gitClient . GetPullRequestMergeBase ( repo , baseUrl , headUrl , baseSha , headSha , baseRef , headRef ) ;
174+ var mergeBaseSha = await gitClient . GetPullRequestMergeBase ( repo , targetCloneUrl , baseSha , headSha , baseRef , pullNumber ) ;
176175
177176 repo . Network . DidNotReceiveWithAnyArgs ( ) . Fetch ( null as Remote , null , null as FetchOptions ) ;
178177 Assert . Equal ( expectMergeBaseSha , mergeBaseSha ) ;
179178 }
180179
181180 [ Theory ]
182- [ InlineData ( "https://github.com/owner/repo" , "https://github.com/owner/repo" , " baseSha", "headSha" , "mergeBaseSha" , 0 ) ]
183- [ InlineData ( "https://github.com/owner/repo" , "https://github.com/owner/repo" , null , "headSha" , "mergeBaseSha" , 1 ) ]
184- [ InlineData ( "https://github.com/owner/repo" , "https://github.com/owner/repo" , " baseSha", null , "mergeBaseSha" , 1 ) ]
185- [ InlineData ( "https://github.com/owner/repo" , "https://github.com/owner/repo" , " baseSha", "headSha" , null , 0 ) ]
186- public async Task WhenToFetch ( string baseUrl , string headUrl , string baseSha , string headSha , string mergeBaseSha , int receivedFetch )
181+ [ InlineData ( "https://github.com/owner/repo" , "baseSha" , "headSha" , "mergeBaseSha" , 0 ) ]
182+ [ InlineData ( "https://github.com/owner/repo" , null , "headSha" , "mergeBaseSha" , 1 ) ]
183+ [ InlineData ( "https://github.com/owner/repo" , "baseSha" , null , "mergeBaseSha" , 1 ) ]
184+ [ InlineData ( "https://github.com/owner/repo" , "baseSha" , "headSha" , null , 0 ) ]
185+ public async Task WhenToFetch ( string targetCloneUrl , string baseSha , string headSha , string mergeBaseSha , int receivedFetch )
187186 {
188- var baseUri = new UriString ( baseUrl ) ;
189- var headUri = new UriString ( headUrl ) ;
187+ var targetCloneUri = new UriString ( "https://github.com/owner/repo" ) ;
190188 var baseRef = "master" ;
191- var headRef = "headRef" ;
189+ var pullNumber = 0 ;
192190 var repo = MockRepo ( baseSha , headSha , mergeBaseSha ) ;
193191 var remote = Substitute . For < Remote > ( ) ;
194192 repo . Network . Remotes . Add ( null , null ) . ReturnsForAnyArgs ( remote ) ;
195193 var gitClient = new GitClient ( Substitute . For < IGitHubCredentialProvider > ( ) ) ;
196194
197195 try
198196 {
199- await gitClient . GetPullRequestMergeBase ( repo , baseUri , headUri , baseSha , headSha , baseRef , headRef ) ;
197+ await gitClient . GetPullRequestMergeBase ( repo , targetCloneUri , baseSha , headSha , baseRef , pullNumber ) ;
200198 }
201199 catch ( NotFoundException ) { /* We're interested in calls to Fetch even if it throws */ }
202200
203201 repo . Network . Received ( receivedFetch ) . Fetch ( Arg . Any < Remote > ( ) , Arg . Any < string [ ] > ( ) , Arg . Any < FetchOptions > ( ) ) ;
204202 }
205203
206204 [ Theory ]
207- [ InlineData ( "baseSha" , null , "mergeBaseSha" , "baseRef" , "headRef" , "headRef" ) ]
208- [ InlineData ( null , "headSha" , "mergeBaseSha" , "baseRef" , "headRef" , "baseRef" ) ]
209- public async Task WhatToFetch ( string baseSha , string headSha , string mergeBaseSha , string baseRef , string headRef ,
205+ [ InlineData ( "baseSha" , null , "mergeBaseSha" , "baseRef" , 777 , "refs/pull/777/head" ) ]
206+ [ InlineData ( null , "headSha" , "mergeBaseSha" , "baseRef" , 777 , "baseRef" ) ]
207+
208+ // PR base might not exist, so we must fetch `refs/pull/<PR>/head` first.
209+ [ InlineData ( null , null , "mergeBaseSha" , "baseRef" , 777 , "refs/pull/777/head" ) ]
210+ public async Task WhatToFetch ( string baseSha , string headSha , string mergeBaseSha , string baseRef , int pullNumber ,
210211 string expectRefSpec )
211212 {
212213 var repo = MockRepo ( baseSha , headSha , mergeBaseSha ) ;
213- var baseUrl = new UriString ( "https://github.com/owner/repo" ) ;
214- var headUrl = new UriString ( "https://github.com/owner/repo" ) ;
214+ var targetCloneUri = new UriString ( "https://github.com/owner/repo" ) ;
215215 var gitClient = new GitClient ( Substitute . For < IGitHubCredentialProvider > ( ) ) ;
216216
217217 try
218218 {
219- await gitClient . GetPullRequestMergeBase ( repo , baseUrl , headUrl , baseSha , headSha , baseRef , headRef ) ;
219+ await gitClient . GetPullRequestMergeBase ( repo , targetCloneUri , baseSha , headSha , baseRef , pullNumber ) ;
220220 }
221221 catch ( NotFoundException ) { /* We're interested in calls to Fetch even if it throws */ }
222222
@@ -233,12 +233,12 @@ static IRepository MockRepo(string baseSha, string headSha, string mergeBaseSha)
233233
234234 if ( baseSha != null )
235235 {
236- repo . Lookup < Commit > ( baseSha ) . Returns ( baseCommit ) ;
236+ repo . Lookup < Commit > ( baseSha ) . Returns ( baseSha != null ? baseCommit : null ) ;
237237 }
238238
239239 if ( headSha != null )
240240 {
241- repo . Lookup < Commit > ( headSha ) . Returns ( headCommit ) ;
241+ repo . Lookup < Commit > ( headSha ) . Returns ( headSha != null ? headCommit : null ) ;
242242 }
243243
244244 repo . ObjectDatabase . FindMergeBase ( baseCommit , headCommit ) . Returns ( mergeBaseCommit ) ;
0 commit comments