(t *testing.T)
| 168 | } |
| 169 | |
| 170 | func Test_releaseFetcher_LatestReleaseUsingAPI(t *testing.T) { |
| 171 | tests := []struct { |
| 172 | name string |
| 173 | mockServer mockServer |
| 174 | wantTag string |
| 175 | wantURL string |
| 176 | wantErr bool |
| 177 | }{ |
| 178 | { |
| 179 | name: "Success", |
| 180 | mockServer: mockServer{ |
| 181 | statusCode: http.StatusOK, |
| 182 | response: `{"tag_name": "v1.0.0", "html_url": "https://github.com/owner/repo/releases/tag/v1.0.0"}`, |
| 183 | }, |
| 184 | wantTag: "v1.0.0", |
| 185 | wantURL: "https://github.com/owner/repo/releases/tag/v1.0.0", |
| 186 | }, |
| 187 | { |
| 188 | name: "RequestError", |
| 189 | mockServer: mockServer{ |
| 190 | statusCode: http.StatusInternalServerError, |
| 191 | response: "", |
| 192 | }, |
| 193 | wantErr: true, |
| 194 | }, |
| 195 | { |
| 196 | name: "DecodeError", |
| 197 | mockServer: mockServer{ |
| 198 | statusCode: http.StatusOK, |
| 199 | response: `{"invalid_json":}`, |
| 200 | }, |
| 201 | wantErr: true, |
| 202 | }, |
| 203 | { |
| 204 | name: "NonOKStatusCode", |
| 205 | mockServer: mockServer{ |
| 206 | statusCode: http.StatusNotFound, |
| 207 | response: "", |
| 208 | }, |
| 209 | wantErr: true, |
| 210 | }, |
| 211 | } |
| 212 | |
| 213 | for _, test := range tests { |
| 214 | t.Run(test.name, func(t *testing.T) { |
| 215 | server := test.mockServer.start() |
| 216 | defer server.Close() |
| 217 | |
| 218 | f := releaseFetcher{ |
| 219 | apiEndpoint: server.URL, |
| 220 | } |
| 221 | tag, url, err := f.LatestReleaseUsingAPI("owner/repo") |
| 222 | |
| 223 | if test.wantErr { |
| 224 | assert.Error(t, err, "Expected an error") |
| 225 | } else { |
| 226 | assert.NoError(t, err, "Unexpected error") |
| 227 | } |
nothing calls this directly
no test coverage detected