@@ -204,7 +204,101 @@ func TestManager_Upgrade_NoExtensions(t *testing.T) {
204204}
205205
206206func TestManager_Upgrade_BinaryExtension (t * testing.T ) {
207- // TODO
207+ tempDir := t .TempDir ()
208+
209+ installReg := httpmock.Registry {}
210+ defer installReg .Verify (t )
211+ installClient := http.Client {Transport : & installReg }
212+
213+ io , _ , _ , _ := iostreams .Test ()
214+ m := newTestManager (tempDir , & installClient , io )
215+ repo := ghrepo .NewWithHost ("owner" , "gh-bin-ext" , "example.com" )
216+
217+ installReg .Register (
218+ httpmock .REST ("GET" , "api/v3/repos/owner/gh-bin-ext/releases/latest" ),
219+ httpmock .JSONResponse (
220+ release {
221+ Assets : []releaseAsset {
222+ {
223+ Name : "gh-bin-ext-windows-amd64" ,
224+ APIURL : "https://example.com/release/cool" ,
225+ },
226+ },
227+ }))
228+ installReg .Register (
229+ httpmock .REST ("GET" , "api/v3/repos/owner/gh-bin-ext/releases/latest" ),
230+ httpmock .JSONResponse (
231+ release {
232+ Tag : "v1.0.1" ,
233+ Assets : []releaseAsset {
234+ {
235+ Name : "gh-bin-ext-windows-amd64" ,
236+ APIURL : "https://example.com/release/cool" ,
237+ },
238+ },
239+ }))
240+ installReg .Register (
241+ httpmock .REST ("GET" , "release/cool" ),
242+ httpmock .StringResponse ("FAKE BINARY" ))
243+
244+ err := m .Install (repo )
245+ assert .NoError (t , err )
246+
247+ upgradeReg := httpmock.Registry {}
248+ defer upgradeReg .Verify (t )
249+ upgradeClient := http.Client {Transport : & upgradeReg }
250+
251+ um := newTestManager (tempDir , & upgradeClient , io )
252+ upgradeReg .Register (
253+ httpmock .REST ("GET" , "api/v3/repos/owner/gh-bin-ext/releases/latest" ),
254+ httpmock .JSONResponse (
255+ release {
256+ Tag : "v1.0.2" ,
257+ Assets : []releaseAsset {
258+ {
259+ Name : "gh-bin-ext-windows-amd64" ,
260+ APIURL : "https://example.com/release/cool2" ,
261+ },
262+ },
263+ }))
264+ upgradeReg .Register (
265+ httpmock .REST ("GET" , "api/v3/repos/owner/gh-bin-ext/releases/latest" ),
266+ httpmock .JSONResponse (
267+ release {
268+ Tag : "v1.0.2" ,
269+ Assets : []releaseAsset {
270+ {
271+ Name : "gh-bin-ext-windows-amd64" ,
272+ APIURL : "https://example.com/release/cool2" ,
273+ },
274+ },
275+ }))
276+ upgradeReg .Register (
277+ httpmock .REST ("GET" , "release/cool2" ),
278+ httpmock .StringResponse ("FAKE UPGRADED BINARY" ))
279+
280+ err = um .Upgrade ("bin-ext" , false )
281+ assert .NoError (t , err )
282+
283+ manifest , err := os .ReadFile (filepath .Join (tempDir , "extensions/gh-bin-ext" , manifestName ))
284+ assert .NoError (t , err )
285+
286+ var bm binManifest
287+ err = yaml .Unmarshal (manifest , & bm )
288+ assert .NoError (t , err )
289+
290+ assert .Equal (t , binManifest {
291+ Name : "gh-bin-ext" ,
292+ Owner : "owner" ,
293+ Host : "example.com" ,
294+ Tag : "v1.0.2" ,
295+ Path : filepath .Join (tempDir , "extensions/gh-bin-ext/gh-bin-ext" ),
296+ }, bm )
297+
298+ fakeBin , err := os .ReadFile (filepath .Join (tempDir , "extensions/gh-bin-ext/gh-bin-ext" ))
299+ assert .NoError (t , err )
300+
301+ assert .Equal (t , "FAKE UPGRADED BINARY" , string (fakeBin ))
208302}
209303
210304func TestManager_Install_git (t * testing.T ) {
0 commit comments