Project

General

Profile

Feature #3273 » W10-unit-tests.json

Bot AI, 09/08/2026 10:55 AM

 
{
"gate": "Unit Tests",
"gate_number": 5,
"run_at": "2026-09-08",
"feature_files": [
"app/(auth)/forgot-password/page.tsx",
"app/(auth)/forgot-password/verify/page.tsx",
"app/(auth)/forgot-password/reset/page.tsx",
"components/auth/ForgotPasswordForm.tsx",
"components/auth/VerifyOtpForm.tsx",
"components/auth/ResetPasswordForm.tsx",
"components/auth/SignInForm.tsx"
],
"test_files": [
"tests/auth-forgot-password-form.test.tsx",
"tests/auth-forgot-password-pages.test.tsx",
"tests/auth-verify-otp-form.test.tsx",
"tests/auth-reset-password-form-via-otp.test.tsx",
"tests/sign-in-form.test.tsx"
],
"test_runner": "vitest",
"summary": {
"passed": 80,
"failed": 0,
"total": 80,
"skipped": 0
},
"coverage_by_file": {
"app/(auth)/forgot-password/page.tsx": {
"lines": 100,
"functions": 100,
"branches": 100
},
"app/(auth)/forgot-password/reset/page.tsx": {
"lines": 100,
"functions": 100,
"branches": 100
},
"app/(auth)/forgot-password/verify/page.tsx": {
"lines": 100,
"functions": 100,
"branches": 100
},
"components/auth/ForgotPasswordForm.tsx": {
"lines": 100,
"functions": 100,
"branches": 100
},
"components/auth/ResetPasswordForm.tsx": {
"lines": 100,
"functions": 100,
"branches": 100
},
"components/auth/SignInForm.tsx": {
"lines": 100,
"functions": 100,
"branches": 100
},
"components/auth/VerifyOtpForm.tsx": {
"lines": 100,
"functions": 100,
"branches": 90.47
}
},
"coverage_totals_for_feature_files": {
"min_lines": 100,
"min_functions": 100,
"min_branches": 90.47,
"binding_number": 90.47
},
"gate_status": "PASS",
"fixes_applied": [
"auth-reset-password-form-via-otp.test.tsx: changed getByLabelText(\"New Password\") to getByLabelText(\"New Password *\") to match PasswordField label with RequiredMark suffix",
"auth-verify-otp-form.test.tsx: changed synchronous act(() => vi.advanceTimersByTime(30_000)) to async per-tick loop (30x await act(async () => vi.advanceTimersByTime(1000))) to allow React useEffect to re-run between countdown ticks"
],
"testcases": [
{
"name": "ForgotPasswordForm \u2014 rendering (clean state) renders the Forgot Password heading",
"status": "PASS"
},
{
"name": "ForgotPasswordForm \u2014 rendering (clean state) renders the mobile number input with correct attributes",
"status": "PASS"
},
{
"name": "ForgotPasswordForm \u2014 rendering (clean state) renders the +91 prefix label",
"status": "PASS"
},
{
"name": "ForgotPasswordForm \u2014 rendering (clean state) renders the Send Verification Code submit button",
"status": "PASS"
},
{
"name": "ForgotPasswordForm \u2014 rendering (clean state) renders the Back to Sign In link pointing to /login",
"status": "PASS"
},
{
"name": "ForgotPasswordForm \u2014 rendering (clean state) renders the footer hint text",
"status": "PASS"
},
{
"name": "ForgotPasswordForm \u2014 field error state shows a mobile field error when fieldErrors.mobile is set",
"status": "PASS"
},
{
"name": "ForgotPasswordForm \u2014 field error state does not show a generic error message when fieldErrors is set (field error takes priority in the template)",
"status": "PASS"
},
{
"name": "ForgotPasswordForm \u2014 generic error state shows a generic error message when ok=false and message is present with no fieldErrors",
"status": "PASS"
},
{
"name": "ForgotPasswordForm \u2014 generic error state does not show any error when state is clean (ok=true, no message)",
"status": "PASS"
},
{
"name": "ForgotPasswordForm \u2014 success message state shows the success message in green when ok=true and message is present",
"status": "PASS"
},
{
"name": "ForgotPasswordForm \u2014 Server Action wiring binds useFormState to requestPasswordResetOtp with ok=true initial state",
"status": "PASS"
},
{
"name": "ForgotPasswordForm \u2014 Server Action wiring calling the bound action delegates to requestPasswordResetOtp",
"status": "PASS"
},
{
"name": "ForgotPasswordPage \u2014 rendering renders the ForgotPasswordForm component",
"status": "PASS"
},
{
"name": "ForgotPasswordPage \u2014 rendering never calls redirect \u2014 no guard on step 1",
"status": "PASS"
},
{
"name": "VerifyOtpPage \u2014 cookie guard redirects redirects to /forgot-password when the fp_otp_token cookie is absent",
"status": "PASS"
},
{
"name": "VerifyOtpPage \u2014 cookie guard redirects redirects to /forgot-password when fp_otp_token.value is an empty string",
"status": "PASS"
},
{
"name": "VerifyOtpPage \u2014 cookie guard redirects does not render VerifyOtpForm when the guard redirects",
"status": "PASS"
},
{
"name": "VerifyOtpPage \u2014 renders form when token is present renders VerifyOtpForm and does not redirect when fp_otp_token is set",
"status": "PASS"
},
{
"name": "VerifyOtpPage \u2014 renders form when token is present reads the fp_otp_token cookie by name",
"status": "PASS"
},
{
"name": "ResetPasswordPage \u2014 cookie guard redirects redirects to /forgot-password when the fp_reset_token cookie is absent",
"status": "PASS"
},
{
"name": "ResetPasswordPage \u2014 cookie guard redirects redirects to /forgot-password when fp_reset_token.value is an empty string",
"status": "PASS"
},
{
"name": "ResetPasswordPage \u2014 cookie guard redirects does not render ResetPasswordForm when the guard redirects",
"status": "PASS"
},
{
"name": "ResetPasswordPage \u2014 renders form when token is present renders ResetPasswordForm and does not redirect when fp_reset_token is set",
"status": "PASS"
},
{
"name": "ResetPasswordPage \u2014 renders form when token is present reads the fp_reset_token cookie by name",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 initial rendering renders the Reset Password heading",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 initial rendering renders New Password and Re-enter Password fields",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 initial rendering renders the Save New Password submit button",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 initial rendering renders the Cancel button",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 initial rendering does not render a 'Current Password' field (auth variant has no such field)",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 initial rendering renders the PASSWORD POLICY card with all 5 rules",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 initial rendering renders the Strength meter label",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 submit button enable/disable Save New Password button is disabled with empty passwords",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 submit button enable/disable Save New Password button is disabled when policy is not met",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 submit button enable/disable Save New Password button is disabled when passwords don't match",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 submit button enable/disable Save New Password button is enabled when policy passes and passwords match",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 password mismatch shows a 'Passwords do not match' error when confirmPassword differs from newPassword",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 password mismatch does not show a mismatch error when passwords match",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 password mismatch does not show mismatch error on empty confirm field",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 strength meter does not show a strength label when the password field is empty",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 strength meter shows 'Weak' label when only 1 rule is met",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 strength meter shows 'Strong' label when all 5 rules are met",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 field errors from action state shows newPassword field error from action state",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 field errors from action state shows confirmPassword field error from action state",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 field errors from action state shows generic error message when ok=false, message present, no fieldErrors",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 field errors from action state does not show generic error when fieldErrors is also present",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 Cancel button calls router.push('/login') when Cancel is clicked",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 Server Action wiring binds useFormState to resetPasswordViaOtp with ok=true initial state",
"status": "PASS"
},
{
"name": "ResetPasswordForm (auth) \u2014 Server Action wiring calling the bound action delegates to resetPasswordViaOtp",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 initial rendering renders the Enter Verification Code heading",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 initial rendering renders 6 digit input boxes with correct aria-labels",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 initial rendering renders all 6 digit inputs as empty initially",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 initial rendering renders a hidden input named 'otp' with empty value initially",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 initial rendering renders a Verify Code submit button",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 initial rendering renders the Back link pointing to /forgot-password",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 initial rendering shows countdown text while cooldown is active",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 submit button disabled when OTP incomplete submit button is disabled when fewer than 6 digits are entered",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 submit button disabled when OTP incomplete submit button becomes enabled once all 6 digits are entered",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 digit input updates the digit value when a number is typed",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 digit input strips non-numeric characters from digit input",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 digit input fills the hidden otp field as digits are entered",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 digit input paste fills all 6 boxes from pasted numeric text",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 digit input paste ignores non-numeric characters in pasted text",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 digit input Backspace on an empty box moves focus to the previous box",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 OTP field error from formState shows the OTP field error message when fieldErrors.otp is set",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 OTP field error from formState applies error styling to digit boxes when otpError is present",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 session error from formState shows the session-level error when ok=false and message is set (no fieldErrors)",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 countdown and resend shows countdown text (not resend button) when countdown > 0",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 countdown and resend shows Resend Code button after countdown reaches 0",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 countdown and resend calls resendOtp when the Resend Code button is clicked",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 countdown and resend shows success message after a successful resend",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 countdown and resend shows resend error after a failed resend",
"status": "PASS"
},
{
"name": "VerifyOtpForm \u2014 Server Action wiring binds useFormState to verifyResetOtp with ok=true initial state",
"status": "PASS"
},
{
"name": "SignInForm \u2014 rendering renders the heading, username field, password field and Login submit button",
"status": "PASS"
},
{
"name": "SignInForm \u2014 rendering marks username and password as required and focuses username first",
"status": "PASS"
},
{
"name": "SignInForm \u2014 error state shows the returned error without clearing the fields",
"status": "PASS"
},
{
"name": "SignInForm \u2014 error state renders no error text when the state has none",
"status": "PASS"
},
{
"name": "SignInForm \u2014 Forgot Password link (ticket #3273) renders a 'Forgot Password?' link pointing to /forgot-password",
"status": "PASS"
},
{
"name": "SignInForm \u2014 submit wiring (Server Action) binds directly to the login Server Action with an undefined initial state",
"status": "PASS"
},
{
"name": "SignInForm \u2014 submit wiring (Server Action) invokes login exactly once with the submitted FormData",
"status": "PASS"
}
]
}
(1-1/10)