55 "net/http"
66 "testing"
77
8+ "github.com/cli/go-gh/v2/pkg/api"
9+
810 "github.com/cli/cli/v2/internal/ghrepo"
911 "github.com/cli/cli/v2/pkg/httpmock"
1012 "github.com/stretchr/testify/assert"
@@ -13,61 +15,41 @@ import (
1315
1416func TestFetchRefSHA (t * testing.T ) {
1517 tests := []struct {
16- name string
17- tagName string
18- responseStatus int
19- responseBody string
20- expectedSHA string
21- errorMessage string
18+ name string
19+ tagName string
20+ responseStatus int
21+ responseBody string
22+ responseMessage string
23+ expectedSHA string
24+ errorMessage string
2225 }{
2326 {
24- name : "full semver tag " ,
27+ name : "match (200) " ,
2528 tagName : "v1.2.3" ,
2629 responseStatus : 200 ,
2730 responseBody : `{"object": {"sha": "1234567890abcdef1234567890abcdef12345678"}}` ,
2831 expectedSHA : "1234567890abcdef1234567890abcdef12345678" ,
2932 },
3033 {
31- name : "partial semver - major only" ,
32- tagName : "v1" ,
33- responseStatus : 200 ,
34- responseBody : `{"object": {"sha": "abcdef1234567890abcdef1234567890abcdef12"}}` ,
35- expectedSHA : "abcdef1234567890abcdef1234567890abcdef12" ,
36- },
37- {
38- name : "partial semver - major.minor" ,
39- tagName : "v1.2" ,
40- responseStatus : 200 ,
41- responseBody : `{"object": {"sha": "fedcba0987654321fedcba0987654321fedcba09"}}` ,
42- expectedSHA : "fedcba0987654321fedcba0987654321fedcba09" ,
43- },
44- {
45- name : "prerelease tag" ,
46- tagName : "v1.2.3-alpha.1" ,
47- responseStatus : 200 ,
48- responseBody : `{"object": {"sha": "9876543210fedcba9876543210fedcba98765432"}}` ,
49- expectedSHA : "9876543210fedcba9876543210fedcba98765432" ,
50- },
51- {
52- name : "tag not found" ,
53- tagName : "v99.99.99" ,
54- responseStatus : 404 ,
55- responseBody : `` ,
56- errorMessage : "release not found" ,
34+ name : "non-match (404)" ,
35+ tagName : "v1.2.3" ,
36+ responseStatus : 404 ,
37+ responseMessage : `Not found` ,
38+ errorMessage : "release not found" ,
5739 },
5840 {
59- name : "empty response body with 200 status " ,
60- tagName : "v1.0.0 " ,
61- responseStatus : 200 ,
62- responseBody : `{} ` ,
63- errorMessage : "release not found " ,
41+ name : "server error (500) " ,
42+ tagName : "v1.2.3 " ,
43+ responseStatus : 500 ,
44+ responseMessage : `arbitrary error" ` ,
45+ errorMessage : "HTTP 500: arbitrary error \" (https://api.github.com/repos/owner/repo/git/ref/tags/v1.2.3) " ,
6446 },
6547 {
66- name : "malformed JSON response " ,
67- tagName : "v1.0.0 " ,
48+ name : "malformed JSON with 200 " ,
49+ tagName : "v1.2.3 " ,
6850 responseStatus : 200 ,
6951 responseBody : `{"object": {"sha":` ,
70- errorMessage : "failed to parse Git ref response: unexpected EOF" ,
52+ errorMessage : "failed to parse ref response: unexpected EOF" ,
7153 },
7254 }
7355
@@ -80,10 +62,19 @@ func TestFetchRefSHA(t *testing.T) {
8062 require .NoError (t , err )
8163
8264 path := "repos/owner/repo/git/ref/tags/" + tt .tagName
83- if tt .responseStatus == 404 {
84- fakeHTTP .Register (httpmock .REST ("GET" , path ), httpmock .StatusStringResponse (404 , "Not Found" ))
65+ if tt .responseStatus == 404 || tt .responseStatus == 500 {
66+ fakeHTTP .Register (
67+ httpmock .REST ("GET" , path ),
68+ httpmock .JSONErrorResponse (tt .responseStatus , api.HTTPError {
69+ StatusCode : tt .responseStatus ,
70+ Message : tt .responseMessage ,
71+ }),
72+ )
8573 } else {
86- fakeHTTP .Register (httpmock .REST ("GET" , path ), httpmock .StringResponse (tt .responseBody ))
74+ fakeHTTP .Register (
75+ httpmock .REST ("GET" , path ),
76+ httpmock .StatusStringResponse (tt .responseStatus , tt .responseBody ),
77+ )
8778 }
8879
8980 httpClient := & http.Client {Transport : fakeHTTP }
@@ -92,8 +83,8 @@ func TestFetchRefSHA(t *testing.T) {
9283 sha , err := FetchRefSHA (ctx , httpClient , repo , tt .tagName )
9384
9485 if tt .errorMessage != "" {
95- require . Error (t , err )
96- assert .EqualError (t , err , tt . errorMessage )
86+ assert . Contains (t , err . Error (), tt . errorMessage )
87+ assert .Empty (t , sha )
9788 } else {
9889 require .NoError (t , err )
9990 assert .Equal (t , tt .expectedSHA , sha )
0 commit comments