feat(business-line): auto bind Wayne namespace on create

This commit is contained in:
mac
2026-07-22 14:59:54 +08:00
parent 7f6f6fa41e
commit d150d0f0dd
3 changed files with 214 additions and 1 deletions
@@ -81,6 +81,75 @@ func TestParseWayneUsersSupportsNativePageList(t *testing.T) {
}
}
func TestWayneRoleBindingServiceEnsureNamespaceUsesExisting(t *testing.T) {
var got []string
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
got = append(got, r.Method+" "+r.URL.RequestURI())
switch r.URL.RequestURI() {
case "/login/db":
_, _ = w.Write([]byte(`{"data":{"token":"` + testJWT(time.Now().Add(time.Hour)) + `"}}`))
case "/api/v1/namespaces?name=kodo&pageNo=1&pageSize=500":
assertBearer(t, r)
_, _ = w.Write([]byte(`{"data":{"list":[{"id":12,"name":"kodo","kubeNamespace":"kodo-prod"}]}}`))
default:
t.Fatalf("unexpected request %s %s", r.Method, r.URL.RequestURI())
}
}))
defer server.Close()
svc := NewWayneRoleBindingService(testWayneConfig(server.URL), nil)
namespace, err := svc.EnsureNamespace(context.Background(), "kodo")
if err != nil {
t.Fatalf("EnsureNamespace() error = %v", err)
}
if namespace.ID != 12 || namespace.Name != "kodo" || namespace.KubeNamespace != "kodo-prod" {
t.Fatalf("namespace = %#v", namespace)
}
if strings.Join(got, "\n") != strings.Join([]string{
"POST /login/db",
"GET /api/v1/namespaces?name=kodo&pageNo=1&pageSize=500",
}, "\n") {
t.Fatalf("requests:\n%s", strings.Join(got, "\n"))
}
}
func TestWayneRoleBindingServiceEnsureNamespaceCreatesMissing(t *testing.T) {
var createBody WayneNamespace
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch r.URL.RequestURI() {
case "/login/db":
_, _ = w.Write([]byte(`{"data":{"token":"` + testJWT(time.Now().Add(time.Hour)) + `"}}`))
case "/api/v1/namespaces?name=las&pageNo=1&pageSize=500":
assertBearer(t, r)
_, _ = w.Write([]byte(`{"data":{"list":[]}}`))
case "/api/v1/namespaces":
if r.Method != http.MethodPost {
t.Fatalf("method = %s, want POST", r.Method)
}
assertBearer(t, r)
if err := json.Unmarshal(readTestBody(t, r), &createBody); err != nil {
t.Fatalf("invalid create body: %v", err)
}
_, _ = w.Write([]byte(`{"data":{"id":21,"name":"las","kubeNamespace":"las"}}`))
default:
t.Fatalf("unexpected request %s %s", r.Method, r.URL.RequestURI())
}
}))
defer server.Close()
svc := NewWayneRoleBindingService(testWayneConfig(server.URL), nil)
namespace, err := svc.EnsureNamespace(context.Background(), "las")
if err != nil {
t.Fatalf("EnsureNamespace() error = %v", err)
}
if namespace.ID != 21 || namespace.Name != "las" || namespace.KubeNamespace != "las" {
t.Fatalf("namespace = %#v", namespace)
}
if createBody.Name != "las" || createBody.KubeNamespace != "las" || createBody.MetaData != "{}" {
t.Fatalf("create body = %#v", createBody)
}
}
func TestWayneRoleBindingServiceCreateAndDeleteNativeBindings(t *testing.T) {
tests := []struct {
name string