Files
core/pkg/admin/admin_users_test.go

107 lines
2.9 KiB
Go
Raw Permalink Normal View History

2026-04-02 10:57:36 -04:00
package admin
import (
"bytes"
"context"
"encoding/json"
"fmt"
"net/http"
"net/http/httptest"
"testing"
)
func TestHandleAdminResetPassword(t *testing.T) {
a, db := setupTestAdmin(t)
defer db.Close()
targetUser, _ := a.Store.CreateUser(context.Background(), "forgetful@ranch.com", "Forgetful Fred", "old_hash", "RangeHand")
payload := map[string]string{
"new_password": "BrandNewSecurePassword123!",
}
body, _ := json.Marshal(payload)
targetURL := fmt.Sprintf("/api/admin/users/%d/reset-password", targetUser.ID)
req := httptest.NewRequest(http.MethodPatch, targetURL, bytes.NewBuffer(body))
req.SetPathValue("id", fmt.Sprintf("%d", targetUser.ID))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
a.HandleAdminResetPassword(rr, req)
if rr.Code != http.StatusOK {
t.Fatalf("Expected 200 OK, got %d. Body: %s", rr.Code, rr.Body.String())
}
}
func TestHandleUpdateUserRole(t *testing.T) {
a, db := setupTestAdmin(t)
defer db.Close()
_, _ = a.Store.CreateUser(context.Background(), "boss@ranch.com", "The Boss", "hash", "Sheriff")
targetUser, _ := a.Store.CreateUser(context.Background(), "rookie@ranch.com", "Rookie Ray", "hash", "RangeHand")
payload := map[string]string{
"global_role": "Wrangler",
}
body, _ := json.Marshal(payload)
targetURL := fmt.Sprintf("/api/admin/users/%d/role", targetUser.ID)
req := httptest.NewRequest(http.MethodPatch, targetURL, bytes.NewBuffer(body))
req.AddCookie(GetVIPCookie(a.Store))
req.SetPathValue("id", fmt.Sprintf("%d", targetUser.ID))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
a.HandleUpdateUserRole(rr, req)
if rr.Code != http.StatusOK {
t.Fatalf("Expected 200 OK, got %d. Body: %s", rr.Code, rr.Body.String())
}
}
func TestHandleCreateUser_SheriffInvite(t *testing.T) {
a, db := setupTestAdmin(t)
defer db.Close()
payload := map[string]string{
"email": "magistrate@ranch.com",
"full_name": "Mighty Magistrate",
"password": "TempPassword123!",
"global_role": "Magistrate",
}
body, _ := json.Marshal(payload)
req := httptest.NewRequest(http.MethodPost, "/api/admin/users", bytes.NewBuffer(body))
req.AddCookie(GetVIPCookie(a.Store))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
a.HandleCreateUser(rr, req)
if rr.Code != http.StatusCreated {
t.Fatalf("Expected 201 Created, got %d. Body: %s", rr.Code, rr.Body.String())
}
var count int
db.QueryRow(`SELECT COUNT(*) FROM users WHERE email = 'magistrate@ranch.com'`).Scan(&count)
if count != 1 {
t.Errorf("Expected user to be created in the database")
}
}
func TestHandleGetUsers(t *testing.T) {
a, db := setupTestAdmin(t)
defer db.Close()
req := httptest.NewRequest(http.MethodGet, "/api/admin/users", nil)
req.AddCookie(GetVIPCookie(a.Store))
rr := httptest.NewRecorder()
a.HandleGetUsers(rr, req)
if rr.Code != http.StatusOK {
t.Fatalf("Expected 200 OK, got %d. Body: %s", rr.Code, rr.Body.String())
}
}