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  }