package api_test import ( "net/http" "testing" "atlas9.dev/c/core" "atlas9.dev/c/core/assert" "atlas9.dev/c/core/iam" "atlas9.dev/c/demo/api" ) func TestTenantMembersApi_Get(t *testing.T) { s := startServer(t) var tenant api.Tenants_CreateRes s.call(t, "/Tenants.Create", api.Tenants_CreateReq{Tenant: iam.Tenant{Name: "Acme"}}, &tenant) userID := s.seedUserInTenant(t, "member@test", "pw", tenant.Tenant.ID) var got iam.TenantMember s.call(t, "/TenantMembers.Get", api.TenantMembers_GetReq{ Tenant: tenant.Tenant.ID, UserID: userID, }, &got) assert.Eq(t, got.Tenant, tenant.Tenant.ID) assert.Eq(t, got.UserID, userID) assert.Eq(t, got.Owner, false) } func TestTenantMembersApi_Remove(t *testing.T) { s := startServer(t) var tenant api.Tenants_CreateRes s.call(t, "/Tenants.Create", api.Tenants_CreateReq{Tenant: iam.Tenant{Name: "Acme"}}, &tenant) userID := s.seedUserInTenant(t, "member@test", "pw", tenant.Tenant.ID) s.call(t, "/TenantMembers.Remove", api.TenantMembers_RemoveReq{ Tenant: tenant.Tenant.ID, UserID: userID, }, nil) var body api.ErrorResponse res := s.call(t, "/TenantMembers.Get", api.TenantMembers_GetReq{ Tenant: tenant.Tenant.ID, UserID: userID, }, &body) assert.Eq(t, res.StatusCode, http.StatusNotFound) } func TestTenantMembersApi_GetNotFound(t *testing.T) { s := startServer(t) var tenant api.Tenants_CreateRes s.call(t, "/Tenants.Create", api.Tenants_CreateReq{Tenant: iam.Tenant{Name: "Acme"}}, &tenant) var body api.ErrorResponse res := s.call(t, "/TenantMembers.Get", api.TenantMembers_GetReq{ Tenant: tenant.Tenant.ID, UserID: core.NewID("t"), }, &body) assert.Eq(t, res.StatusCode, http.StatusNotFound) assert.Eq(t, body.Message, core.ErrNotFound.Error()) } func TestTenantMembersApi_ListByTenant(t *testing.T) { s := startServer(t) var tenant api.Tenants_CreateRes s.call(t, "/Tenants.Create", api.Tenants_CreateReq{Tenant: iam.Tenant{Name: "Acme"}}, &tenant) for _, email := range []string{"a@test", "b@test", "c@test"} { s.seedUserInTenant(t, email, "pw", tenant.Tenant.ID) } var list api.TenantMembers_ListRes s.call(t, "/TenantMembers.ListByTenant", api.TenantMembers_ListByTenantReq{ Tenant: tenant.Tenant.ID, }, &list) // 3 seeded members + 1 creator (auto-added as owner by Tenants.Create). assert.Eq(t, len(list.Page.Items), 4) } func TestTenantMembersApi_ListByUser(t *testing.T) { s := startServer(t) // Seed a user in the default tenant first (to establish their identity) userID := s.seedUser(t, "member@test", "pw") for _, name := range []string{"A", "B"} { var tenant api.Tenants_CreateRes s.call(t, "/Tenants.Create", api.Tenants_CreateReq{Tenant: iam.Tenant{Name: name}}, &tenant) // Add the user to each new tenant directly via seedUserInTenantFor s.addMember(t, tenant.Tenant.ID, userID) } var list api.TenantMembers_ListByUserRes s.call(t, "/TenantMembers.ListByUser", api.TenantMembers_ListByUserReq{ UserID: userID, }, &list) // Default tenant + 2 additional tenants = 3. assert.Eq(t, len(list.Page.Items), 3) }