@latte-macchiat-io/latte-payload 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/access/adminAccessOnly.d.ts.map +1 -0
- package/dist/src/access/adminAccessOnly.js.map +1 -0
- package/dist/src/access/admins.d.ts.map +1 -0
- package/dist/src/access/admins.js.map +1 -0
- package/dist/src/access/anyone.d.ts.map +1 -0
- package/dist/src/access/anyone.js.map +1 -0
- package/dist/src/access/authenticated.d.ts.map +1 -0
- package/dist/src/access/authenticated.js.map +1 -0
- package/dist/src/access/authenticatedAccessOnly.d.ts.map +1 -0
- package/dist/src/access/authenticatedAccessOnly.js.map +1 -0
- package/dist/src/access/index.d.ts.map +1 -0
- package/dist/src/access/index.js.map +1 -0
- package/dist/src/access/publicReadAuthenticatedAccess.d.ts.map +1 -0
- package/dist/src/access/publicReadAuthenticatedAccess.js.map +1 -0
- package/dist/src/collections/ContactMessages/hooks/sendEmailNotification.d.ts.map +1 -0
- package/dist/src/collections/ContactMessages/hooks/sendEmailNotification.js.map +1 -0
- package/dist/src/collections/ContactMessages/index.d.ts.map +1 -0
- package/dist/src/collections/ContactMessages/index.js.map +1 -0
- package/dist/src/collections/EmailTemplates/index.d.ts.map +1 -0
- package/dist/src/collections/EmailTemplates/index.js.map +1 -0
- package/dist/src/collections/Media/index.d.ts.map +1 -0
- package/dist/src/collections/Media/index.js.map +1 -0
- package/dist/src/collections/QueuedEmails/components/HtmlViewer.d.ts.map +1 -0
- package/dist/src/collections/QueuedEmails/components/HtmlViewer.js.map +1 -0
- package/dist/src/collections/QueuedEmails/components/RetryEmailButtons.d.ts.map +1 -0
- package/dist/src/collections/QueuedEmails/components/RetryEmailButtons.js.map +1 -0
- package/dist/src/collections/QueuedEmails/index.d.ts +23 -0
- package/dist/src/collections/QueuedEmails/index.d.ts.map +1 -0
- package/dist/src/collections/QueuedEmails/index.js +258 -0
- package/dist/src/collections/QueuedEmails/index.js.map +1 -0
- package/dist/src/collections/Users/auth-emails/forgot-password-email.d.ts.map +1 -0
- package/dist/src/collections/Users/auth-emails/forgot-password-email.js.map +1 -0
- package/dist/src/collections/Users/auth-emails/verify-email.d.ts.map +1 -0
- package/dist/src/collections/Users/auth-emails/verify-email.js.map +1 -0
- package/dist/src/collections/Users/hooks/ensureFirstUserIsAdmin.d.ts.map +1 -0
- package/dist/src/collections/Users/hooks/ensureFirstUserIsAdmin.js.map +1 -0
- package/dist/src/collections/Users/index.d.ts.map +1 -0
- package/dist/src/collections/Users/index.js.map +1 -0
- package/dist/src/collections/index.d.ts.map +1 -0
- package/dist/src/collections/index.js.map +1 -0
- package/dist/src/components/index.d.ts.map +1 -0
- package/dist/src/components/index.js.map +1 -0
- package/dist/src/forms/states.d.ts.map +1 -0
- package/dist/src/forms/states.js.map +1 -0
- package/dist/src/forms/translate-errors.d.ts.map +1 -0
- package/dist/src/forms/translate-errors.js.map +1 -0
- package/dist/src/forms/validators.d.ts.map +1 -0
- package/dist/src/forms/validators.js.map +1 -0
- package/dist/src/globals/PrivacyPolicy/hooks/revalidate-cache.d.ts.map +1 -0
- package/dist/src/globals/PrivacyPolicy/hooks/revalidate-cache.js.map +1 -0
- package/dist/src/globals/PrivacyPolicy/index.d.ts.map +1 -0
- package/dist/src/globals/PrivacyPolicy/index.js.map +1 -0
- package/dist/{globals/PrivacyPolicy → src/globals/TermsOfUse}/hooks/revalidate-cache.d.ts.map +1 -1
- package/dist/{globals/PrivacyPolicy → src/globals/TermsOfUse}/hooks/revalidate-cache.js.map +1 -1
- package/dist/src/globals/TermsOfUse/index.d.ts.map +1 -0
- package/dist/src/globals/TermsOfUse/index.js.map +1 -0
- package/dist/src/globals/index.d.ts.map +1 -0
- package/dist/src/globals/index.js.map +1 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/tasks/index.d.ts.map +1 -0
- package/dist/src/tasks/index.js.map +1 -0
- package/dist/src/tasks/process-email-queue.d.ts.map +1 -0
- package/dist/src/tasks/process-email-queue.js.map +1 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/{types → src/types}/index.js.map +1 -1
- package/dist/src/types/slug.d.ts.map +1 -0
- package/dist/src/types/slug.js.map +1 -0
- package/dist/src/utils/database-dates.d.ts.map +1 -0
- package/dist/src/utils/database-dates.js.map +1 -0
- package/dist/src/utils/email/generate-email-html.d.ts.map +1 -0
- package/dist/src/utils/email/generate-email-html.js.map +1 -0
- package/dist/src/utils/email/get-email-template.d.ts.map +1 -0
- package/dist/src/utils/email/get-email-template.js.map +1 -0
- package/dist/src/utils/email/index.d.ts.map +1 -0
- package/dist/src/utils/email/index.js.map +1 -0
- package/dist/src/utils/email/queue-email.d.ts.map +1 -0
- package/dist/src/utils/email/queue-email.js.map +1 -0
- package/dist/src/utils/get-global.d.ts.map +1 -0
- package/dist/src/utils/get-global.js.map +1 -0
- package/dist/src/utils/id-from-payload.d.ts.map +1 -0
- package/dist/src/utils/id-from-payload.js.map +1 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/migrations.d.ts.map +1 -0
- package/dist/src/utils/migrations.js.map +1 -0
- package/dist/src/utils/payload-client.d.ts.map +1 -0
- package/dist/src/utils/payload-client.js.map +1 -0
- package/dist/src/utils/slugify.d.ts.map +1 -0
- package/dist/src/utils/slugify.js.map +1 -0
- package/dist/tests/fixtures/sample-data.d.ts +27 -0
- package/dist/tests/fixtures/sample-data.d.ts.map +1 -0
- package/dist/tests/fixtures/sample-data.js +53 -0
- package/dist/tests/fixtures/sample-data.js.map +1 -0
- package/dist/tests/helpers/create-test-user.d.ts +16 -0
- package/dist/tests/helpers/create-test-user.d.ts.map +1 -0
- package/dist/tests/helpers/create-test-user.js +27 -0
- package/dist/tests/helpers/create-test-user.js.map +1 -0
- package/dist/tests/helpers/init-payload.d.ts +11 -0
- package/dist/tests/helpers/init-payload.d.ts.map +1 -0
- package/dist/tests/helpers/init-payload.js +52 -0
- package/dist/tests/helpers/init-payload.js.map +1 -0
- package/dist/tests/setup.d.ts +3 -0
- package/dist/tests/setup.d.ts.map +1 -0
- package/dist/tests/setup.integration.d.ts +2 -0
- package/dist/tests/setup.integration.d.ts.map +1 -0
- package/dist/tests/setup.integration.js +8 -0
- package/dist/tests/setup.integration.js.map +1 -0
- package/dist/tests/setup.js +4 -0
- package/dist/tests/setup.js.map +1 -0
- package/dist/tests/unit/access/adminAccessOnly.spec.d.ts +2 -0
- package/dist/tests/unit/access/adminAccessOnly.spec.d.ts.map +1 -0
- package/dist/tests/unit/access/adminAccessOnly.spec.js +97 -0
- package/dist/tests/unit/access/adminAccessOnly.spec.js.map +1 -0
- package/dist/tests/unit/access/admins.spec.d.ts +2 -0
- package/dist/tests/unit/access/admins.spec.d.ts.map +1 -0
- package/dist/tests/unit/access/admins.spec.js +57 -0
- package/dist/tests/unit/access/admins.spec.js.map +1 -0
- package/dist/tests/unit/access/anyone.spec.d.ts +2 -0
- package/dist/tests/unit/access/anyone.spec.d.ts.map +1 -0
- package/dist/tests/unit/access/anyone.spec.js +24 -0
- package/dist/tests/unit/access/anyone.spec.js.map +1 -0
- package/dist/tests/unit/access/authenticated.spec.d.ts +2 -0
- package/dist/tests/unit/access/authenticated.spec.d.ts.map +1 -0
- package/dist/tests/unit/access/authenticated.spec.js +45 -0
- package/dist/tests/unit/access/authenticated.spec.js.map +1 -0
- package/dist/tests/unit/access/authenticatedAccessOnly.spec.d.ts +2 -0
- package/dist/tests/unit/access/authenticatedAccessOnly.spec.d.ts.map +1 -0
- package/dist/tests/unit/access/authenticatedAccessOnly.spec.js +95 -0
- package/dist/tests/unit/access/authenticatedAccessOnly.spec.js.map +1 -0
- package/dist/tests/unit/access/publicReadAuthenticatedAccess.spec.d.ts +2 -0
- package/dist/tests/unit/access/publicReadAuthenticatedAccess.spec.d.ts.map +1 -0
- package/dist/tests/unit/access/publicReadAuthenticatedAccess.spec.js +95 -0
- package/dist/tests/unit/access/publicReadAuthenticatedAccess.spec.js.map +1 -0
- package/dist/tests/unit/forms/validators.spec.d.ts +2 -0
- package/dist/tests/unit/forms/validators.spec.d.ts.map +1 -0
- package/dist/tests/unit/forms/validators.spec.js +294 -0
- package/dist/tests/unit/forms/validators.spec.js.map +1 -0
- package/dist/tests/unit/utils/database-dates.spec.d.ts +2 -0
- package/dist/tests/unit/utils/database-dates.spec.d.ts.map +1 -0
- package/dist/tests/unit/utils/database-dates.spec.js +82 -0
- package/dist/tests/unit/utils/database-dates.spec.js.map +1 -0
- package/dist/tests/unit/utils/id-from-payload.spec.d.ts +2 -0
- package/dist/tests/unit/utils/id-from-payload.spec.d.ts.map +1 -0
- package/dist/tests/unit/utils/id-from-payload.spec.js +110 -0
- package/dist/tests/unit/utils/id-from-payload.spec.js.map +1 -0
- package/dist/tests/unit/utils/slugify.spec.d.ts +2 -0
- package/dist/tests/unit/utils/slugify.spec.d.ts.map +1 -0
- package/dist/tests/unit/utils/slugify.spec.js +150 -0
- package/dist/tests/unit/utils/slugify.spec.js.map +1 -0
- package/package.json +19 -26
- package/src/collections/QueuedEmails/index.ts +245 -219
- package/tests/fixtures/sample-data.ts +1 -1
- package/tests/helpers/init-payload.ts +6 -6
- package/tests/setup.integration.ts +1 -1
- package/tests/unit/utils/id-from-payload.spec.ts +1 -1
- package/tsconfig.json +1 -2
- package/.claude/settings.local.json +0 -9
- package/TESTING_AND_DOCUMENTATION_SETUP.md +0 -348
- package/dist/access/adminAccessOnly.d.ts.map +0 -1
- package/dist/access/adminAccessOnly.js.map +0 -1
- package/dist/access/admins.d.ts.map +0 -1
- package/dist/access/admins.js.map +0 -1
- package/dist/access/anyone.d.ts.map +0 -1
- package/dist/access/anyone.js.map +0 -1
- package/dist/access/authenticated.d.ts.map +0 -1
- package/dist/access/authenticated.js.map +0 -1
- package/dist/access/authenticatedAccessOnly.d.ts.map +0 -1
- package/dist/access/authenticatedAccessOnly.js.map +0 -1
- package/dist/access/index.d.ts.map +0 -1
- package/dist/access/index.js.map +0 -1
- package/dist/access/publicReadAuthenticatedAccess.d.ts.map +0 -1
- package/dist/access/publicReadAuthenticatedAccess.js.map +0 -1
- package/dist/collections/ContactMessages/hooks/sendEmailNotification.d.ts.map +0 -1
- package/dist/collections/ContactMessages/hooks/sendEmailNotification.js.map +0 -1
- package/dist/collections/ContactMessages/index.d.ts.map +0 -1
- package/dist/collections/ContactMessages/index.js.map +0 -1
- package/dist/collections/EmailTemplates/index.d.ts.map +0 -1
- package/dist/collections/EmailTemplates/index.js.map +0 -1
- package/dist/collections/Media/index.d.ts.map +0 -1
- package/dist/collections/Media/index.js.map +0 -1
- package/dist/collections/QueuedEmails/components/HtmlViewer.d.ts.map +0 -1
- package/dist/collections/QueuedEmails/components/HtmlViewer.js.map +0 -1
- package/dist/collections/QueuedEmails/components/RetryEmailButtons.d.ts.map +0 -1
- package/dist/collections/QueuedEmails/components/RetryEmailButtons.js.map +0 -1
- package/dist/collections/QueuedEmails/index.d.ts +0 -3
- package/dist/collections/QueuedEmails/index.d.ts.map +0 -1
- package/dist/collections/QueuedEmails/index.js +0 -245
- package/dist/collections/QueuedEmails/index.js.map +0 -1
- package/dist/collections/Users/auth-emails/forgot-password-email.d.ts.map +0 -1
- package/dist/collections/Users/auth-emails/forgot-password-email.js.map +0 -1
- package/dist/collections/Users/auth-emails/verify-email.d.ts.map +0 -1
- package/dist/collections/Users/auth-emails/verify-email.js.map +0 -1
- package/dist/collections/Users/hooks/ensureFirstUserIsAdmin.d.ts.map +0 -1
- package/dist/collections/Users/hooks/ensureFirstUserIsAdmin.js.map +0 -1
- package/dist/collections/Users/index.d.ts.map +0 -1
- package/dist/collections/Users/index.js.map +0 -1
- package/dist/collections/index.d.ts.map +0 -1
- package/dist/collections/index.js.map +0 -1
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/forms/states.d.ts.map +0 -1
- package/dist/forms/states.js.map +0 -1
- package/dist/forms/translate-errors.d.ts.map +0 -1
- package/dist/forms/translate-errors.js.map +0 -1
- package/dist/forms/validators.d.ts.map +0 -1
- package/dist/forms/validators.js.map +0 -1
- package/dist/globals/PrivacyPolicy/index.d.ts.map +0 -1
- package/dist/globals/PrivacyPolicy/index.js.map +0 -1
- package/dist/globals/TermsOfUse/hooks/revalidate-cache.d.ts.map +0 -1
- package/dist/globals/TermsOfUse/hooks/revalidate-cache.js.map +0 -1
- package/dist/globals/TermsOfUse/index.d.ts.map +0 -1
- package/dist/globals/TermsOfUse/index.js.map +0 -1
- package/dist/globals/index.d.ts.map +0 -1
- package/dist/globals/index.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/tasks/index.d.ts.map +0 -1
- package/dist/tasks/index.js.map +0 -1
- package/dist/tasks/process-email-queue.d.ts.map +0 -1
- package/dist/tasks/process-email-queue.js.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/slug.d.ts.map +0 -1
- package/dist/types/slug.js.map +0 -1
- package/dist/utils/database-dates.d.ts.map +0 -1
- package/dist/utils/database-dates.js.map +0 -1
- package/dist/utils/email/generate-email-html.d.ts.map +0 -1
- package/dist/utils/email/generate-email-html.js.map +0 -1
- package/dist/utils/email/get-email-template.d.ts.map +0 -1
- package/dist/utils/email/get-email-template.js.map +0 -1
- package/dist/utils/email/index.d.ts.map +0 -1
- package/dist/utils/email/index.js.map +0 -1
- package/dist/utils/email/queue-email.d.ts.map +0 -1
- package/dist/utils/email/queue-email.js.map +0 -1
- package/dist/utils/get-global.d.ts.map +0 -1
- package/dist/utils/get-global.js.map +0 -1
- package/dist/utils/id-from-payload.d.ts.map +0 -1
- package/dist/utils/id-from-payload.js.map +0 -1
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/migrations.d.ts.map +0 -1
- package/dist/utils/migrations.js.map +0 -1
- package/dist/utils/payload-client.d.ts.map +0 -1
- package/dist/utils/payload-client.js.map +0 -1
- package/dist/utils/slugify.d.ts.map +0 -1
- package/dist/utils/slugify.js.map +0 -1
- /package/dist/{access → src/access}/adminAccessOnly.d.ts +0 -0
- /package/dist/{access → src/access}/adminAccessOnly.js +0 -0
- /package/dist/{access → src/access}/admins.d.ts +0 -0
- /package/dist/{access → src/access}/admins.js +0 -0
- /package/dist/{access → src/access}/anyone.d.ts +0 -0
- /package/dist/{access → src/access}/anyone.js +0 -0
- /package/dist/{access → src/access}/authenticated.d.ts +0 -0
- /package/dist/{access → src/access}/authenticated.js +0 -0
- /package/dist/{access → src/access}/authenticatedAccessOnly.d.ts +0 -0
- /package/dist/{access → src/access}/authenticatedAccessOnly.js +0 -0
- /package/dist/{access → src/access}/index.d.ts +0 -0
- /package/dist/{access → src/access}/index.js +0 -0
- /package/dist/{access → src/access}/publicReadAuthenticatedAccess.d.ts +0 -0
- /package/dist/{access → src/access}/publicReadAuthenticatedAccess.js +0 -0
- /package/dist/{collections → src/collections}/ContactMessages/hooks/sendEmailNotification.d.ts +0 -0
- /package/dist/{collections → src/collections}/ContactMessages/hooks/sendEmailNotification.js +0 -0
- /package/dist/{collections → src/collections}/ContactMessages/index.d.ts +0 -0
- /package/dist/{collections → src/collections}/ContactMessages/index.js +0 -0
- /package/dist/{collections → src/collections}/EmailTemplates/index.d.ts +0 -0
- /package/dist/{collections → src/collections}/EmailTemplates/index.js +0 -0
- /package/dist/{collections → src/collections}/Media/index.d.ts +0 -0
- /package/dist/{collections → src/collections}/Media/index.js +0 -0
- /package/dist/{collections → src/collections}/QueuedEmails/components/HtmlViewer.d.ts +0 -0
- /package/dist/{collections → src/collections}/QueuedEmails/components/HtmlViewer.js +0 -0
- /package/dist/{collections → src/collections}/QueuedEmails/components/RetryEmailButtons.d.ts +0 -0
- /package/dist/{collections → src/collections}/QueuedEmails/components/RetryEmailButtons.js +0 -0
- /package/dist/{collections → src/collections}/Users/auth-emails/forgot-password-email.d.ts +0 -0
- /package/dist/{collections → src/collections}/Users/auth-emails/forgot-password-email.js +0 -0
- /package/dist/{collections → src/collections}/Users/auth-emails/verify-email.d.ts +0 -0
- /package/dist/{collections → src/collections}/Users/auth-emails/verify-email.js +0 -0
- /package/dist/{collections → src/collections}/Users/hooks/ensureFirstUserIsAdmin.d.ts +0 -0
- /package/dist/{collections → src/collections}/Users/hooks/ensureFirstUserIsAdmin.js +0 -0
- /package/dist/{collections → src/collections}/Users/index.d.ts +0 -0
- /package/dist/{collections → src/collections}/Users/index.js +0 -0
- /package/dist/{collections → src/collections}/index.d.ts +0 -0
- /package/dist/{collections → src/collections}/index.js +0 -0
- /package/dist/{components → src/components}/index.d.ts +0 -0
- /package/dist/{components → src/components}/index.js +0 -0
- /package/dist/{forms → src/forms}/states.d.ts +0 -0
- /package/dist/{forms → src/forms}/states.js +0 -0
- /package/dist/{forms → src/forms}/translate-errors.d.ts +0 -0
- /package/dist/{forms → src/forms}/translate-errors.js +0 -0
- /package/dist/{forms → src/forms}/validators.d.ts +0 -0
- /package/dist/{forms → src/forms}/validators.js +0 -0
- /package/dist/{globals → src/globals}/PrivacyPolicy/hooks/revalidate-cache.d.ts +0 -0
- /package/dist/{globals → src/globals}/PrivacyPolicy/hooks/revalidate-cache.js +0 -0
- /package/dist/{globals → src/globals}/PrivacyPolicy/index.d.ts +0 -0
- /package/dist/{globals → src/globals}/PrivacyPolicy/index.js +0 -0
- /package/dist/{globals → src/globals}/TermsOfUse/hooks/revalidate-cache.d.ts +0 -0
- /package/dist/{globals → src/globals}/TermsOfUse/hooks/revalidate-cache.js +0 -0
- /package/dist/{globals → src/globals}/TermsOfUse/index.d.ts +0 -0
- /package/dist/{globals → src/globals}/TermsOfUse/index.js +0 -0
- /package/dist/{globals → src/globals}/index.d.ts +0 -0
- /package/dist/{globals → src/globals}/index.js +0 -0
- /package/dist/{index.d.ts → src/index.d.ts} +0 -0
- /package/dist/{index.js → src/index.js} +0 -0
- /package/dist/{tasks → src/tasks}/index.d.ts +0 -0
- /package/dist/{tasks → src/tasks}/index.js +0 -0
- /package/dist/{tasks → src/tasks}/process-email-queue.d.ts +0 -0
- /package/dist/{tasks → src/tasks}/process-email-queue.js +0 -0
- /package/dist/{types → src/types}/index.d.ts +0 -0
- /package/dist/{types → src/types}/index.js +0 -0
- /package/dist/{types → src/types}/slug.d.ts +0 -0
- /package/dist/{types → src/types}/slug.js +0 -0
- /package/dist/{utils → src/utils}/database-dates.d.ts +0 -0
- /package/dist/{utils → src/utils}/database-dates.js +0 -0
- /package/dist/{utils → src/utils}/email/generate-email-html.d.ts +0 -0
- /package/dist/{utils → src/utils}/email/generate-email-html.js +0 -0
- /package/dist/{utils → src/utils}/email/get-email-template.d.ts +0 -0
- /package/dist/{utils → src/utils}/email/get-email-template.js +0 -0
- /package/dist/{utils → src/utils}/email/index.d.ts +0 -0
- /package/dist/{utils → src/utils}/email/index.js +0 -0
- /package/dist/{utils → src/utils}/email/queue-email.d.ts +0 -0
- /package/dist/{utils → src/utils}/email/queue-email.js +0 -0
- /package/dist/{utils → src/utils}/get-global.d.ts +0 -0
- /package/dist/{utils → src/utils}/get-global.js +0 -0
- /package/dist/{utils → src/utils}/id-from-payload.d.ts +0 -0
- /package/dist/{utils → src/utils}/id-from-payload.js +0 -0
- /package/dist/{utils → src/utils}/index.d.ts +0 -0
- /package/dist/{utils → src/utils}/index.js +0 -0
- /package/dist/{utils → src/utils}/migrations.d.ts +0 -0
- /package/dist/{utils → src/utils}/migrations.js +0 -0
- /package/dist/{utils → src/utils}/payload-client.d.ts +0 -0
- /package/dist/{utils → src/utils}/payload-client.js +0 -0
- /package/dist/{utils → src/utils}/slugify.d.ts +0 -0
- /package/dist/{utils → src/utils}/slugify.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anyone.spec.js","sourceRoot":"","sources":["../../../../tests/unit/access/anyone.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAS,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAS,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,SAAS,EAAS,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,MAAM,CAAC,EAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,EAAS,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticated.spec.d.ts","sourceRoot":"","sources":["../../../../tests/unit/access/authenticated.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { authenticated, authenticatedFieldLevel } from '@/access/authenticated';
|
|
3
|
+
describe('authenticated access control', () => {
|
|
4
|
+
describe('authenticated', () => {
|
|
5
|
+
it('should return true for authenticated users', () => {
|
|
6
|
+
const req = { user: { id: 1, email: 'test@example.com' } };
|
|
7
|
+
expect(authenticated({ req })).toBe(true);
|
|
8
|
+
});
|
|
9
|
+
it('should return false for null user', () => {
|
|
10
|
+
const req = { user: null };
|
|
11
|
+
expect(authenticated({ req })).toBe(false);
|
|
12
|
+
});
|
|
13
|
+
it('should return false for undefined user', () => {
|
|
14
|
+
const req = { user: undefined };
|
|
15
|
+
expect(authenticated({ req })).toBe(false);
|
|
16
|
+
});
|
|
17
|
+
it('should return true for user with minimal properties', () => {
|
|
18
|
+
const req = { user: {} };
|
|
19
|
+
expect(authenticated({ req })).toBe(true);
|
|
20
|
+
});
|
|
21
|
+
it('should return true for user with roles', () => {
|
|
22
|
+
const req = { user: { roles: ['admin'] } };
|
|
23
|
+
expect(authenticated({ req })).toBe(true);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
describe('authenticatedFieldLevel', () => {
|
|
27
|
+
it('should return true for authenticated users', () => {
|
|
28
|
+
const params = { req: { user: { id: 1 } } };
|
|
29
|
+
expect(authenticatedFieldLevel(params)).toBe(true);
|
|
30
|
+
});
|
|
31
|
+
it('should return false for null user', () => {
|
|
32
|
+
const params = { req: { user: null } };
|
|
33
|
+
expect(authenticatedFieldLevel(params)).toBe(false);
|
|
34
|
+
});
|
|
35
|
+
it('should return false for undefined user', () => {
|
|
36
|
+
const params = { req: { user: undefined } };
|
|
37
|
+
expect(authenticatedFieldLevel(params)).toBe(false);
|
|
38
|
+
});
|
|
39
|
+
it('should return true for user object (even empty)', () => {
|
|
40
|
+
const params = { req: { user: {} } };
|
|
41
|
+
expect(authenticatedFieldLevel(params)).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=authenticated.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticated.spec.js","sourceRoot":"","sources":["../../../../tests/unit/access/authenticated.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticatedAccessOnly.spec.d.ts","sourceRoot":"","sources":["../../../../tests/unit/access/authenticatedAccessOnly.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { authenticatedAccessOnly } from '@/access/authenticatedAccessOnly';
|
|
3
|
+
describe('authenticatedAccessOnly access control', () => {
|
|
4
|
+
describe('admin property', () => {
|
|
5
|
+
it('should return true for authenticated users', () => {
|
|
6
|
+
const req = { user: { id: 1 } };
|
|
7
|
+
expect(authenticatedAccessOnly.admin({ req })).toBe(true);
|
|
8
|
+
});
|
|
9
|
+
it('should return false for unauthenticated users (null)', () => {
|
|
10
|
+
const req = { user: null };
|
|
11
|
+
expect(authenticatedAccessOnly.admin({ req })).toBe(false);
|
|
12
|
+
});
|
|
13
|
+
it('should return false for unauthenticated users (undefined)', () => {
|
|
14
|
+
const req = { user: undefined };
|
|
15
|
+
expect(authenticatedAccessOnly.admin({ req })).toBe(false);
|
|
16
|
+
});
|
|
17
|
+
it('should return true for empty user object', () => {
|
|
18
|
+
const req = { user: {} };
|
|
19
|
+
expect(authenticatedAccessOnly.admin({ req })).toBe(true);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe('create property', () => {
|
|
23
|
+
it('should return true for authenticated users', () => {
|
|
24
|
+
const req = { user: { id: 1 } };
|
|
25
|
+
expect(authenticatedAccessOnly.create({ req })).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
it('should return false for unauthenticated users', () => {
|
|
28
|
+
const req = { user: null };
|
|
29
|
+
expect(authenticatedAccessOnly.create({ req })).toBe(false);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
describe('read property', () => {
|
|
33
|
+
it('should return true for authenticated users', () => {
|
|
34
|
+
const req = { user: { id: 1 } };
|
|
35
|
+
expect(authenticatedAccessOnly.read({ req })).toBe(true);
|
|
36
|
+
});
|
|
37
|
+
it('should return false for unauthenticated users', () => {
|
|
38
|
+
const req = { user: null };
|
|
39
|
+
expect(authenticatedAccessOnly.read({ req })).toBe(false);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe('update property', () => {
|
|
43
|
+
it('should return true for authenticated users', () => {
|
|
44
|
+
const req = { user: { id: 1 } };
|
|
45
|
+
expect(authenticatedAccessOnly.update({ req })).toBe(true);
|
|
46
|
+
});
|
|
47
|
+
it('should return false for unauthenticated users', () => {
|
|
48
|
+
const req = { user: null };
|
|
49
|
+
expect(authenticatedAccessOnly.update({ req })).toBe(false);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe('delete property', () => {
|
|
53
|
+
it('should return true for authenticated users', () => {
|
|
54
|
+
const req = { user: { id: 1 } };
|
|
55
|
+
expect(authenticatedAccessOnly.delete({ req })).toBe(true);
|
|
56
|
+
});
|
|
57
|
+
it('should return false for unauthenticated users', () => {
|
|
58
|
+
const req = { user: null };
|
|
59
|
+
expect(authenticatedAccessOnly.delete({ req })).toBe(false);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe('readVersions property', () => {
|
|
63
|
+
it('should return true for authenticated users', () => {
|
|
64
|
+
const req = { user: { id: 1 } };
|
|
65
|
+
expect(authenticatedAccessOnly.readVersions({ req })).toBe(true);
|
|
66
|
+
});
|
|
67
|
+
it('should return false for unauthenticated users', () => {
|
|
68
|
+
const req = { user: null };
|
|
69
|
+
expect(authenticatedAccessOnly.readVersions({ req })).toBe(false);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe('unlock property', () => {
|
|
73
|
+
it('should return true for authenticated users', () => {
|
|
74
|
+
const req = { user: { id: 1 } };
|
|
75
|
+
expect(authenticatedAccessOnly.unlock({ req })).toBe(true);
|
|
76
|
+
});
|
|
77
|
+
it('should return false for unauthenticated users', () => {
|
|
78
|
+
const req = { user: null };
|
|
79
|
+
expect(authenticatedAccessOnly.unlock({ req })).toBe(false);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe('all properties work consistently', () => {
|
|
83
|
+
it('should allow all operations for authenticated users', () => {
|
|
84
|
+
const req = { user: { roles: ['user'] } };
|
|
85
|
+
expect(authenticatedAccessOnly.admin({ req })).toBe(true);
|
|
86
|
+
expect(authenticatedAccessOnly.create({ req })).toBe(true);
|
|
87
|
+
expect(authenticatedAccessOnly.read({ req })).toBe(true);
|
|
88
|
+
expect(authenticatedAccessOnly.update({ req })).toBe(true);
|
|
89
|
+
expect(authenticatedAccessOnly.delete({ req })).toBe(true);
|
|
90
|
+
expect(authenticatedAccessOnly.readVersions({ req })).toBe(true);
|
|
91
|
+
expect(authenticatedAccessOnly.unlock({ req })).toBe(true);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=authenticatedAccessOnly.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticatedAccessOnly.spec.js","sourceRoot":"","sources":["../../../../tests/unit/access/authenticatedAccessOnly.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publicReadAuthenticatedAccess.spec.d.ts","sourceRoot":"","sources":["../../../../tests/unit/access/publicReadAuthenticatedAccess.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { publicReadAuthenticatedAccess } from '@/access/publicReadAuthenticatedAccess';
|
|
3
|
+
describe('publicReadAuthenticatedAccess access control', () => {
|
|
4
|
+
describe('admin property', () => {
|
|
5
|
+
it('should return true for authenticated users', () => {
|
|
6
|
+
const req = { user: { id: 1 } };
|
|
7
|
+
expect(publicReadAuthenticatedAccess.admin({ req })).toBe(true);
|
|
8
|
+
});
|
|
9
|
+
it('should return false for unauthenticated users', () => {
|
|
10
|
+
const req = { user: null };
|
|
11
|
+
expect(publicReadAuthenticatedAccess.admin({ req })).toBe(false);
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
describe('read property (public access)', () => {
|
|
15
|
+
it('should return true for authenticated users', () => {
|
|
16
|
+
const req = { user: { id: 1 } };
|
|
17
|
+
expect(publicReadAuthenticatedAccess.read({ req })).toBe(true);
|
|
18
|
+
});
|
|
19
|
+
it('should return true for unauthenticated users (public read)', () => {
|
|
20
|
+
const req = { user: null };
|
|
21
|
+
expect(publicReadAuthenticatedAccess.read({ req })).toBe(true);
|
|
22
|
+
});
|
|
23
|
+
it('should return true with no user property', () => {
|
|
24
|
+
const req = {};
|
|
25
|
+
expect(publicReadAuthenticatedAccess.read({ req })).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
describe('create property (authenticated only)', () => {
|
|
29
|
+
it('should return true for authenticated users', () => {
|
|
30
|
+
const req = { user: { id: 1 } };
|
|
31
|
+
expect(publicReadAuthenticatedAccess.create({ req })).toBe(true);
|
|
32
|
+
});
|
|
33
|
+
it('should return false for unauthenticated users', () => {
|
|
34
|
+
const req = { user: null };
|
|
35
|
+
expect(publicReadAuthenticatedAccess.create({ req })).toBe(false);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
describe('update property (authenticated only)', () => {
|
|
39
|
+
it('should return true for authenticated users', () => {
|
|
40
|
+
const req = { user: { id: 1 } };
|
|
41
|
+
expect(publicReadAuthenticatedAccess.update({ req })).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
it('should return false for unauthenticated users', () => {
|
|
44
|
+
const req = { user: null };
|
|
45
|
+
expect(publicReadAuthenticatedAccess.update({ req })).toBe(false);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
describe('delete property (authenticated only)', () => {
|
|
49
|
+
it('should return true for authenticated users', () => {
|
|
50
|
+
const req = { user: { id: 1 } };
|
|
51
|
+
expect(publicReadAuthenticatedAccess.delete({ req })).toBe(true);
|
|
52
|
+
});
|
|
53
|
+
it('should return false for unauthenticated users', () => {
|
|
54
|
+
const req = { user: null };
|
|
55
|
+
expect(publicReadAuthenticatedAccess.delete({ req })).toBe(false);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
describe('readVersions property (authenticated only)', () => {
|
|
59
|
+
it('should return true for authenticated users', () => {
|
|
60
|
+
const req = { user: { id: 1 } };
|
|
61
|
+
expect(publicReadAuthenticatedAccess.readVersions({ req })).toBe(true);
|
|
62
|
+
});
|
|
63
|
+
it('should return false for unauthenticated users', () => {
|
|
64
|
+
const req = { user: null };
|
|
65
|
+
expect(publicReadAuthenticatedAccess.readVersions({ req })).toBe(false);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('unlock property (authenticated only)', () => {
|
|
69
|
+
it('should return true for authenticated users', () => {
|
|
70
|
+
const req = { user: { id: 1 } };
|
|
71
|
+
expect(publicReadAuthenticatedAccess.unlock({ req })).toBe(true);
|
|
72
|
+
});
|
|
73
|
+
it('should return false for unauthenticated users', () => {
|
|
74
|
+
const req = { user: null };
|
|
75
|
+
expect(publicReadAuthenticatedAccess.unlock({ req })).toBe(false);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe('access pattern verification', () => {
|
|
79
|
+
it('should allow read to everyone and other operations to authenticated users only', () => {
|
|
80
|
+
const authenticatedReq = { user: { id: 1 } };
|
|
81
|
+
const unauthenticatedReq = { user: null };
|
|
82
|
+
// Authenticated user can do everything
|
|
83
|
+
expect(publicReadAuthenticatedAccess.read({ req: authenticatedReq })).toBe(true);
|
|
84
|
+
expect(publicReadAuthenticatedAccess.create({ req: authenticatedReq })).toBe(true);
|
|
85
|
+
expect(publicReadAuthenticatedAccess.update({ req: authenticatedReq })).toBe(true);
|
|
86
|
+
expect(publicReadAuthenticatedAccess.delete({ req: authenticatedReq })).toBe(true);
|
|
87
|
+
// Unauthenticated user can only read
|
|
88
|
+
expect(publicReadAuthenticatedAccess.read({ req: unauthenticatedReq })).toBe(true);
|
|
89
|
+
expect(publicReadAuthenticatedAccess.create({ req: unauthenticatedReq })).toBe(false);
|
|
90
|
+
expect(publicReadAuthenticatedAccess.update({ req: unauthenticatedReq })).toBe(false);
|
|
91
|
+
expect(publicReadAuthenticatedAccess.delete({ req: unauthenticatedReq })).toBe(false);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=publicReadAuthenticatedAccess.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publicReadAuthenticatedAccess.spec.js","sourceRoot":"","sources":["../../../../tests/unit/access/publicReadAuthenticatedAccess.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.spec.d.ts","sourceRoot":"","sources":["../../../../tests/unit/forms/validators.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { requiredCheckbox, requiredEmailString, requiredPasswordString, requiredString, validHoneyPot } from '@/forms/validators';
|
|
3
|
+
describe('form validators', () => {
|
|
4
|
+
describe('requiredString', () => {
|
|
5
|
+
const validator = requiredString('This field is required');
|
|
6
|
+
it('should accept valid non-empty strings', () => {
|
|
7
|
+
const result = validator.safeParse('hello');
|
|
8
|
+
expect(result.success).toBe(true);
|
|
9
|
+
if (result.success) {
|
|
10
|
+
expect(result.data).toBe('hello');
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
it('should trim whitespace', () => {
|
|
14
|
+
const result = validator.safeParse(' hello ');
|
|
15
|
+
expect(result.success).toBe(true);
|
|
16
|
+
if (result.success) {
|
|
17
|
+
expect(result.data).toBe('hello');
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
it('should reject empty strings', () => {
|
|
21
|
+
const result = validator.safeParse('');
|
|
22
|
+
expect(result.success).toBe(false);
|
|
23
|
+
if (!result.success) {
|
|
24
|
+
expect(result.error.issues[0].message).toBe('This field is required');
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
it('should reject whitespace-only strings', () => {
|
|
28
|
+
const result = validator.safeParse(' ');
|
|
29
|
+
expect(result.success).toBe(false);
|
|
30
|
+
if (!result.success) {
|
|
31
|
+
expect(result.error.issues[0].message).toBe('This field is required');
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
it('should reject non-string values', () => {
|
|
35
|
+
const result = validator.safeParse(123);
|
|
36
|
+
expect(result.success).toBe(false);
|
|
37
|
+
});
|
|
38
|
+
it('should accept strings with numbers', () => {
|
|
39
|
+
const result = validator.safeParse('hello123');
|
|
40
|
+
expect(result.success).toBe(true);
|
|
41
|
+
});
|
|
42
|
+
it('should accept strings with special characters', () => {
|
|
43
|
+
const result = validator.safeParse('hello@world!');
|
|
44
|
+
expect(result.success).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
it('should use custom error message', () => {
|
|
47
|
+
const customValidator = requiredString('Custom error');
|
|
48
|
+
const result = customValidator.safeParse('');
|
|
49
|
+
expect(result.success).toBe(false);
|
|
50
|
+
if (!result.success) {
|
|
51
|
+
expect(result.error.issues[0].message).toBe('Custom error');
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe('requiredPasswordString', () => {
|
|
56
|
+
const validator = requiredPasswordString(8, 'Password is required', 'Password must be at least 8 characters');
|
|
57
|
+
it('should accept valid passwords meeting minimum length', () => {
|
|
58
|
+
const result = validator.safeParse('password123');
|
|
59
|
+
expect(result.success).toBe(true);
|
|
60
|
+
if (result.success) {
|
|
61
|
+
expect(result.data).toBe('password123');
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
it('should accept passwords exactly at minimum length', () => {
|
|
65
|
+
const result = validator.safeParse('12345678');
|
|
66
|
+
expect(result.success).toBe(true);
|
|
67
|
+
if (result.success) {
|
|
68
|
+
expect(result.data).toBe('12345678');
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
it('should reject passwords shorter than minimum length', () => {
|
|
72
|
+
const result = validator.safeParse('short');
|
|
73
|
+
expect(result.success).toBe(false);
|
|
74
|
+
if (!result.success) {
|
|
75
|
+
expect(result.error.issues[0].message).toBe('Password must be at least 8 characters');
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
it('should reject empty passwords', () => {
|
|
79
|
+
const result = validator.safeParse('');
|
|
80
|
+
expect(result.success).toBe(false);
|
|
81
|
+
if (!result.success) {
|
|
82
|
+
expect(result.error.issues[0].message).toBe('Password is required');
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
it('should trim whitespace before checking length', () => {
|
|
86
|
+
const result = validator.safeParse(' 12345678 ');
|
|
87
|
+
expect(result.success).toBe(true);
|
|
88
|
+
if (result.success) {
|
|
89
|
+
expect(result.data).toBe('12345678');
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
it('should reject whitespace-only passwords', () => {
|
|
93
|
+
const result = validator.safeParse(' ');
|
|
94
|
+
expect(result.success).toBe(false);
|
|
95
|
+
});
|
|
96
|
+
it('should handle different minimum lengths', () => {
|
|
97
|
+
const validator12 = requiredPasswordString(12, 'Required', 'Min 12 chars');
|
|
98
|
+
const resultShort = validator12.safeParse('password123');
|
|
99
|
+
expect(resultShort.success).toBe(false);
|
|
100
|
+
const resultValid = validator12.safeParse('password1234');
|
|
101
|
+
expect(resultValid.success).toBe(true);
|
|
102
|
+
});
|
|
103
|
+
it('should accept long passwords', () => {
|
|
104
|
+
const result = validator.safeParse('a'.repeat(100));
|
|
105
|
+
expect(result.success).toBe(true);
|
|
106
|
+
});
|
|
107
|
+
it('should accept passwords with special characters', () => {
|
|
108
|
+
const result = validator.safeParse('P@ssw0rd!');
|
|
109
|
+
expect(result.success).toBe(true);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
describe('requiredEmailString', () => {
|
|
113
|
+
const validator = requiredEmailString({
|
|
114
|
+
required: 'Email is required',
|
|
115
|
+
email: 'Invalid email address',
|
|
116
|
+
});
|
|
117
|
+
it('should accept valid email addresses', () => {
|
|
118
|
+
const validEmails = ['test@example.com', 'user.name@example.com', 'user+tag@example.co.uk', 'test123@test-domain.com'];
|
|
119
|
+
validEmails.forEach((email) => {
|
|
120
|
+
const result = validator.safeParse(email);
|
|
121
|
+
expect(result.success).toBe(true);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
it('should trim whitespace', () => {
|
|
125
|
+
const result = validator.safeParse(' test@example.com ');
|
|
126
|
+
expect(result.success).toBe(true);
|
|
127
|
+
if (result.success) {
|
|
128
|
+
expect(result.data).toBe('test@example.com');
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
it('should reject empty strings', () => {
|
|
132
|
+
const result = validator.safeParse('');
|
|
133
|
+
expect(result.success).toBe(false);
|
|
134
|
+
if (!result.success) {
|
|
135
|
+
expect(result.error.issues[0].message).toBe('Email is required');
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
it('should reject invalid email formats', () => {
|
|
139
|
+
const invalidEmails = ['notanemail', 'missing@domain', '@example.com', 'test@', 'test @example.com', 'test..double@example.com'];
|
|
140
|
+
invalidEmails.forEach((email) => {
|
|
141
|
+
const result = validator.safeParse(email);
|
|
142
|
+
expect(result.success).toBe(false);
|
|
143
|
+
if (!result.success) {
|
|
144
|
+
expect(result.error.issues[0].message).toBe('Invalid email address');
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
it('should reject whitespace-only strings', () => {
|
|
149
|
+
const result = validator.safeParse(' ');
|
|
150
|
+
expect(result.success).toBe(false);
|
|
151
|
+
if (!result.success) {
|
|
152
|
+
expect(result.error.issues[0].message).toBe('Email is required');
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
it('should use custom error messages', () => {
|
|
156
|
+
const customValidator = requiredEmailString({
|
|
157
|
+
required: 'Custom required message',
|
|
158
|
+
email: 'Custom email message',
|
|
159
|
+
});
|
|
160
|
+
const emptyResult = customValidator.safeParse('');
|
|
161
|
+
expect(emptyResult.success).toBe(false);
|
|
162
|
+
if (!emptyResult.success) {
|
|
163
|
+
expect(emptyResult.error.issues[0].message).toBe('Custom required message');
|
|
164
|
+
}
|
|
165
|
+
const invalidResult = customValidator.safeParse('invalid');
|
|
166
|
+
expect(invalidResult.success).toBe(false);
|
|
167
|
+
if (!invalidResult.success) {
|
|
168
|
+
expect(invalidResult.error.issues[0].message).toBe('Custom email message');
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
it('should handle edge case email formats', () => {
|
|
172
|
+
// These should be valid
|
|
173
|
+
const edgeCases = ['test_underscore@example.com', 'test-hyphen@example.com', 'a@b.co'];
|
|
174
|
+
edgeCases.forEach((email) => {
|
|
175
|
+
const result = validator.safeParse(email);
|
|
176
|
+
expect(result.success).toBe(true);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
describe('validHoneyPot', () => {
|
|
181
|
+
const validator = validHoneyPot('Bot detected');
|
|
182
|
+
it('should accept empty strings (legitimate users)', () => {
|
|
183
|
+
const result = validator.safeParse('');
|
|
184
|
+
expect(result.success).toBe(true);
|
|
185
|
+
if (result.success) {
|
|
186
|
+
expect(result.data).toBe('');
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
it('should reject non-empty strings (bots)', () => {
|
|
190
|
+
const result = validator.safeParse('I am a bot');
|
|
191
|
+
expect(result.success).toBe(false);
|
|
192
|
+
// Note: Zod refine uses generic "Invalid input" message by default
|
|
193
|
+
});
|
|
194
|
+
it('should reject single character', () => {
|
|
195
|
+
const result = validator.safeParse('x');
|
|
196
|
+
expect(result.success).toBe(false);
|
|
197
|
+
});
|
|
198
|
+
it('should reject whitespace', () => {
|
|
199
|
+
const result = validator.safeParse(' ');
|
|
200
|
+
expect(result.success).toBe(false);
|
|
201
|
+
});
|
|
202
|
+
it('should reject numbers', () => {
|
|
203
|
+
const result = validator.safeParse('123');
|
|
204
|
+
expect(result.success).toBe(false);
|
|
205
|
+
});
|
|
206
|
+
it('should use custom error message', () => {
|
|
207
|
+
const customValidator = validHoneyPot('Custom bot message');
|
|
208
|
+
const result = customValidator.safeParse('filled');
|
|
209
|
+
expect(result.success).toBe(false);
|
|
210
|
+
// Zod refine validation failed - message is set but overridden
|
|
211
|
+
});
|
|
212
|
+
it('should accept empty string consistently', () => {
|
|
213
|
+
// Multiple tests to ensure honeypot works as expected
|
|
214
|
+
expect(validator.safeParse('').success).toBe(true);
|
|
215
|
+
expect(validator.safeParse('anything').success).toBe(false);
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
describe('requiredCheckbox', () => {
|
|
219
|
+
const validator = requiredCheckbox('You must accept the terms');
|
|
220
|
+
it('should accept true', () => {
|
|
221
|
+
const result = validator.safeParse(true);
|
|
222
|
+
expect(result.success).toBe(true);
|
|
223
|
+
if (result.success) {
|
|
224
|
+
expect(result.data).toBe(true);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
it('should reject false', () => {
|
|
228
|
+
const result = validator.safeParse(false);
|
|
229
|
+
expect(result.success).toBe(false);
|
|
230
|
+
// Zod refine uses generic "Invalid input" message
|
|
231
|
+
});
|
|
232
|
+
it('should reject non-boolean values', () => {
|
|
233
|
+
const invalidValues = [1, 0, 'true', 'false', null, undefined, {}, []];
|
|
234
|
+
invalidValues.forEach((value) => {
|
|
235
|
+
const result = validator.safeParse(value);
|
|
236
|
+
expect(result.success).toBe(false);
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
it('should use custom error message', () => {
|
|
240
|
+
const customValidator = requiredCheckbox('Custom checkbox message');
|
|
241
|
+
const result = customValidator.safeParse(false);
|
|
242
|
+
expect(result.success).toBe(false);
|
|
243
|
+
// Zod refine validation - message set via errorMap but refine overrides
|
|
244
|
+
});
|
|
245
|
+
it('should only accept boolean true', () => {
|
|
246
|
+
// Truthy values should not work
|
|
247
|
+
expect(validator.safeParse(1).success).toBe(false);
|
|
248
|
+
expect(validator.safeParse('true').success).toBe(false);
|
|
249
|
+
expect(validator.safeParse(true).success).toBe(true);
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
describe('validators integration', () => {
|
|
253
|
+
it('should work together in a form schema', () => {
|
|
254
|
+
// Simulate a typical form validation
|
|
255
|
+
const formData = {
|
|
256
|
+
name: 'John Doe',
|
|
257
|
+
email: 'john@example.com',
|
|
258
|
+
password: 'SecurePassword123',
|
|
259
|
+
honeypot: '',
|
|
260
|
+
terms: true,
|
|
261
|
+
};
|
|
262
|
+
const nameResult = requiredString('Name required').safeParse(formData.name);
|
|
263
|
+
const emailResult = requiredEmailString({ required: 'Email required', email: 'Invalid email' }).safeParse(formData.email);
|
|
264
|
+
const passwordResult = requiredPasswordString(8, 'Password required', 'Min 8 chars').safeParse(formData.password);
|
|
265
|
+
const honeypotResult = validHoneyPot('Bot detected').safeParse(formData.honeypot);
|
|
266
|
+
const termsResult = requiredCheckbox('Accept terms').safeParse(formData.terms);
|
|
267
|
+
expect(nameResult.success).toBe(true);
|
|
268
|
+
expect(emailResult.success).toBe(true);
|
|
269
|
+
expect(passwordResult.success).toBe(true);
|
|
270
|
+
expect(honeypotResult.success).toBe(true);
|
|
271
|
+
expect(termsResult.success).toBe(true);
|
|
272
|
+
});
|
|
273
|
+
it('should catch all validation errors in invalid form', () => {
|
|
274
|
+
const invalidFormData = {
|
|
275
|
+
name: '',
|
|
276
|
+
email: 'invalid',
|
|
277
|
+
password: 'short',
|
|
278
|
+
honeypot: 'bot-filled',
|
|
279
|
+
terms: false,
|
|
280
|
+
};
|
|
281
|
+
const nameResult = requiredString('Name required').safeParse(invalidFormData.name);
|
|
282
|
+
const emailResult = requiredEmailString({ required: 'Email required', email: 'Invalid email' }).safeParse(invalidFormData.email);
|
|
283
|
+
const passwordResult = requiredPasswordString(8, 'Password required', 'Min 8 chars').safeParse(invalidFormData.password);
|
|
284
|
+
const honeypotResult = validHoneyPot('Bot detected').safeParse(invalidFormData.honeypot);
|
|
285
|
+
const termsResult = requiredCheckbox('Accept terms').safeParse(invalidFormData.terms);
|
|
286
|
+
expect(nameResult.success).toBe(false);
|
|
287
|
+
expect(emailResult.success).toBe(false);
|
|
288
|
+
expect(passwordResult.success).toBe(false);
|
|
289
|
+
expect(honeypotResult.success).toBe(false);
|
|
290
|
+
expect(termsResult.success).toBe(false);
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
//# sourceMappingURL=validators.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.spec.js","sourceRoot":"","sources":["../../../../tests/unit/forms/validators.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-dates.spec.d.ts","sourceRoot":"","sources":["../../../../tests/unit/utils/database-dates.spec.ts"],"names":[],"mappings":""}
|