@@ -4,10 +4,15 @@ import * as auth from '../../../src/utils/auth'
44import * as dir from '../../../src/utils/dir'
55import simpleGit from 'simple-git'
66
7+ const getRefSpy = jest . fn ( )
8+
79const fakeOctokitData = {
810 accessToken : 'fake-token' ,
911 octokit : {
1012 rest : {
13+ git : {
14+ getRef : getRefSpy ,
15+ } ,
1116 repos : {
1217 get : jest . fn ( ) . mockResolvedValue ( {
1318 data : {
@@ -60,6 +65,22 @@ describe('Git controller', () => {
6065 privateOrg : 'github-test' ,
6166 } )
6267
68+ getRefSpy . mockResolvedValueOnce ( {
69+ data : {
70+ object : {
71+ sha : 'fork-sha' ,
72+ } ,
73+ } ,
74+ } )
75+
76+ getRefSpy . mockResolvedValueOnce ( {
77+ data : {
78+ object : {
79+ sha : 'mirror-sha' ,
80+ } ,
81+ } ,
82+ } )
83+
6384 jest
6485 . spyOn ( auth , 'generateAuthUrl' )
6586 . mockReturnValueOnce (
@@ -104,6 +125,22 @@ describe('Git controller', () => {
104125 privateOrg : 'github-test' ,
105126 } )
106127
128+ getRefSpy . mockResolvedValueOnce ( {
129+ data : {
130+ object : {
131+ sha : 'fork-sha' ,
132+ } ,
133+ } ,
134+ } )
135+
136+ getRefSpy . mockResolvedValueOnce ( {
137+ data : {
138+ object : {
139+ sha : 'mirror-sha' ,
140+ } ,
141+ } ,
142+ } )
143+
107144 jest
108145 . spyOn ( auth , 'generateAuthUrl' )
109146 . mockReturnValueOnce (
@@ -138,4 +175,46 @@ describe('Git controller', () => {
138175 expect ( gitMock . push ) . toHaveBeenCalledTimes ( 1 )
139176 expect ( gitMock . push ) . toHaveBeenCalledWith ( [ '--force' ] )
140177 } )
178+
179+ it ( 'should return success early if the fork and mirror are already in sync' , async ( ) => {
180+ jest . spyOn ( config , 'getConfig' ) . mockResolvedValue ( {
181+ publicOrg : 'github' ,
182+ privateOrg : 'github-test' ,
183+ } )
184+
185+ getRefSpy . mockResolvedValueOnce ( {
186+ data : {
187+ object : {
188+ sha : 'sha' ,
189+ } ,
190+ } ,
191+ } )
192+
193+ getRefSpy . mockResolvedValueOnce ( {
194+ data : {
195+ object : {
196+ sha : 'sha' ,
197+ } ,
198+ } ,
199+ } )
200+
201+ const result = await syncReposHandler ( {
202+ input : {
203+ accessToken : '123' ,
204+ orgId : 'test-org' ,
205+ destinationTo : 'mirror' ,
206+ forkOwner : 'github' ,
207+ forkName : 'fork-repo' ,
208+ mirrorOwner : 'github-test' ,
209+ mirrorName : 'mirror-repo' ,
210+ mirrorBranchName : 'mirror-branch' ,
211+ forkBranchName : 'fork-branch' ,
212+ } ,
213+ } )
214+
215+ expect ( result ) . toEqual ( { success : true } )
216+ expect ( gitMock . checkoutBranch ) . toHaveBeenCalledTimes ( 0 )
217+ expect ( gitMock . rebase ) . toHaveBeenCalledTimes ( 0 )
218+ expect ( gitMock . push ) . toHaveBeenCalledTimes ( 0 )
219+ } )
141220} )
0 commit comments