76 lines
3.3 KiB
Go
76 lines
3.3 KiB
Go
package httpapi
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.nianxx.cn/wangxuming/NianAIGC/backend/internal/administration"
|
|
)
|
|
|
|
func TestAdminGroupsCompatibilityIsGone(t *testing.T) {
|
|
authorizer, _ := NewPlatformAuthorizer(AuthState{Required: true}, nil)
|
|
handler, _ := NewAdminHandler(authorizer, administration.NewService(&adminStoreStub{}))
|
|
w := httptest.NewRecorder()
|
|
handler.ServeHTTP(w, httptest.NewRequest(http.MethodPost, "/api/admin/accounts/groups", nil))
|
|
if w.Code != http.StatusGone || !strings.Contains(w.Body.String(), "不再使用外部部门接口") {
|
|
t.Fatalf("status=%d body=%q", w.Code, w.Body.String())
|
|
}
|
|
}
|
|
|
|
func TestAdminAccountsListUsesSecurityProjection(t *testing.T) {
|
|
store := &adminStoreStub{accounts: []administration.Account{{ID: "u", Phone: "13800138000", DisplayName: "User", Role: administration.RoleUser, OrganizationID: "org", Status: administration.StatusActive, PasswordHash: "must-not-leak", PasswordSalt: "must-not-leak", SessionVersion: 9}}}
|
|
authorizer, _ := NewPlatformAuthorizer(AuthState{}, nil)
|
|
handler, _ := NewAdminHandler(authorizer, administration.NewService(store))
|
|
w := httptest.NewRecorder()
|
|
handler.ServeHTTP(w, httptest.NewRequest(http.MethodGet, "/api/admin/accounts", nil))
|
|
if w.Code != http.StatusOK || strings.Contains(w.Body.String(), "must-not-leak") || strings.Contains(w.Body.String(), "sessionVersion") {
|
|
t.Fatalf("status=%d body=%q", w.Code, w.Body.String())
|
|
}
|
|
var body struct {
|
|
Members []map[string]any `json:"members"`
|
|
CanManage bool `json:"canManageOrganizations"`
|
|
}
|
|
if json.Unmarshal(w.Body.Bytes(), &body) != nil || len(body.Members) != 1 || !body.CanManage {
|
|
t.Fatalf("body=%q", w.Body.String())
|
|
}
|
|
}
|
|
|
|
type adminStoreStub struct {
|
|
accounts []administration.Account
|
|
organizations []administration.Organization
|
|
}
|
|
|
|
func (s *adminStoreStub) ListAccounts(context.Context, administration.AccountFilters) ([]administration.Account, error) {
|
|
return s.accounts, nil
|
|
}
|
|
func (s *adminStoreStub) GetAccount(context.Context, string) (administration.Account, bool, error) {
|
|
return administration.Account{}, false, nil
|
|
}
|
|
func (s *adminStoreStub) CreateAccount(_ context.Context, a administration.Account) (administration.Account, error) {
|
|
return a, nil
|
|
}
|
|
func (s *adminStoreStub) UpdateAccount(_ context.Context, a administration.Account) (administration.Account, error) {
|
|
return a, nil
|
|
}
|
|
func (s *adminStoreStub) DeleteAccount(context.Context, string, string) error { return nil }
|
|
func (s *adminStoreStub) ListOrganizations(context.Context, bool) ([]administration.Organization, error) {
|
|
return s.organizations, nil
|
|
}
|
|
func (s *adminStoreStub) GetOrganization(context.Context, string) (administration.Organization, bool, error) {
|
|
return administration.Organization{}, false, nil
|
|
}
|
|
func (s *adminStoreStub) CreateOrganization(_ context.Context, o administration.Organization) (administration.Organization, error) {
|
|
return o, nil
|
|
}
|
|
func (s *adminStoreStub) UpdateOrganization(_ context.Context, o administration.Organization) (administration.Organization, error) {
|
|
return o, nil
|
|
}
|
|
func (s *adminStoreStub) DeleteOrganization(context.Context, string) error { return nil }
|
|
func (s *adminStoreStub) CountOrganizationMembers(context.Context, string) (int, error) {
|
|
return 0, nil
|
|
}
|