d66760b246
PLATFORM_ARCHITECTURE.md §5c schema as one initial migration: 6 tables + 4 enums + updated_at triggers. cmd/migrate binary (golang-migrate library, embedded SQL). testcontainers round-trip + seed + slug-constraint tests. Refs: M4.1
74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
package server
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io"
|
|
"log/slog"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"testing"
|
|
|
|
"gitea.meghsakha.com/platform/tenant-registry/internal/config"
|
|
)
|
|
|
|
func newTestServer(t *testing.T) *httptest.Server {
|
|
t.Helper()
|
|
cfg := &config.Config{Env: "dev", Addr: ":0"}
|
|
h := NewRouter(cfg, slog.New(slog.NewTextHandler(os.Stderr, nil)))
|
|
return httptest.NewServer(h)
|
|
}
|
|
|
|
func TestHealthz(t *testing.T) {
|
|
srv := newTestServer(t)
|
|
defer srv.Close()
|
|
|
|
resp, err := http.Get(srv.URL + "/healthz")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer func() { _ = resp.Body.Close() }()
|
|
if resp.StatusCode != http.StatusOK {
|
|
t.Fatalf("got %d, want 200", resp.StatusCode)
|
|
}
|
|
}
|
|
|
|
func TestTenantBySlug_acme(t *testing.T) {
|
|
srv := newTestServer(t)
|
|
defer srv.Close()
|
|
|
|
resp, err := http.Get(srv.URL + "/v1/tenants/by-slug/acme")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer func() { _ = resp.Body.Close() }()
|
|
if resp.StatusCode != http.StatusOK {
|
|
body, _ := io.ReadAll(resp.Body)
|
|
t.Fatalf("got %d, want 200; body=%s", resp.StatusCode, body)
|
|
}
|
|
var payload map[string]any
|
|
if err := json.NewDecoder(resp.Body).Decode(&payload); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if payload["slug"] != "acme" {
|
|
t.Fatalf("expected slug=acme, got %v", payload["slug"])
|
|
}
|
|
if payload["status"] != "active" {
|
|
t.Fatalf("expected status=active, got %v", payload["status"])
|
|
}
|
|
}
|
|
|
|
func TestTenantBySlug_unknown(t *testing.T) {
|
|
srv := newTestServer(t)
|
|
defer srv.Close()
|
|
|
|
resp, err := http.Get(srv.URL + "/v1/tenants/by-slug/nope")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer func() { _ = resp.Body.Close() }()
|
|
if resp.StatusCode != http.StatusNotFound {
|
|
t.Fatalf("got %d, want 404", resp.StatusCode)
|
|
}
|
|
}
|