- 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.
58 lines
1.8 KiB
Go
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)
|
|
}
|
|
}
|