ultisuite-backend/internal/integrationtest/admin/users_test.go
R3D347HR4Y fa5394e10d feat(tests): add integration testing framework and configuration
- Introduced a new `.env.test.example` file for integration test configuration.
- Added a `Makefile` to streamline test commands for unit and integration tests.
- Implemented an integration testing harness with support for PostgreSQL, MinIO, and Redis using testcontainers.
- Created a suite of integration tests covering health checks and user management functionalities.
- Enhanced CI workflow to include integration tests with necessary environment variables.
2026-06-07 19:44:29 +02:00

58 lines
1.8 KiB
Go

//go:build integration
package admin_test
import (
"testing"
"github.com/ultisuite/ulti-backend/internal/integrationtest"
)
func TestAdminUsers(t *testing.T) {
h := integrationtest.RequireHarness(t)
adminClient, _ := integrationtest.RequireAdminClient(t, h)
externalID := integrationtest.NewExternalID("managed")
createResp, err := adminClient.Post("/api/v1/admin/users", map[string]string{
"external_id": externalID,
"email": externalID + "@example.com",
"name": "Managed User",
})
integrationtest.FailIf(err, t, "create user")
integrationtest.FailUnlessStatus(t, createResp, 201)
var created map[string]any
integrationtest.DecodeJSON(t, createResp, &created)
userID, _ := created["id"].(string)
if userID == "" {
t.Fatalf("missing user id: %#v", created)
}
listResp, err := adminClient.Get("/api/v1/admin/users")
integrationtest.FailIf(err, t, "list users")
integrationtest.FailUnlessStatus(t, listResp, 200)
getResp, err := adminClient.Get("/api/v1/admin/users/" + userID)
integrationtest.FailIf(err, t, "get user")
integrationtest.FailUnlessStatus(t, getResp, 200)
disableResp, err := adminClient.Post("/api/v1/admin/users/"+userID+"/disable", nil)
integrationtest.FailIf(err, t, "disable user")
integrationtest.FailUnlessStatus(t, disableResp, 204)
reactResp, err := adminClient.Post("/api/v1/admin/users/"+userID+"/reactivate", nil)
integrationtest.FailIf(err, t, "reactivate user")
integrationtest.FailUnlessStatus(t, reactResp, 204)
}
func TestNonAdminForbidden(t *testing.T) {
h := integrationtest.RequireHarness(t)
userClient, _ := integrationtest.RequireUserClient(t, h)
resp, err := userClient.Get("/api/v1/admin/users")
integrationtest.FailIf(err, t, "list users as non-admin")
if resp.Status != 403 {
t.Fatalf("status = %d, want 403", resp.Status)
}
}