package api_test import ( "net/http" "testing" "atlas9.dev/c/core/assert" "atlas9.dev/c/demo/api" "atlas9.dev/c/demo/lib/domains" "atlas9.dev/c/demo/tasks" ) func createDomain(t *testing.T, s *testServer, name string) domains.Domain { t.Helper() var res api.Domain_CreateRes httpRes := s.call(t, "/Domain_Create", api.Domain_CreateReq{ Tenant: defaultTenant, Domain: name, }, &res) assert.Eq(t, httpRes.StatusCode, http.StatusOK) return res.Domain } func TestDomainsApi_Delete(t *testing.T) { s := startServer(t) dom := createDomain(t, s, "example.com") keep := createDomain(t, s, "keep.example.org") var res api.Domain_DeleteRes httpRes := s.call(t, "/Domain_Delete", api.Domain_DeleteReq{ Tenant: defaultTenant, ID: dom.ID, }, &res) assert.Eq(t, httpRes.StatusCode, http.StatusOK) // The deleted domain is gone; the other remains. var list api.Domain_ListRes httpRes = s.call(t, "/Domain_List", api.Domain_ListReq{Tenant: defaultTenant}, &list) assert.Eq(t, httpRes.StatusCode, http.StatusOK) assert.Eq(t, len(list.Page.Items), 1) assert.Eq(t, list.Page.Items[0].ID, keep.ID) // Deleting again is a 404, not a silent no-op. httpRes = s.call(t, "/Domain_Delete", api.Domain_DeleteReq{ Tenant: defaultTenant, ID: dom.ID, }, nil) assert.Eq(t, httpRes.StatusCode, http.StatusNotFound) } // Deleting a domain leaves its pending verification task behind; verifying // a deleted domain is an exceptional circumstance that retrying cannot fix, // so the task envelope must report a permanent failure — not a retry, and // not success. func TestDomainsApi_VerifyAfterDelete(t *testing.T) { s := startServer(t) dom := createDomain(t, s, "example.com") httpRes := s.call(t, "/Domain_Delete", api.Domain_DeleteReq{ Tenant: defaultTenant, ID: dom.ID, }, nil) assert.Eq(t, httpRes.StatusCode, http.StatusOK) var res api.Domain_VerifyRes httpRes = s.call(t, "/Domain_Verify", api.Domain_VerifyReq{ Tenant: defaultTenant, ID: dom.ID, }, &res) assert.Eq(t, httpRes.StatusCode, http.StatusOK) assert.Eq(t, res.Verified, false) assert.Eq(t, res.Task.Outcome, tasks.OutcomeFailed) assert.Eq(t, res.Task.Error, "domain deleted before verification") }