go-forge/packages_test.go

144 lines
4 KiB
Go
Raw Permalink Normal View History

package forge
import (
"context"
json "github.com/goccy/go-json"
"net/http"
"net/http/httptest"
"testing"
"dappco.re/go/core/forge/types"
)
func TestPackageService_List_Good(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
t.Errorf("expected GET, got %s", r.Method)
}
if r.URL.Path != "/api/v1/packages/core" {
t.Errorf("wrong path: %s", r.URL.Path)
}
w.Header().Set("X-Total-Count", "2")
json.NewEncoder(w).Encode([]types.Package{
{ID: 1, Name: "go-forge", Type: "generic", Version: "0.1.0"},
{ID: 2, Name: "go-forge", Type: "generic", Version: "0.2.0"},
})
}))
defer srv.Close()
f := NewForge(srv.URL, "tok")
pkgs, err := f.Packages.List(context.Background(), "core")
if err != nil {
t.Fatal(err)
}
if len(pkgs) != 2 {
t.Fatalf("got %d packages, want 2", len(pkgs))
}
if pkgs[0].Name != "go-forge" {
t.Errorf("got name=%q, want %q", pkgs[0].Name, "go-forge")
}
if pkgs[1].Version != "0.2.0" {
t.Errorf("got version=%q, want %q", pkgs[1].Version, "0.2.0")
}
}
func TestPackageService_Get_Good(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
t.Errorf("expected GET, got %s", r.Method)
}
if r.URL.Path != "/api/v1/packages/core/generic/go-forge/0.1.0" {
t.Errorf("wrong path: %s", r.URL.Path)
}
json.NewEncoder(w).Encode(types.Package{
ID: 1,
Name: "go-forge",
Type: "generic",
Version: "0.1.0",
})
}))
defer srv.Close()
f := NewForge(srv.URL, "tok")
pkg, err := f.Packages.Get(context.Background(), "core", "generic", "go-forge", "0.1.0")
if err != nil {
t.Fatal(err)
}
if pkg.ID != 1 {
t.Errorf("got id=%d, want 1", pkg.ID)
}
if pkg.Name != "go-forge" {
t.Errorf("got name=%q, want %q", pkg.Name, "go-forge")
}
if pkg.Version != "0.1.0" {
t.Errorf("got version=%q, want %q", pkg.Version, "0.1.0")
}
}
func TestPackageService_Delete_Good(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodDelete {
t.Errorf("expected DELETE, got %s", r.Method)
}
if r.URL.Path != "/api/v1/packages/core/generic/go-forge/0.1.0" {
t.Errorf("wrong path: %s", r.URL.Path)
}
w.WriteHeader(http.StatusNoContent)
}))
defer srv.Close()
f := NewForge(srv.URL, "tok")
err := f.Packages.Delete(context.Background(), "core", "generic", "go-forge", "0.1.0")
if err != nil {
t.Fatal(err)
}
}
func TestPackageService_ListFiles_Good(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
t.Errorf("expected GET, got %s", r.Method)
}
if r.URL.Path != "/api/v1/packages/core/generic/go-forge/0.1.0/files" {
t.Errorf("wrong path: %s", r.URL.Path)
}
w.Header().Set("X-Total-Count", "1")
json.NewEncoder(w).Encode([]types.PackageFile{
{ID: 1, Name: "go-forge-0.1.0.tar.gz", Size: 1024, HashMD5: "abc123"},
})
}))
defer srv.Close()
f := NewForge(srv.URL, "tok")
files, err := f.Packages.ListFiles(context.Background(), "core", "generic", "go-forge", "0.1.0")
if err != nil {
t.Fatal(err)
}
if len(files) != 1 {
t.Fatalf("got %d files, want 1", len(files))
}
if files[0].Name != "go-forge-0.1.0.tar.gz" {
t.Errorf("got name=%q, want %q", files[0].Name, "go-forge-0.1.0.tar.gz")
}
if files[0].Size != 1024 {
t.Errorf("got size=%d, want 1024", files[0].Size)
}
}
func TestPackageService_NotFound_Bad(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
json.NewEncoder(w).Encode(map[string]string{"message": "package not found"})
}))
defer srv.Close()
f := NewForge(srv.URL, "tok")
_, err := f.Packages.Get(context.Background(), "core", "generic", "nonexistent", "0.0.0")
if err == nil {
t.Fatal("expected error, got nil")
}
if !IsNotFound(err) {
t.Errorf("expected not-found error, got %v", err)
}
}