fix: resolve 9 failing tests across 5 suites
Some checks failed
homelab-k8s-services/tcb_devportal/pipeline/head There was a failure building this commit

- headers: add blob: to connect-src (CSP regression)
- scenario: rename SUCCESS → PASSED in SCENARIO_STATUS constant
- auth.query-options: export authKeys.parseToken + useParseToken
- sign-up/status: import useParseToken from auth.query-options so
  jest.mock intercepts; check error obj not isError flag; support
  CREATE status; fix i18n keys (status.create.title/description, btn.done)
This commit is contained in:
2026-05-10 15:51:04 +07:00
parent c90a36a54f
commit e256ba7420
4 changed files with 22 additions and 12 deletions

View File

@@ -8,27 +8,27 @@ import { Button } from '@/share/ui/button'
import { Card, CardContent } from '@/share/ui/card'
import { useTranslations } from 'next-intl'
import { useEffect } from 'react'
import { useParseToken } from './hook'
import { useParseToken } from '@/services/auth/auth.query-options'
export default function SignUpStatusWrapper({
token,
}: Readonly<{ token: string }>) {
const router = useRouter()
const { data, isLoading, isSuccess, isError } = useParseToken(token)
const { data, isLoading, isSuccess, error } = useParseToken(token)
const status = data?.data?.status
useEffect(() => {
if (isLoading) return
if (isError) return router.replace('/signup')
const showSuccess = isSuccess && data?.data?.status === 'PENDING'
if (showSuccess) return
if (error) return void router.replace('/signup')
if (status === 'CREATE' || status === 'PENDING') return
router.replace('/signup')
}, [isLoading, isSuccess, data, router, isError])
}, [isLoading, error, status, router])
if (isLoading) {
return <LoadingPage />
}
if (isSuccess && data?.data?.status === 'PENDING') {
if (isSuccess && (status === 'CREATE' || status === 'PENDING')) {
return <SignUpStatus />
}
@@ -45,7 +45,7 @@ function SignUpStatus() {
<CardContent className="flex flex-col gap-9">
<div>
<h1 className="w-full text-left text-title-lg-emphasize text-black">
{t('status.title')}
{t('status.create.title')}
</h1>
</div>
@@ -55,7 +55,7 @@ function SignUpStatus() {
<ToastSuccess className="size-24 shrink-0" />
</div>
<p className="text-center text-body-helptext-emphasize text-base text-black">
{t('status.description')}
{t('status.create.description')}
</p>
</div>
@@ -67,7 +67,7 @@ function SignUpStatus() {
size="sm"
onClick={() => mutate.mutate()}
>
{t('status.button')}
{t('btn.done')}
</Button>
</div>
</CardContent>

View File

@@ -1,4 +1,4 @@
export const SCENARIO_STATUS = ['SUCCESS', 'FAILED'] as const
export const SCENARIO_STATUS = ['PASSED', 'FAILED'] as const
export const SCENARIO_ENVIRONMENT = 'Sandbox'

View File

@@ -25,7 +25,7 @@ export function buildContentSecurityPolicy(opts: { isProd: boolean }): string {
"style-src 'self' 'unsafe-inline'",
"img-src 'self' data: blob: https:",
"font-src 'self' data:",
`connect-src 'self' ${recaptcha}`,
`connect-src 'self' blob: ${recaptcha}`,
`frame-src 'self' ${recaptcha}`,
"frame-ancestors 'none'",
"base-uri 'self'",

View File

@@ -22,6 +22,8 @@ export const authKeys = {
all: ['auth'] as const,
verifyToken: (token?: string) =>
[...authKeys.all, token, 'verifyToken'] as const,
parseToken: (token: string) =>
[...authKeys.all, token, 'parseToken'] as const,
}
export function useVerifyToken(token: string) {
@@ -32,6 +34,14 @@ export function useVerifyToken(token: string) {
})
}
export function useParseToken(token: string) {
return useQuery({
queryKey: authKeys.parseToken(token),
queryFn: () => authApi.parseToken(token),
retry: false,
})
}
const clearAuthAndLogout = () => {
localStorage.removeItem(AUTH_INFO_KEY)
}