fix(auth): make tenant.adminEmail nullable for phone-only registrations; fix api-test status parsing

This commit is contained in:
hailin 2026-03-07 03:27:23 -08:00
parent 938802da96
commit 09d9200235
2 changed files with 13 additions and 13 deletions

View File

@ -17,8 +17,8 @@ export class Tenant {
@Column({ type: 'varchar', length: 20, default: 'active' })
status!: 'active' | 'suspended';
@Column({ type: 'varchar', length: 255 })
adminEmail!: string;
@Column({ type: 'varchar', length: 255, nullable: true })
adminEmail?: string;
@Column({ type: 'int', default: 10 })
maxServers!: number;

View File

@ -54,7 +54,7 @@ section "2. Auth — Register (Email)"
RESP=$(post_json "${BASE}/api/v1/auth/register" \
-d "{\"email\":\"${TEST_EMAIL}\",\"password\":\"${TEST_PASS}\",\"name\":\"Test User\",\"companyName\":\"${TEST_COMPANY}\"}")
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | cut -d_ -f3)
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | sed 's/__STATUS__//')
BODY=$(echo "$RESP" | sed 's/__STATUS__[0-9]*//')
if [[ "$STATUS" == "201" || "$STATUS" == "200" ]]; then
@ -73,7 +73,7 @@ section "3. Auth — Register (Phone)"
PHONE_COMPANY="PhoneCo${TS}"
RESP=$(post_json "${BASE}/api/v1/auth/register" \
-d "{\"phone\":\"${TEST_PHONE}\",\"password\":\"${TEST_PASS}\",\"name\":\"Phone User\",\"companyName\":\"${PHONE_COMPANY}\"}")
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | cut -d_ -f3)
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | sed 's/__STATUS__//')
BODY=$(echo "$RESP" | sed 's/__STATUS__[0-9]*//')
if [[ "$STATUS" == "201" || "$STATUS" == "200" ]]; then
@ -87,7 +87,7 @@ section "4. Auth — Duplicate registration should fail"
RESP=$(post_json "${BASE}/api/v1/auth/register" \
-d "{\"email\":\"${TEST_EMAIL}\",\"password\":\"${TEST_PASS}\",\"name\":\"Dup\",\"companyName\":\"Dup${TS}\"}")
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | cut -d_ -f3)
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | sed 's/__STATUS__//')
[[ "$STATUS" == "409" ]] && ok "Duplicate email → 409 Conflict" || fail "Duplicate email → expected 409, got ${STATUS}"
# ══════════════════════════════════════════════════════════════════════════════
@ -95,7 +95,7 @@ section "5. Auth — Login (email)"
RESP=$(post_json "${BASE}/api/v1/auth/login" \
-d "{\"email\":\"${TEST_EMAIL}\",\"password\":\"${TEST_PASS}\"}")
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | cut -d_ -f3)
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | sed 's/__STATUS__//')
BODY=$(echo "$RESP" | sed 's/__STATUS__[0-9]*//')
if [[ "$STATUS" == "200" || "$STATUS" == "201" ]]; then
@ -111,7 +111,7 @@ section "6. Auth — Login (phone)"
RESP=$(post_json "${BASE}/api/v1/auth/login" \
-d "{\"phone\":\"${TEST_PHONE}\",\"password\":\"${TEST_PASS}\"}")
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | cut -d_ -f3)
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | sed 's/__STATUS__//')
[[ "$STATUS" == "200" || "$STATUS" == "201" ]] && ok "POST /api/v1/auth/login (phone) → ${STATUS}" \
|| fail "POST /api/v1/auth/login (phone) → ${STATUS}"
@ -120,7 +120,7 @@ section "7. Auth — Login (identifier field)"
RESP=$(post_json "${BASE}/api/v1/auth/login" \
-d "{\"identifier\":\"${TEST_EMAIL}\",\"password\":\"${TEST_PASS}\"}")
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | cut -d_ -f3)
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | sed 's/__STATUS__//')
[[ "$STATUS" == "200" || "$STATUS" == "201" ]] && ok "POST /api/v1/auth/login (identifier) → ${STATUS}" \
|| fail "POST /api/v1/auth/login (identifier) → ${STATUS}"
@ -129,7 +129,7 @@ section "8. Auth — Wrong password should be 401"
RESP=$(post_json "${BASE}/api/v1/auth/login" \
-d "{\"email\":\"${TEST_EMAIL}\",\"password\":\"wrongpass\"}")
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | cut -d_ -f3)
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | sed 's/__STATUS__//')
[[ "$STATUS" == "401" ]] && ok "Wrong password → 401" || fail "Wrong password → expected 401, got ${STATUS}"
# ══════════════════════════════════════════════════════════════════════════════
@ -156,7 +156,7 @@ section "11. Auth — Refresh token"
if [[ -n "$REFRESH_TOKEN" ]]; then
RESP=$(post_json "${BASE}/api/v1/auth/refresh" \
-d "{\"refreshToken\":\"${REFRESH_TOKEN}\"}")
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | cut -d_ -f3)
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | sed 's/__STATUS__//')
[[ "$STATUS" == "200" || "$STATUS" == "201" ]] && ok "POST /api/v1/auth/refresh → ${STATUS}" \
|| fail "POST /api/v1/auth/refresh → ${STATUS}"
else
@ -168,7 +168,7 @@ section "12. Auth — Platform admin login (ops@it0.com)"
RESP=$(post_json "${BASE}/api/v1/auth/login" \
-d '{"email":"ops@it0.com","password":"it0ops2024"}')
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | cut -d_ -f3)
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | sed 's/__STATUS__//')
BODY=$(echo "$RESP" | sed 's/__STATUS__[0-9]*//')
if [[ "$STATUS" == "200" || "$STATUS" == "201" ]]; then
@ -288,7 +288,7 @@ if [[ -n "$TOKEN" ]]; then
RESP=$(post_json "${BASE}/api/v1/auth/api-keys" \
-H "Authorization: Bearer ${TOKEN}" \
-d "{\"name\":\"test-key-${TS}\"}")
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | cut -d_ -f3)
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | sed 's/__STATUS__//')
[[ "$STATUS" == "200" || "$STATUS" == "201" ]] && ok "POST /api/v1/auth/api-keys → ${STATUS}" \
|| fail "POST /api/v1/auth/api-keys → ${STATUS}"
fi
@ -301,7 +301,7 @@ if [[ -n "$TOKEN" ]]; then
RESP=$(post_json "${BASE}/api/v1/tenants/invites" \
-H "Authorization: Bearer ${TOKEN}" \
-d "{\"email\":\"${INVITE_EMAIL}\",\"role\":\"viewer\"}")
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | cut -d_ -f3)
STATUS=$(echo "$RESP" | grep -o '__STATUS__[0-9]*' | sed 's/__STATUS__//')
BODY=$(echo "$RESP" | sed 's/__STATUS__[0-9]*//')
if [[ "$STATUS" == "200" || "$STATUS" == "201" ]]; then
ok "POST /api/v1/tenants/invites → ${STATUS}"