github.com/defang-io/defang/src@v0.0.0-20240505002154-bdf411911834/cmd/cli/command/version_test.go (about) 1 package command 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 "net/http/httptest" 8 "testing" 9 ) 10 11 func TestGetCurrentVersion(t *testing.T) { 12 RootCmd.Version = "development" 13 dev := GetCurrentVersion() 14 if dev != "development" { 15 t.Errorf("GetCurrentVersion() = %v; want development", dev) 16 } 17 18 RootCmd.Version = "1.0.0" // as set by GoReleaser 19 v := GetCurrentVersion() 20 if v != "v1.0.0" { 21 t.Errorf("GetCurrentVersion() = %v; want v1.0.0", v) 22 } 23 } 24 25 type mockRoundTripper struct { 26 method string 27 url string 28 resp *http.Response 29 } 30 31 func (rt *mockRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { 32 if rt.method != "" && rt.method != req.Method { 33 return nil, fmt.Errorf("expected method %q; got %q", rt.method, req.Method) 34 } 35 if rt.url != "" && rt.url != req.URL.String() { 36 return nil, fmt.Errorf("expected URL %q; got %q", rt.url, req.URL.String()) 37 } 38 return rt.resp, nil 39 } 40 41 func TestGetLatestVersion(t *testing.T) { 42 ctx := context.Background() 43 44 const version = "v1.2.3" 45 rec := httptest.NewRecorder() 46 rec.Header().Add("Content-Type", "application/json") 47 rec.WriteString(fmt.Sprintf(`{"tag_name":"%v"}`, version)) 48 49 httpClient = &http.Client{Transport: &mockRoundTripper{ 50 method: http.MethodGet, 51 url: "https://api.github.com/repos/defang-io/defang/releases/latest", 52 resp: rec.Result(), 53 }} 54 55 v, err := GetLatestVersion(ctx) 56 if err != nil { 57 t.Fatalf("GetLatestVersion() error = %v; want nil", err) 58 } 59 if v == "" { 60 t.Fatalf("GetLatestVersion() = %v; want non-empty", v) 61 } 62 if v != version { 63 t.Errorf("GetLatestVersion() = %v; want %v", v, version) 64 } 65 }