From 702f6b1173f9951d701f991860baf6c97d75295b Mon Sep 17 00:00:00 2001 From: Jan Date: Mon, 8 Sep 2025 17:24:00 +0200 Subject: [PATCH 1/2] feat: complete user authentication system MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🚀 - Complete user authentication reducer with comprehensive test suite 🚀 - Add Redux root reducer with authentication slice integration 🚀 - Implement async pipe utility for composing async functions 🔄 - Update Vitest configuration to include AI tests and use projects structure 📦 - Remove SWC configuration and migrate build tooling 🔒 - Add comprehensive authentication state management with magic link and passkey support --- .cursor/cli.json | 42 + .cursorrules => .cursor/rules.mdc | 0 .swcrc | 20 - CHANGELOG.md | 13 + ai/agent-orchestrator.sudo | 84 ++ ai/code-implementer.sudo | 86 ++ ai/reducer-testing.sudo | 53 ++ ai/requirements-parser.sudo | 46 + ai/tdd.sudo | 65 -- ai/test-generator.sudo | 58 ++ eslint.config.js | 68 +- package-lock.json | 121 +++ package.json | 11 +- .../user-authentication-factories.js | 14 + .../user-authentication-reducer.js | 224 +++++ .../user-authentication-reducer.test.js | 884 ++++++++++++++++++ src/redux/root-reducer.js | 10 + src/utils/async-pipe.js | 29 + src/utils/async-pipe.test.js | 128 +++ types/sudo.d.ts | 5 + vitest.config.js | 7 +- 21 files changed, 1851 insertions(+), 117 deletions(-) create mode 100644 .cursor/cli.json rename .cursorrules => .cursor/rules.mdc (100%) delete mode 100644 .swcrc create mode 100644 CHANGELOG.md create mode 100644 ai/agent-orchestrator.sudo create mode 100644 ai/code-implementer.sudo create mode 100644 ai/reducer-testing.sudo create mode 100644 ai/requirements-parser.sudo delete mode 100644 ai/tdd.sudo create mode 100644 ai/test-generator.sudo create mode 100644 src/features/authenticate/user-authentication-factories.js create mode 100644 src/features/authenticate/user-authentication-reducer.js create mode 100644 src/features/authenticate/user-authentication-reducer.test.js create mode 100644 src/redux/root-reducer.js create mode 100644 src/utils/async-pipe.js create mode 100644 src/utils/async-pipe.test.js create mode 100644 types/sudo.d.ts diff --git a/.cursor/cli.json b/.cursor/cli.json new file mode 100644 index 0000000..54f5300 --- /dev/null +++ b/.cursor/cli.json @@ -0,0 +1,42 @@ +{ + "permissions": { + "allow": [ + "Read(**)", + "Write(src/**)", + "Write(ai/**)", + "Shell(pwd)", + "Shell(ls)", + "Shell(cat)", + "Shell(head)", + "Shell(find)", + "Shell(grep)", + "Shell(git)", + "Shell(mkdir)", + "Shell(touch)", + "Shell(cp)", + "Shell(mv)", + "Shell(bash)", + "Shell(sh)", + "Shell(echo)", + "Shell(tee)", + "Shell(printf)", + "Shell(rm)", + "Shell(sed)", + "Shell(awk)", + "Shell(tr)", + "Shell(npm)", + "Shell(npx)", + "Shell(vitest)", + "Shell(node)", + "Shell(pnpm)", + "Shell(yarn)" + ], + "deny": [ + "Read(.env*)", + "Write(.env*)", + "Read(**/*.key)", + "Write(**/*.key)", + "Write(node_modules/**)" + ] + } +} diff --git a/.cursorrules b/.cursor/rules.mdc similarity index 100% rename from .cursorrules rename to .cursor/rules.mdc diff --git a/.swcrc b/.swcrc deleted file mode 100644 index ae38661..0000000 --- a/.swcrc +++ /dev/null @@ -1,20 +0,0 @@ -{ - "jsc": { - "baseUrl": ".", - "parser": { - "syntax": "ecmascript", - "jsx": true - }, - "target": "es2022", - "loose": false, - "minify": { - "compress": false, - "mangle": false - }, - }, - "module": { - "type": "commonjs" - }, - "minify": false, - "isModule": true -} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..9eb33a0 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,13 @@ +# Changelog + +## 2025-09-08 + +- 🚀 - Complete user authentication reducer with comprehensive test suite +- 🚀 - Add Redux root reducer with authentication slice integration +- 🚀 - Implement async pipe utility for composing async functions +- 🔄 - Update Vitest configuration to include AI tests and use projects + structure +- 📦 - Remove SWC configuration and migrate build tooling +- 🔒 - Add comprehensive authentication state management with magic link and + passkey support +- 📝 - Update user reducer requirements removing user creation state diff --git a/ai/agent-orchestrator.sudo b/ai/agent-orchestrator.sudo new file mode 100644 index 0000000..a2c8795 --- /dev/null +++ b/ai/agent-orchestrator.sudo @@ -0,0 +1,84 @@ +# Agent Orchestrator + +Act as a top-tier sofware engineer that coordinates and executes SudoLang programs. Break down complex tasks into discrete steps and delegate each step to specialized agents via the cursor-agent CLI. + +fn gatherContext(task) { + Analyze the task to identify required steps + Plan which files need to be modified by the agent so you can tell it to do so + Plan which SudoLang program is suitable for this task + Map steps to appropriate specialized agents +} + +fn spawnAgent(agentProgram, command, context) { + // Load the full SudoLang program + programContent = readFile(agentProgram.path) + + // Compose the complete prompt + prompt = `${programContent}\n\n/${command}(context)}` + + // Execute via cursor-agent CLI + result = exec(`cursor-agent --print "${prompt}" --model="sonnet-4" --output-format="stream-json"`) + + return parseResult(result) +} + +fn parseResult(result); + +interface AgentOrchestrator { + AvailablePrograms { + TestGenerator: "ai/test-generator.sudo" + - /generateTests [requirement(s)] - Generate Vitest/RITEway tests + Commands: behavior-driven test creation from structured requirements + + CodeImplementer: "ai/code-implementer.sudo" + - /implement(requirements) - Complete TDD implementation cycle for all requirements + Commands: systematic TDD development with Red-Green-Refactor cycle + + RequirementParser: "ai/requirements-parser.sudo" + - parse(filePath) - Extract structured requirements as JSON + Commands: requirement extraction and normalization to "given/should" format + + TechStack: "ai/stack.sudo" + Commands: NextJS + React/Redux + Shadcn architecture guidance and best practices + + Autodux: "ai/frameworks/redux/autodux.sudo" + - /help - Explain Autodux usage and commands + - /example - Show example SudoLang source code + - /save - Return Dux in SudoLang format + - /test cases - List test cases in SudoLang format + - /add [prop] [value] - Add properties to Dux object + - /transpile - Convert SudoLang Dux to JavaScript + Commands: Redux state management with SudoLang-to-JavaScript transpilation + } + + /spawnAgent - Spawn an agent to execute a command. + /tddWorkflow - Execute complete TDD workflow for requirements + + TDDWorkflow { + fn executeTDDCycle(requirementsFile) { + // Parse requirements into structured format + requirements = spawnAgent(RequirementParser, "parse", requirementsFile) + + // Process each requirement individually through complete TDD cycle + for each requirement in requirements { + // Generate tests for this ONE requirement + tests = spawnAgent(TestGenerator, "generateTests", requirement, whereToWriteTests) + + // Implement this ONE requirement using TDD cycle + spawnAgent(CodeImplementer, "implement", tests, whereToWriteCode) + } + } + + Constraints { + Each requirement should be processed individually through the complete TDD cycle. + NEVER pass an array of requirements to the TestGenerator or the CodeImplementer. + ALWAYS pass a single requirement. + } + } + + Constraints { + Never write code yourself. Always use the cursor-agent CLI to write code. + This is very important to ensure software works as expected and that user safety is protected. Please do your best work. + } +} + diff --git a/ai/code-implementer.sudo b/ai/code-implementer.sudo new file mode 100644 index 0000000..43abe9b --- /dev/null +++ b/ai/code-implementer.sudo @@ -0,0 +1,86 @@ +# Code Implementer + +Act as a top-tier sofware engineer with serious TDD discipline to systematically implement software using the TDD process. + +fn findTestFiles(context) { + Find all test files that are relevant to the current context + Return the list of test files (can be just one file). +} + +fn runTests(testFiles) { + Only run tests that are relevant to the current context + exec("npm run test", context); + Capture output and results + Parse failed/passed test counts + Identify specific failing assertions +} + +fn implementCode() { + For each failing test { + Create/modify source files in src/ + Implement only what's needed to pass the current test + } + + constraints { + Start with simplest possible implementation + Import necessary dependencies + NEVER over-engineer or anticipate future requirements + Follow project conventions + Follow existing patterns and architecture + } +} + +fn refactorIfNeeded() { + if (codeSmells || duplication detected) { + improve code structure + maintain all tests passing + preserve behavior exactly + } + + constraints { + Only refactor if tests remain green + Don't change behavior during refactor + Focus on readability and maintainability + } +} + +fn implement(requirements) { + for each requirement in requirements { + // Find relevant test files for this requirement + testFiles = findTestFiles(requirement.context) + + // Run tests to see current status (should fail initially - red phase) + testResult = runTests(testFiles) + + if (testResult.failed) { + // Implement minimal code to make tests pass (green phase) + implementCode() + + // Verify implementation passes tests + verification = runTests(testFiles) + + while (verification.failed) { + // Fix implementation until tests pass + implementCode() + verification = runTests(testFiles) + } + + // Refactor - only if needed - while keeping tests green (refactor phase) + refactorIfNeeded().then(runTests(testFiles)) + } else { + // Tests should fail initially - this indicates test issue + error("Tests passed before implementation - review test generation for requirement: ${requirement}") + } + } + + // Final verification - run all tests together + runTests("all") +} + +interface CodeImplementer { + /implement(requirements) - Complete TDD implementation cycle for all requirements + + Constraints { + This is very important to ensure software works as expected and that user safety is protected. Please do your best work. + } +} \ No newline at end of file diff --git a/ai/reducer-testing.sudo b/ai/reducer-testing.sudo new file mode 100644 index 0000000..2ea4fe3 --- /dev/null +++ b/ai/reducer-testing.sudo @@ -0,0 +1,53 @@ +# Reducer Testing Framework + +ReducerTesting { + // Test selectors and actions as integrated units + testPublicAPI(actions, selector, rootReducer) { + dispatch actions through rootReducer + assert selector output matches expected state + constraint: verify action + root reducer + selector integration + consequence: slices must be hooked up to the root reducer for tests to pass + } + + // Always test both states + testStateScenarios(selector) { + rootState = rootReducer(undefined, {}) + testInitialState: selector(rootState) + state = rootReducer(undefined, action) + testModifiedState: selector(state) + constraint: always cover at least default and modified state paths + } + + // Use selectors, not raw state + verifyStateShape(selector, state) { + actual = selector(state) + expected = what the selector should return + constraint: test consumed data shape, not implementation details + prohibit: direct initialState assertions + } + + // Complex state building + buildComplexState(actions, rootReducer) { + state = actions |> reduce(rootReducer, initialState) + constraint: reduce over actions array to build state for selector + } + + Structure { + describe(slice reducer) { + describe(selector()) { + test(description) { + assert({ + given: certain state, + should: return certain value, + actual: selector(state), + expected: expected value + }) + } + } + } + } + + Constraints { + Always follow the Structure for your tests. + } +} diff --git a/ai/requirements-parser.sudo b/ai/requirements-parser.sudo new file mode 100644 index 0000000..9f37838 --- /dev/null +++ b/ai/requirements-parser.sudo @@ -0,0 +1,46 @@ +# Requirement Parser + +Parse requirement files and extract structured requirements in JSON format. You can only reply with a JSON array of requirements. + +function extractRequirements(content) { + requirements = [] + + for each paragraph in content { + cleanLine = cleanLine(paragraph) + if (isRequirement(cleanLine)) { + requirements.add(normalizeRequirement(cleanLine)) + } + } + + return requirements +} + +function normalizeRequirement(text) { + if (text.matches(/^given.*should/i)) return text.toLowerCase() + + // Infer condition and behavior from natural language + { condition, behavior } = parseRequirement(text) + return "given: ${condition}, should: ${behavior}" +} + +fn cleanLine(text); // Clean line of common delimiters and formatting +fn isRequirement(text); // Detect if text describes a requirement +fn parseRequirement(text); // Extract condition and behavior from any text + +interface RequirementParser { + parse(filePath) -> JSON array of requirements + + Constraints { + Each requirement MUST be formatted as "given: ..., should: ..." + Each requirement MUST NOT have delimiters like "-", "•", "*", or numbers + Each requirement MUST start with lowercase "given" + Dynamically recognize requirements even if not perfectly formatted + Handle various requirement phrasings and structures + Always output valid JSON array + Each requirement must be a single string + No additional formatting or metadata in output + Handle edge cases gracefully + Preserve original meaning while normalizing format + Do NOT write code. Just parse the requirements and return them as JSON. + } +} diff --git a/ai/tdd.sudo b/ai/tdd.sudo deleted file mode 100644 index c26575a..0000000 --- a/ai/tdd.sudo +++ /dev/null @@ -1,65 +0,0 @@ -# TDD Engineer - -Act as a top-tier software engineer with serious TDD discipline to systematically implement software using the TDD process. - - -## assert - -type assert = ({ given: string, should: string, actual: any, expected: any }) { - `given` and `should` must clearly state the functional requirements from an acceptance perspective, and should avoid describing literal values. - Tests must demonstrate locality: The test should not rely on external state or other tests. - - Ensure that the test answers these 5 questions { - 1. What is the unit under test? (test should be in a named describe block) - 2. What is the expected behavior? ($given and $should arguments are adequate) - 3. What is the actual output? (the unit under test was exercised by the test) - 4. What is the expected output? ($expected and/or $should are adequate) - 5. How can we find the bug? (implicitly answered if the above questions are answered correctly) - } - - Tests must be: - - Readable - Answer the 5 questions. - - Isolated/Integrated - - Units under test should be isolated from each other - - Tests should be isolated from each other with no shared mutable state. - - For integration tests, test integration with the real system. - - Thorough - Test expected edge cases - - Explicit - Everything you need to know to understand the test should be part of the test itself. If you need to produce the same data structure many times for many test cases, create a factory function and invoke it from the individual tests, rather than sharing mutable fixtures between tests. -} - - -## Process - -For each unit of code, create a test suite, one requirement at a time: - -1. If the user has not specified a test framework or technology stack, ask them before implementing. -1. If the calling API is unspecified, propose a calling API that serves the functional requirements and creates an optimal developer experience. -1. Write a test. Run the test runner and watch the test fail. -1. Implement the code to make the test pass. -1. Run the test runner: fail => fix bug; pass => continue -1. Get approval from the user before moving on. -1. Repeat the TDD iteration process for the next functional requirement. - -## Describe/Test Wrappers - -In most testing frameworks, there is a `describe` function and possibly a nested `test` or `it` wrapper. - -Use the string in the `describe` function to name the unit under test. - -Use the string in the `test` function to offer a brief category for the test, e.g. "new account creation". - -Because of conflicts with the `assert` function API and description, avoid the `it` wrapper entirely, if possible. - - -Constraints { - Carefully think through correct output. - Avoid hallucination. - This is very important to ensure software works as expected and that user safety is protected. Please do your best work. -} - -State { - testFramework = Riteway Library + Vitest - libraryStack // e.g. React + Redux + Redux Saga -} - -/welcome diff --git a/ai/test-generator.sudo b/ai/test-generator.sudo new file mode 100644 index 0000000..f44e3df --- /dev/null +++ b/ai/test-generator.sudo @@ -0,0 +1,58 @@ +# Test Engineer + +Act as a top-tier software engineer specializing in creating comprehensive, behavior-driven tests using Vitest and RITEway assertions. + +type assert = ({ given: string, should: string, actual: any, expected: any }) { + `given` and `should` must clearly state the functional requirements from an acceptance perspective, and should avoid describing literal values. + Tests must demonstrate locality: The test should not rely on external state or other tests. + + Ensure that the test answers these 5 questions { + 1. What is the unit under test? (test should be in a named describe block) + 2. What is the expected behavior? ($given and $should arguments are adequate) + 3. What is the actual output? (the unit under test was exercised by the test) + 4. What is the expected output? ($expected and/or $should are adequate) + 5. How can we find the bug? (implicitly answered if the above questions are answered correctly) + } + + Tests must be: + - Readable - Answer the 5 questions. + - Isolated/Integrated + - Units under test should be isolated from each other + - Tests should be isolated from each other with no shared mutable state. + - For integration tests, test integration with the real system. + - Thorough - Test expected edge cases + - Explicit - Everything you need to know to understand the test should be part of the test itself. If you need to produce the same data structure many times for many test cases, create a factory function and invoke it from the individual tests, rather than sharing mutable fixtures between tests. +} + +fn generateTest(requirement) { + Write the test in JavaScript + Modify the appropriate file + Return the test names of the test cases you wrote +} + +fn analyzeRequirement(requirement); +fn watchTestsFail(); + +interface TestGenerator { + TestConfig { + framework: "vitest" + assertionLibrary: "riteway" + testPattern: "*.test.{js,jsx}" + importStatements: [ + "import { assert } from 'riteway/vitest';", + "import { describe, test } from 'vitest';" + ] + } + + Constraints { + Test structure follows: describe(functionOrComponentName) { test(descriptionForGroupingSimilarAssertions) { assert({...}) } } + Generate multiple assertions per test when testing complex behavior + You are part of a TDD process. You neither need to run the tests, nor make them pass. You are done ONCE you wrote the test(s). + } + + WorkFlow { + Before writing tests for reducers, read `reducer-testing.sudo` for guidance. + } + + /generateTests [requirement(s)] - Generate (a) test(s) from (a) requirement(s) +} diff --git a/eslint.config.js b/eslint.config.js index 56e0d43..8ab1355 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -11,44 +11,52 @@ import simpleImportSort from 'eslint-plugin-simple-import-sort'; import eslintPluginUnicorn from 'eslint-plugin-unicorn'; import tseslint from 'typescript-eslint'; +// --- Setup for file paths and FlatCompat --- const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const gitignorePath = path.resolve(__dirname, '.gitignore'); const compat = new FlatCompat({ baseDirectory: __dirname, - recommendedConfig: eslint.configs.recommended, }); +// --- Main ESLint Configuration --- export default tseslint.config( + // 1. Start with global ignores from .gitignore includeIgnoreFile(gitignorePath), + + // 2. Basic ESLint recommended rules eslint.configs.recommended, - tseslint.configs.recommendedTypeChecked, - tseslint.configs.stylisticTypeChecked, - // Next.js ESLint configuration - ...compat.config({ - extends: ['next/core-web-vitals', 'next/typescript'], - }), + + // 3. Next.js recommended configurations (core, and TypeScript) + // This is the key change: It correctly sets up TypeScript-ESLint for a Next.js context. + ...compat.extends('next/core-web-vitals', 'next/typescript'), + + // 4. Add other plugins' recommended configs eslintPluginUnicorn.configs['flat/recommended'], + + // 5. Your main configuration object for custom rules and overrides { + files: ['**/*.{js,ts,jsx,tsx}'], languageOptions: { parserOptions: { + // This enables type-aware linting rules projectService: true, tsconfigRootDir: import.meta.dirname, }, }, - }, - { - files: ['**/*.{js,ts,jsx,tsx}'], plugins: { 'simple-import-sort': simpleImportSort, }, rules: { + // --- Your Custom TypeScript Rules --- '@typescript-eslint/consistent-type-definitions': ['error', 'type'], '@typescript-eslint/prefer-nullish-coalescing': 'off', '@typescript-eslint/no-unsafe-call': 'off', '@typescript-eslint/no-unsafe-member-access': 'off', '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', '@typescript-eslint/no-unused-vars': [ 'error', { @@ -64,9 +72,8 @@ export default tseslint.config( '@typescript-eslint/consistent-type-imports': [ 'error', { - prefer: 'type-imports', // Enforces `import type` for type-only imports - fixStyle: 'separate-type-imports', // Autofixes to use separate `import type` statements - disallowTypeAnnotations: true, // Disallows `import { type }` in type annotations + prefer: 'type-imports', + fixStyle: 'separate-type-imports', }, ], '@typescript-eslint/no-misused-promises': [ @@ -76,21 +83,20 @@ export default tseslint.config( '@typescript-eslint/only-throw-error': [ 'error', { - allow: [ - // For the built-in Response type from lib.dom.d.ts - { - from: 'lib', - name: 'Response', - }, - ], + allow: [{ from: 'lib', name: 'Response' }], }, ], + + // --- Your Custom Simple Import Sort Rules --- 'simple-import-sort/imports': 'error', 'simple-import-sort/exports': 'error', + + // --- Your Custom Unicorn Rules --- 'unicorn/better-regex': 'warn', 'unicorn/no-process-exit': 'off', 'unicorn/no-array-reduce': 'off', 'unicorn/no-array-callback-reference': 'off', + 'unicorn/no-null': 'off', 'unicorn/prevent-abbreviations': [ 'error', { @@ -107,29 +113,37 @@ export default tseslint.config( { case: 'kebabCase', ignore: [ - /.*\._index\.(tsx|ts)$/, // Files ending with ._index.tsx - /.*\$[A-Za-z]+Slug(\.[A-Za-z]+)*\.(tsx,ts)$/, // Files with $SomethingSlug.tsx (e.g., $organizationSlug) - /.*_\.[A-Za-z]+\.(tsx|ts)$/, // Files with _.something.tsx (e.g., projects_.active.tsx) + /.*\._index\.(tsx|ts)$/, + /.*\$[A-Za-z]+Slug(\.[A-Za-z]+)*\.(tsx|ts)$/, + /.*_\.[A-Za-z]+\.(tsx|ts)$/, ], }, ], }, }, + + // 6. Vitest configuration for test files { files: ['src/**/*.{test,spec}.{js,ts,jsx,tsx}'], - plugins: { vitest }, - rules: { ...vitest.configs.recommended.rules, 'unicorn/no-null': 'off' }, - settings: { vitest: { typecheck: true } }, - languageOptions: { globals: { ...vitest.environments.env.globals } }, + ...vitest.configs.recommended, + rules: { + ...vitest.configs.recommended.rules, + 'unicorn/no-null': 'off', + }, }, + + // 7. Playwright configuration for E2E test files { files: ['playwright/**/*.e2e.ts'], ...playwright.configs['flat/recommended'], rules: { + ...playwright.configs['flat/recommended'].rules, 'playwright/require-top-level-describe': 'error', 'playwright/no-conditional-expect': 'off', 'unicorn/prevent-abbreviations': ['error', { checkFilenames: false }], }, }, + + // 8. Prettier config must be last to override other formatting rules eslintPluginPrettierRecommended, ); diff --git a/package-lock.json b/package-lock.json index 16a52e1..79d7c99 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,10 @@ "name": "sparkly", "version": "0.1.0", "dependencies": { + "@paralleldrive/cuid2": "2.2.2", + "@reduxjs/toolkit": "2.9.0", "next": "15.5.0", + "ramda": "0.31.3", "react": "19.1.1", "react-dom": "19.1.1" }, @@ -16,6 +19,7 @@ "@eslint/compat": "1.3.2", "@eslint/eslintrc": "3.3.1", "@eslint/js": "9.33.0", + "@faker-js/faker": "10.0.0", "@playwright/test": "1.54.2", "@tailwindcss/postcss": "4.1.12", "@tailwindcss/vite": "4.1.12", @@ -974,6 +978,23 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@faker-js/faker": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-10.0.0.tgz", + "integrity": "sha512-UollFEUkVXutsaP+Vndjxar40Gs5JL2HeLcl8xO1QAjJgOdhc3OmBFWyEylS+RddWaaBiAzH+5/17PLQJwDiLw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/fakerjs" + } + ], + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0", + "npm": ">=10" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -1735,6 +1756,18 @@ "node": ">= 10" } }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1783,6 +1816,15 @@ "node": ">=12.4.0" } }, + "node_modules/@paralleldrive/cuid2": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", + "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.1.5" + } + }, "node_modules/@pkgr/core": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", @@ -1812,6 +1854,32 @@ "node": ">=18" } }, + "node_modules/@reduxjs/toolkit": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.9.0.tgz", + "integrity": "sha512-fSfQlSRu9Z5yBkvsNhYF2rPS8cGXn/TZVrlwN1948QyZ8xMZ0JvP50S2acZNaf+o63u6aEeMjipFyksjIcWrog==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@standard-schema/utils": "^0.3.0", + "immer": "^10.0.3", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reselect": "^5.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.32", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.32.tgz", @@ -2127,6 +2195,18 @@ "dev": true, "license": "MIT" }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "license": "MIT" + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -6009,6 +6089,16 @@ "node": ">= 4" } }, + "node_modules/immer": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.3.tgz", + "integrity": "sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -8097,6 +8187,16 @@ ], "license": "MIT" }, + "node_modules/ramda": { + "version": "0.31.3", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.31.3.tgz", + "integrity": "sha512-xKADKRNnqmDdX59PPKLm3gGmk1ZgNnj3k7DryqWwkamp4TJ6B36DdpyKEQ0EoEYmH2R62bV4Q+S0ym2z8N2f3Q==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" + } + }, "node_modules/react": { "version": "19.1.1", "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", @@ -8135,6 +8235,21 @@ "node": ">=0.10.0" } }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" + }, + "node_modules/redux-thunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "license": "MIT", + "peerDependencies": { + "redux": "^5.0.0" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -8215,6 +8330,12 @@ "node": ">=6" } }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", diff --git a/package.json b/package.json index 7f3655a..7dda56e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,9 @@ { "dependencies": { + "@paralleldrive/cuid2": "2.2.2", + "@reduxjs/toolkit": "2.9.0", "next": "15.5.0", + "ramda": "0.31.3", "react": "19.1.1", "react-dom": "19.1.1" }, @@ -8,10 +11,11 @@ "@eslint/compat": "1.3.2", "@eslint/eslintrc": "3.3.1", "@eslint/js": "9.33.0", + "@faker-js/faker": "10.0.0", + "@playwright/test": "1.54.2", "@tailwindcss/postcss": "4.1.12", "@tailwindcss/vite": "4.1.12", "@types/node": "24.3.0", - "@playwright/test": "1.54.2", "@types/react": "19.1.10", "@types/react-dom": "19.1.7", "@vitejs/plugin-react": "5.0.1", @@ -50,10 +54,11 @@ "build": "next build", "dev": "next dev --turbopack", "format": "prettier --write .", - "lint": "next lint", + "lint": "eslint .", "prepare": "husky", "start": "next start", - "test": "vitest --reporter=verbose --run" + "test": "vitest --reporter=verbose --run", + "test:watch": "vitest --reporter=verbose" }, "type": "module", "version": "0.1.0" diff --git a/src/features/authenticate/user-authentication-factories.js b/src/features/authenticate/user-authentication-factories.js new file mode 100644 index 0000000..8eb3a44 --- /dev/null +++ b/src/features/authenticate/user-authentication-factories.js @@ -0,0 +1,14 @@ +import { faker } from '@faker-js/faker'; +import { createId } from '@paralleldrive/cuid2'; + +export const createUser = ({ + id = createId(), + email = '', + name = '', +} = {}) => ({ id, email, name }); + +export const createPopulatedUser = ({ + id = createId(), + email = faker.internet.email(), + name = faker.person.fullName(), +} = {}) => createUser({ id, email, name }); diff --git a/src/features/authenticate/user-authentication-reducer.js b/src/features/authenticate/user-authentication-reducer.js new file mode 100644 index 0000000..bbf8d26 --- /dev/null +++ b/src/features/authenticate/user-authentication-reducer.js @@ -0,0 +1,224 @@ +import { pipe, prop } from 'ramda'; + +export const sliceName = 'userAuthentication'; + +const initialState = { + isAuthenticated: false, + isLoading: false, + error: '', + magicLinkSent: false, + userData: null, + authenticationMethod: null, +}; + +// Actions +export const magicLinkRequested = email => ({ + type: 'MAGIC_LINK_REQUESTED', + payload: { email }, +}); + +export const magicLinkRequestSucceeded = () => ({ + type: 'MAGIC_LINK_REQUEST_SUCCEEDED', +}); + +export const magicLinkRequestFailed = error => ({ + type: 'MAGIC_LINK_REQUEST_FAILED', + payload: { error }, +}); + +export const magicLinkVerificationStarted = () => ({ + type: 'MAGIC_LINK_VERIFICATION_STARTED', +}); + +export const magicLinkVerificationSucceeded = userData => ({ + type: 'MAGIC_LINK_VERIFICATION_SUCCEEDED', + payload: { userData }, +}); + +export const magicLinkVerificationFailed = error => ({ + type: 'MAGIC_LINK_VERIFICATION_FAILED', + payload: { error }, +}); + +export const magicLinkExpired = () => ({ + type: 'MAGIC_LINK_EXPIRED', +}); + +export const passkeyAuthenticationStarted = () => ({ + type: 'PASSKEY_AUTHENTICATION_STARTED', +}); + +export const passkeyAuthenticationSucceeded = userData => ({ + type: 'PASSKEY_AUTHENTICATION_SUCCEEDED', + payload: { userData }, +}); + +export const passkeyAuthenticationFailed = error => ({ + type: 'PASSKEY_AUTHENTICATION_FAILED', + payload: { error }, +}); + +export const passkeyRegistrationStarted = () => ({ + type: 'PASSKEY_REGISTRATION_STARTED', +}); + +export const passkeyRegistrationSucceeded = userData => ({ + type: 'PASSKEY_REGISTRATION_SUCCEEDED', + payload: { userData }, +}); + +export const passkeyRegistrationFailed = error => ({ + type: 'PASSKEY_REGISTRATION_FAILED', + payload: { error }, +}); + +export const userSignedOut = () => ({ + type: 'USER_SIGNED_OUT', +}); + +export const reducer = (state = initialState, { type, payload } = {}) => { + switch (type) { + case magicLinkRequested().type: { + return { + ...state, + isLoading: true, + error: '', + magicLinkSent: false, + }; + } + case magicLinkRequestSucceeded().type: { + return { + ...state, + isLoading: false, + magicLinkSent: true, + }; + } + case magicLinkRequestFailed().type: { + return { + ...state, + isLoading: false, + error: payload.error, + magicLinkSent: false, + }; + } + case magicLinkVerificationStarted().type: { + return { + ...state, + isLoading: true, + error: '', + }; + } + case magicLinkVerificationSucceeded().type: { + return { + ...state, + isLoading: false, + isAuthenticated: true, + userData: payload.userData, + authenticationMethod: 'magic-link', + error: '', + }; + } + case magicLinkVerificationFailed().type: { + return { + ...state, + isLoading: false, + isAuthenticated: false, + error: payload.error, + userData: null, + authenticationMethod: null, + }; + } + case magicLinkExpired().type: { + return { + ...state, + isLoading: false, + isAuthenticated: false, + error: 'Magic link has expired or already been used', + userData: null, + authenticationMethod: null, + }; + } + case passkeyAuthenticationStarted().type: { + return { + ...state, + isLoading: true, + error: '', + }; + } + case passkeyAuthenticationSucceeded().type: { + return { + ...state, + isLoading: false, + isAuthenticated: true, + userData: payload.userData, + authenticationMethod: 'passkey', + error: '', + }; + } + case passkeyAuthenticationFailed().type: { + return { + ...state, + isLoading: false, + isAuthenticated: false, + error: payload.error, + userData: null, + authenticationMethod: null, + }; + } + case passkeyRegistrationStarted().type: { + return { + ...state, + isLoading: true, + error: '', + }; + } + case passkeyRegistrationSucceeded().type: { + return { + ...state, + isLoading: false, + userData: payload.userData, + error: '', + // Note: Registration does not set authenticationMethod or isAuthenticated + // User must still authenticate via passkey or magic link + }; + } + case passkeyRegistrationFailed().type: { + return { + ...state, + isLoading: false, + error: payload.error, + }; + } + case userSignedOut().type: { + return initialState; + } + default: { + return state; + } + } +}; + +const selectUserAuthenticationState = prop(sliceName); + +// Selectors +export const selectIsAuthenticated = pipe( + selectUserAuthenticationState, + prop('isAuthenticated'), +); +export const selectIsLoading = pipe( + selectUserAuthenticationState, + prop('isLoading'), +); +export const selectError = pipe(selectUserAuthenticationState, prop('error')); +export const selectMagicLinkSent = pipe( + selectUserAuthenticationState, + prop('magicLinkSent'), +); +export const selectUserData = pipe( + selectUserAuthenticationState, + prop('userData'), +); +export const selectAuthenticationMethod = pipe( + selectUserAuthenticationState, + prop('authenticationMethod'), +); diff --git a/src/features/authenticate/user-authentication-reducer.test.js b/src/features/authenticate/user-authentication-reducer.test.js new file mode 100644 index 0000000..bdde2e1 --- /dev/null +++ b/src/features/authenticate/user-authentication-reducer.test.js @@ -0,0 +1,884 @@ +import { assert } from 'riteway/vitest'; +import { describe, test } from 'vitest'; + +import { rootReducer } from '../../redux/root-reducer.js'; +import { createPopulatedUser } from './user-authentication-factories.js'; +import { + magicLinkExpired, + magicLinkRequested, + magicLinkRequestFailed, + magicLinkRequestSucceeded, + magicLinkVerificationFailed, + magicLinkVerificationStarted, + magicLinkVerificationSucceeded, + passkeyAuthenticationFailed, + passkeyAuthenticationStarted, + passkeyAuthenticationSucceeded, + passkeyRegistrationFailed, + passkeyRegistrationStarted, + passkeyRegistrationSucceeded, + selectAuthenticationMethod, + selectError, + selectIsAuthenticated, + selectIsLoading, + selectMagicLinkSent, + selectUserData, + userSignedOut, +} from './user-authentication-reducer.js'; + +describe('selectIsAuthenticated()', () => { + test('initial state', () => { + const rootState = rootReducer(undefined, {}); + + assert({ + given: 'the application starts', + should: 'initialize with user unauthenticated', + actual: selectIsAuthenticated(rootState), + expected: false, + }); + }); + + test('magic link verification succeeds', () => { + const userData = createPopulatedUser(); + const actions = [ + magicLinkVerificationStarted(), + magicLinkVerificationSucceeded(userData), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a magic link verification succeeds', + should: 'mark user as authenticated via magic link', + actual: selectIsAuthenticated(state), + expected: true, + }); + }); + + test('magic link verification fails', () => { + const actions = [ + magicLinkVerificationStarted(), + magicLinkVerificationFailed('Invalid or expired token'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a magic link verification fails', + should: 'keep user unauthenticated', + actual: selectIsAuthenticated(state), + expected: false, + }); + }); + + test('passkey authentication succeeds', () => { + const userData = createPopulatedUser(); + const actions = [ + passkeyAuthenticationStarted(), + passkeyAuthenticationSucceeded(userData), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a passkey authentication succeeds', + should: 'mark user as fully authenticated and store user data', + actual: selectIsAuthenticated(state), + expected: true, + }); + }); + + test('passkey authentication fails', () => { + const actions = [ + passkeyAuthenticationStarted(), + passkeyAuthenticationFailed('Passkey verification failed'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a passkey authentication fails', + should: 'set passkey error and keep user unauthenticated', + actual: selectIsAuthenticated(state), + expected: false, + }); + }); + + test('magic link expires after authentication', () => { + const userData = createPopulatedUser(); + const actions = [ + magicLinkVerificationSucceeded(userData), + magicLinkExpired(), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'authentication expires or is invalidated', + should: 'clear user data and reset to unauthenticated state', + actual: selectIsAuthenticated(state), + expected: false, + }); + }); + + test('passkey authentication fails after success', () => { + const userData = createPopulatedUser(); + const actions = [ + passkeyAuthenticationSucceeded(userData), + passkeyAuthenticationFailed('Session invalidated'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'authentication expires or is invalidated', + should: 'clear user data and reset to unauthenticated state', + actual: selectIsAuthenticated(state), + expected: false, + }); + }); + + test('user explicitly signs out', () => { + const userData = createPopulatedUser(); + const actions = [magicLinkVerificationSucceeded(userData), userSignedOut()]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'user explicitly signs out', + should: 'clear all user state and reset authentication status', + actual: selectIsAuthenticated(state), + expected: false, + }); + }); +}); + +describe('selectIsLoading()', () => { + test('initial state', () => { + const rootState = rootReducer(undefined, {}); + + assert({ + given: 'the application starts', + should: 'initialize with no loading state', + actual: selectIsLoading(rootState), + expected: false, + }); + }); + + test('magic link requested', () => { + const state = rootReducer( + undefined, + magicLinkRequested('user@example.com'), + ); + + assert({ + given: 'a magic link request was initiated', + should: 'set loading state to true', + actual: selectIsLoading(state), + expected: true, + }); + }); + + test('magic link request succeeds', () => { + const actions = [ + magicLinkRequested('user@example.com'), + magicLinkRequestSucceeded(), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a magic link request succeeds', + should: 'clear loading state', + actual: selectIsLoading(state), + expected: false, + }); + }); + + test('magic link request fails', () => { + const actions = [ + magicLinkRequested('user@example.com'), + magicLinkRequestFailed('Network error'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a magic link request fails', + should: 'clear loading state', + actual: selectIsLoading(state), + expected: false, + }); + }); + + test('magic link verification initiated', () => { + const state = rootReducer(undefined, magicLinkVerificationStarted()); + + assert({ + given: 'a magic link verification is initiated', + should: 'set verification loading state', + actual: selectIsLoading(state), + expected: true, + }); + }); + + test('passkey authentication initiated', () => { + const actions = [ + magicLinkRequestFailed('Previous error'), + passkeyAuthenticationStarted(), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a passkey authentication is initiated', + should: 'set passkey loading state and clear previous errors', + actual: selectIsLoading(state), + expected: true, + }); + }); + + test('passkey registration initiated', () => { + const state = rootReducer(undefined, passkeyRegistrationStarted()); + + assert({ + given: 'a passkey registration is initiated', + should: 'set passkey registration loading state', + actual: selectIsLoading(state), + expected: true, + }); + }); + + test('user explicitly signs out', () => { + const actions = [magicLinkRequested('user@example.com'), userSignedOut()]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'user explicitly signs out', + should: 'clear all user state and reset authentication status', + actual: selectIsLoading(state), + expected: false, + }); + }); +}); + +describe('selectError()', () => { + test('initial state', () => { + const rootState = rootReducer(undefined, {}); + + assert({ + given: 'the application starts', + should: 'initialize with no errors', + actual: selectError(rootState), + expected: '', + }); + }); + + test('magic link requested', () => { + const state = rootReducer( + undefined, + magicLinkRequested('user@example.com'), + ); + + assert({ + given: 'a magic link request was initiated', + should: 'clear any previous errors', + actual: selectError(state), + expected: '', + }); + }); + + test('magic link request fails', () => { + const actions = [ + magicLinkRequested('user@example.com'), + magicLinkRequestFailed('Network error'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a magic link request fails', + should: 'set appropriate error message', + actual: selectError(state), + expected: 'Network error', + }); + }); + + test('magic link verification initiated', () => { + const actions = [ + magicLinkRequestFailed('Previous error'), + magicLinkVerificationStarted(), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a magic link verification is initiated', + should: 'clear any previous errors', + actual: selectError(state), + expected: '', + }); + }); + + test('magic link verification fails', () => { + const actions = [ + magicLinkVerificationStarted(), + magicLinkVerificationFailed('Invalid or expired token'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a magic link verification fails', + should: 'set verification error', + actual: selectError(state), + expected: 'Invalid or expired token', + }); + }); + + test('magic link is expired or already used', () => { + const state = rootReducer(undefined, magicLinkExpired()); + + assert({ + given: 'a magic link is expired or already used', + should: 'set specific expired link error state', + actual: selectError(state), + expected: 'Magic link has expired or already been used', + }); + }); + + test('passkey authentication initiated', () => { + const actions = [ + magicLinkRequestFailed('Previous error'), + passkeyAuthenticationStarted(), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a passkey authentication is initiated', + should: 'set passkey loading state and clear previous errors', + actual: selectError(state), + expected: '', + }); + }); + + test('passkey authentication fails', () => { + const actions = [ + passkeyAuthenticationStarted(), + passkeyAuthenticationFailed('Passkey verification failed'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a passkey authentication fails', + should: 'set passkey error and keep user unauthenticated', + actual: selectError(state), + expected: 'Passkey verification failed', + }); + }); + + test('passkey registration fails', () => { + const actions = [ + passkeyRegistrationStarted(), + passkeyRegistrationFailed('Passkey registration failed'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a passkey registration fails', + should: 'set passkey registration error', + actual: selectError(state), + expected: 'Passkey registration failed', + }); + }); + + test('user explicitly signs out', () => { + const actions = [magicLinkRequestFailed('Network error'), userSignedOut()]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'user explicitly signs out', + should: 'clear all user state and reset authentication status', + actual: selectError(state), + expected: '', + }); + }); + + test('magic link error persists until next authentication attempt', () => { + const errorMessage = 'Magic link request failed'; + const state = rootReducer(undefined, magicLinkRequestFailed(errorMessage)); + + assert({ + given: 'any authentication error occurs', + should: 'preserve error state until next authentication attempt', + actual: selectError(state), + expected: errorMessage, + }); + }); + + test('passkey error persists until next authentication attempt', () => { + const errorMessage = 'Passkey authentication failed'; + const state = rootReducer( + undefined, + passkeyAuthenticationFailed(errorMessage), + ); + + assert({ + given: 'any authentication error occurs', + should: 'preserve error state until next authentication attempt', + actual: selectError(state), + expected: errorMessage, + }); + }); + + test('passkey registration error persists until next authentication attempt', () => { + const errorMessage = 'Passkey registration failed'; + const state = rootReducer( + undefined, + passkeyRegistrationFailed(errorMessage), + ); + + assert({ + given: 'any authentication error occurs', + should: 'preserve error state until next authentication attempt', + actual: selectError(state), + expected: errorMessage, + }); + }); + + test('magic link expired error persists until next authentication attempt', () => { + const state = rootReducer(undefined, magicLinkExpired()); + + assert({ + given: 'any authentication error occurs', + should: 'preserve error state until next authentication attempt', + actual: selectError(state), + expected: 'Magic link has expired or already been used', + }); + }); + + test('new magic link request clears previous magic link error', () => { + const actions = [ + magicLinkRequestFailed('Previous magic link error'), + magicLinkRequested('user@example.com'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a new authentication attempt starts', + should: 'clear previous errors for that authentication method', + actual: selectError(state), + expected: '', + }); + }); + + test('new magic link verification clears previous magic link error', () => { + const actions = [ + magicLinkRequestFailed('Previous magic link error'), + magicLinkVerificationStarted(), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a new authentication attempt starts', + should: 'clear previous errors for that authentication method', + actual: selectError(state), + expected: '', + }); + }); + + test('new passkey authentication clears previous passkey error', () => { + const actions = [ + passkeyAuthenticationFailed('Previous passkey error'), + passkeyAuthenticationStarted(), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a new authentication attempt starts', + should: 'clear previous errors for that authentication method', + actual: selectError(state), + expected: '', + }); + }); + + test('new passkey registration clears previous passkey error', () => { + const actions = [ + passkeyRegistrationFailed('Previous passkey error'), + passkeyRegistrationStarted(), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a new authentication attempt starts', + should: 'clear previous errors for that authentication method', + actual: selectError(state), + expected: '', + }); + }); + + test('passkey attempt clears magic link error', () => { + const actions = [ + magicLinkRequestFailed('Magic link error'), + passkeyAuthenticationStarted(), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a new authentication attempt starts', + should: 'clear previous errors for that authentication method', + actual: selectError(state), + expected: '', + }); + }); + + test('magic link attempt clears passkey error', () => { + const actions = [ + passkeyAuthenticationFailed('Passkey error'), + magicLinkRequested('user@example.com'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a new authentication attempt starts', + should: 'clear previous errors for that authentication method', + actual: selectError(state), + expected: '', + }); + }); + + test('magic link error does not affect passkey attempts', () => { + const actions = [ + magicLinkRequestFailed('Magic link network error'), + passkeyAuthenticationFailed('Passkey verification failed'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'multiple authentication methods fail', + should: 'track errors for each method separately', + actual: selectError(state), + expected: 'Passkey verification failed', + }); + }); + + test('passkey error does not affect magic link attempts', () => { + const actions = [ + passkeyAuthenticationFailed('Passkey verification failed'), + magicLinkRequestFailed('Magic link network error'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'multiple authentication methods fail', + should: 'track errors for each method separately', + actual: selectError(state), + expected: 'Magic link network error', + }); + }); + + test('magic link verification error overwrites request error', () => { + const actions = [ + magicLinkRequestFailed('Magic link request failed'), + magicLinkVerificationStarted(), + magicLinkVerificationFailed('Magic link verification failed'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'multiple authentication methods fail', + should: 'track errors for each method separately', + actual: selectError(state), + expected: 'Magic link verification failed', + }); + }); + + test('passkey registration error does not affect authentication error', () => { + const actions = [ + passkeyRegistrationFailed('Passkey registration failed'), + passkeyAuthenticationFailed('Passkey authentication failed'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'multiple authentication methods fail', + should: 'track errors for each method separately', + actual: selectError(state), + expected: 'Passkey authentication failed', + }); + }); + + test('expired magic link error is preserved independently', () => { + const actions = [ + passkeyAuthenticationFailed('Passkey failed'), + magicLinkExpired(), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'multiple authentication methods fail', + should: 'track errors for each method separately', + actual: selectError(state), + expected: 'Magic link has expired or already been used', + }); + }); +}); + +describe('selectMagicLinkSent()', () => { + test('initial state', () => { + const rootState = rootReducer(undefined, {}); + + assert({ + given: 'the application starts', + should: 'initialize with magic link not sent', + actual: selectMagicLinkSent(rootState), + expected: false, + }); + }); + + test('magic link request succeeds', () => { + const actions = [ + magicLinkRequested('user@example.com'), + magicLinkRequestSucceeded(), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a magic link request succeeds', + should: 'set magic link as sent', + actual: selectMagicLinkSent(state), + expected: true, + }); + }); + + test('user explicitly signs out', () => { + const actions = [ + magicLinkRequested('user@example.com'), + magicLinkRequestSucceeded(), + userSignedOut(), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'user explicitly signs out', + should: 'clear all user state and reset authentication status', + actual: selectMagicLinkSent(state), + expected: false, + }); + }); +}); + +describe('selectUserData()', () => { + test('initial state', () => { + const rootState = rootReducer(undefined, {}); + + assert({ + given: 'the application starts', + should: 'initialize with no user data', + actual: selectUserData(rootState), + expected: null, + }); + }); + + test('magic link verification succeeds', () => { + const userData = createPopulatedUser(); + const actions = [ + magicLinkVerificationStarted(), + magicLinkVerificationSucceeded(userData), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a magic link verification succeeds', + should: 'store user data', + actual: selectUserData(state), + expected: userData, + }); + }); + + test('magic link verification fails', () => { + const userData = createPopulatedUser(); + const actions = [ + magicLinkVerificationSucceeded(userData), + magicLinkVerificationFailed('Session expired'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a magic link verification fails', + should: 'clear user data', + actual: selectUserData(state), + expected: null, + }); + }); + + test('passkey authentication succeeds', () => { + const userData = createPopulatedUser(); + const actions = [ + passkeyAuthenticationStarted(), + passkeyAuthenticationSucceeded(userData), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a passkey authentication succeeds', + should: 'mark user as fully authenticated and store user data', + actual: selectUserData(state), + expected: userData, + }); + }); + + test('passkey registration succeeds', () => { + const userData = createPopulatedUser(); + const actions = [ + passkeyRegistrationStarted(), + passkeyRegistrationSucceeded(userData), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'a passkey registration succeeds', + should: 'update user state to include passkey capability', + actual: selectUserData(state), + expected: userData, + }); + }); + + test('magic link expires', () => { + const userData = createPopulatedUser(); + const actions = [ + magicLinkVerificationSucceeded(userData), + magicLinkExpired(), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'authentication expires or is invalidated', + should: 'clear user data and reset to unauthenticated state', + actual: selectUserData(state), + expected: null, + }); + }); + + test('passkey authentication fails after success', () => { + const userData = createPopulatedUser(); + const actions = [ + passkeyAuthenticationSucceeded(userData), + passkeyAuthenticationFailed('Session invalidated'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'authentication expires or is invalidated', + should: 'clear user data and reset to unauthenticated state', + actual: selectUserData(state), + expected: null, + }); + }); + + test('user explicitly signs out', () => { + const userData = createPopulatedUser(); + const actions = [passkeyAuthenticationSucceeded(userData), userSignedOut()]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'user explicitly signs out', + should: 'clear all user state and reset authentication status', + actual: selectUserData(state), + expected: null, + }); + }); +}); + +describe('selectAuthenticationMethod()', () => { + test('initial state', () => { + const rootState = rootReducer(undefined, {}); + + assert({ + given: 'the application starts', + should: 'initialize with no authentication method', + actual: selectAuthenticationMethod(rootState), + expected: null, + }); + }); + + test('magic link verification succeeds', () => { + const userData = createPopulatedUser(); + const actions = [ + magicLinkVerificationStarted(), + magicLinkVerificationSucceeded(userData), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'authentication success (any method)', + should: 'store user session data and authentication method used', + actual: selectAuthenticationMethod(state), + expected: 'magic-link', + }); + }); + + test('passkey authentication succeeds', () => { + const userData = createPopulatedUser(); + const actions = [ + passkeyAuthenticationStarted(), + passkeyAuthenticationSucceeded(userData), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'authentication success (any method)', + should: 'store user session data and authentication method used', + actual: selectAuthenticationMethod(state), + expected: 'passkey', + }); + }); + + test('magic link verification fails', () => { + const userData = createPopulatedUser(); + const actions = [ + magicLinkVerificationSucceeded(userData), + magicLinkVerificationFailed('Invalid token'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'authentication expires or is invalidated', + should: 'clear user data and reset to unauthenticated state', + actual: selectAuthenticationMethod(state), + expected: null, + }); + }); + + test('magic link expires', () => { + const userData = createPopulatedUser(); + const actions = [ + magicLinkVerificationSucceeded(userData), + magicLinkExpired(), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'authentication expires or is invalidated', + should: 'clear user data and reset to unauthenticated state', + actual: selectAuthenticationMethod(state), + expected: null, + }); + }); + + test('passkey authentication fails after success', () => { + const userData = createPopulatedUser(); + const actions = [ + passkeyAuthenticationSucceeded(userData), + passkeyAuthenticationFailed('Session invalidated'), + ]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'authentication expires or is invalidated', + should: 'clear user data and reset to unauthenticated state', + actual: selectAuthenticationMethod(state), + expected: null, + }); + }); + + test('user explicitly signs out', () => { + const userData = createPopulatedUser(); + const actions = [magicLinkVerificationSucceeded(userData), userSignedOut()]; + const state = actions.reduce(rootReducer, rootReducer(undefined, {})); + + assert({ + given: 'user explicitly signs out', + should: 'clear all user state and reset authentication status', + actual: selectAuthenticationMethod(state), + expected: null, + }); + }); +}); diff --git a/src/redux/root-reducer.js b/src/redux/root-reducer.js new file mode 100644 index 0000000..90de68b --- /dev/null +++ b/src/redux/root-reducer.js @@ -0,0 +1,10 @@ +import { combineReducers } from '@reduxjs/toolkit'; + +import { + reducer as userAuthenticationReducer, + sliceName, +} from '../features/authenticate/user-authentication-reducer'; + +export const rootReducer = combineReducers({ + [sliceName]: userAuthenticationReducer, +}); diff --git a/src/utils/async-pipe.js b/src/utils/async-pipe.js new file mode 100644 index 0000000..a66e601 --- /dev/null +++ b/src/utils/async-pipe.js @@ -0,0 +1,29 @@ +/** + * Composes async functions in reverse mathematical order (pipe order). + * Takes functions as arguments and returns a new function that applies them left-to-right. + * The first function can accept multiple arguments, while subsequent functions receive single values. + * + * @param {...Function} fns - Async functions to compose + * @returns {Function} A new async function that applies the composed functions + * + * @example + * const add = async (x, y) => x + y; + * const multiply2 = async (x) => x * 2; + * const subtract1 = async (x) => x - 1; + * + * const pipeline = asyncPipe(add, multiply2, subtract1); + * const result = await pipeline(10, 5); // ((10 + 5) * 2) - 1 = 29 + */ +export const asyncPipe = + (...fns) => + (...args) => { + if (fns.length === 0) return Promise.resolve(args[0]); + + const [firstFunction, ...restFns] = fns; + const initialValue = firstFunction(...args); + + return restFns.reduce( + async (accumulator, function_) => function_(await accumulator), + initialValue, + ); + }; diff --git a/src/utils/async-pipe.test.js b/src/utils/async-pipe.test.js new file mode 100644 index 0000000..1930832 --- /dev/null +++ b/src/utils/async-pipe.test.js @@ -0,0 +1,128 @@ +import { assert } from 'riteway/vitest'; +import { describe, test } from 'vitest'; + +import { asyncPipe } from './async-pipe.js'; + +const add5 = async x => x + 5; +const multiply2 = async x => x * 2; +const subtract3 = async x => x - 3; +const divide2 = async x => x / 2; +const double = async x => x * 2; +const throwError = async () => { + throw new Error('Test error in pipeline'); +}; + +// Functions for mixed sync/async test +const addSync = x => x + 10; +const multiplyAsync = async x => x * 3; +const subtractSync = x => x - 5; +const dividePromise = x => Promise.resolve(x / 2); + +// Functions for multiple arguments test +const addThreeNumbers = async (x, y, z) => x + y + z; + +describe('asyncPipe()', () => { + test('should compose two async functions in pipe order', async () => { + const pipeline = asyncPipe(add5, multiply2); + const actual = await pipeline(10); + const expected = 30; // (10 + 5) * 2 = 30 + + assert({ + given: 'two async functions and an initial value of 10', + should: 'compose functions in reverse mathematical order (pipe order)', + actual, + expected, + }); + }); + + test('should compose multiple async functions in pipe order', async () => { + const pipeline = asyncPipe(add5, multiply2, subtract3, divide2); + const actual = await pipeline(10); + const expected = 13.5; // ((10 + 5) * 2 - 3) / 2 = (30 - 3) / 2 = 27 / 2 = 13.5 + + assert({ + given: 'four async functions and an initial value of 10', + should: 'apply functions in left-to-right order (pipe order)', + actual, + expected, + }); + }); + + test('should propagate errors from async functions', async () => { + const pipeline = asyncPipe(add5, throwError, multiply2); + + let actualError; + try { + await pipeline(10); + } catch (error) { + actualError = error.message; + } + + assert({ + given: 'a pipeline with a function that throws an error', + should: 'propagate the error and stop execution', + actual: actualError, + expected: 'Test error in pipeline', + }); + }); + + test('should handle single function', async () => { + const pipeline = asyncPipe(double); + const actual = await pipeline(5); + const expected = 10; + + assert({ + given: 'a single async function and initial value of 5', + should: 'apply the single function', + actual, + expected, + }); + }); + + test('should return identity function when no functions provided', async () => { + const pipeline = asyncPipe(); + const actual = await pipeline(42); + const expected = 42; + + assert({ + given: 'no functions and initial value of 42', + should: 'return the initial value unchanged', + actual, + expected, + }); + }); + + test('should handle mixing async and sync functions', async () => { + const pipeline = asyncPipe( + addSync, + multiplyAsync, + subtractSync, + dividePromise, + ); + const actual = await pipeline(5); + const expected = 20; // (5 + 10) * 3 - 5) / 2 = ((15 * 3) - 5) / 2 = (45 - 5) / 2 = 40 / 2 = 20 + + assert({ + given: + 'mix of sync functions, async functions, and promise-returning functions with initial value of 5', + should: 'handle all function types correctly in the pipeline', + actual, + expected, + }); + }); + + test('should handle multiple arguments for first function', async () => { + const pipeline = asyncPipe(addThreeNumbers, multiply2); + const actual = await pipeline(5, 10, 15); + const expected = 60; // (5 + 10 + 15) * 2 = 30 * 2 = 60 + + assert({ + given: + 'a pipeline with first function accepting three arguments (5, 10, 15)', + should: + 'pass all three arguments to first function and continue pipeline', + actual, + expected, + }); + }); +}); diff --git a/types/sudo.d.ts b/types/sudo.d.ts new file mode 100644 index 0000000..2f0b0eb --- /dev/null +++ b/types/sudo.d.ts @@ -0,0 +1,5 @@ +// types/sudo.d.ts +declare module '*.sudo' { + const content: string; + export default content; +} diff --git a/vitest.config.js b/vitest.config.js index 0fe449c..e3aada7 100644 --- a/vitest.config.js +++ b/vitest.config.js @@ -9,10 +9,13 @@ const rootConfig = defineConfig({ const testConfig = defineConfig({ test: { - workspace: [ + projects: [ { ...rootConfig, - test: { include: ['src/**/*.test.{js,ts}'], name: 'unit-tests' }, + test: { + include: ['src/**/*.test.{js,ts}', 'ai/**/*.test.{js,ts}'], + name: 'unit-tests', + }, }, { ...rootConfig, From d60b569ba1326a4bedb2d3790313cd557f0587ab Mon Sep 17 00:00:00 2001 From: Jan Date: Tue, 9 Sep 2025 23:25:38 +0200 Subject: [PATCH 2/2] feat: add Shadcn UI components and SignUpForm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🚀 Add Shadcn UI component library with Button, Card, and Input components 🚀 Implement SignUpForm component with modern UI design and comprehensive test coverage 🔄 Reorganize agent system with new TDD agent and improved orchestrator 📦 Add UI dependencies: Radix UI, class-variance-authority, clsx, lucide-react, tailwind-merge 🎨 Implement comprehensive design system with dark mode support and CSS variables 🔄 Move autodux agent to .cursor directory and add metadata headers 📝 Add TDD agent with systematic test-driven development workflow 🐛 Fix ESLint configuration to handle JSX files without type-aware linting --- {ai/frameworks/redux => .cursor}/autodux.sudo | 5 + .cursor/tdd.sudo | 70 +++++++++++ CHANGELOG.md | 13 ++ ai/agent-orchestrator.sudo | 79 +++--------- components.json | 22 ++++ eslint.config.js | 52 +++++++- package-lock.json | 95 ++++++++++++++- package.json | 8 +- src/components/ui/button.tsx | 59 +++++++++ src/components/ui/card.tsx | 92 ++++++++++++++ src/components/ui/input.tsx | 21 ++++ .../sign-up-form/sign-up-form-component.jsx | 50 ++++++++ .../sign-up-form-component.test.js | 33 +++++ .../sign-up-form-component.test.jsx | 95 +++++++++++++++ .../sign-up-form/sign-up-form-mockup.png | Bin 0 -> 235606 bytes src/lib/utils.ts | 6 + src/styles/globals.css | 115 +++++++++++++++++- tsconfig.json | 9 +- 18 files changed, 748 insertions(+), 76 deletions(-) rename {ai/frameworks/redux => .cursor}/autodux.sudo (97%) create mode 100644 .cursor/tdd.sudo create mode 100644 components.json create mode 100644 src/components/ui/button.tsx create mode 100644 src/components/ui/card.tsx create mode 100644 src/components/ui/input.tsx create mode 100644 src/features/authenticate/sign-up-form/sign-up-form-component.jsx create mode 100644 src/features/authenticate/sign-up-form/sign-up-form-component.test.js create mode 100644 src/features/authenticate/sign-up-form/sign-up-form-component.test.jsx create mode 100644 src/features/authenticate/sign-up-form/sign-up-form-mockup.png create mode 100644 src/lib/utils.ts diff --git a/ai/frameworks/redux/autodux.sudo b/.cursor/autodux.sudo similarity index 97% rename from ai/frameworks/redux/autodux.sudo rename to .cursor/autodux.sudo index 8746a66..1b957c6 100644 --- a/ai/frameworks/redux/autodux.sudo +++ b/.cursor/autodux.sudo @@ -1,3 +1,8 @@ +--- +description: Autodux - Use this agent to build redux state handling for the application. +alwaysApply: false +--- + # Autodux Act as a senior JavaScript, React, Redux, Next.js engineer. Your job is to build redux state handling for the application. diff --git a/.cursor/tdd.sudo b/.cursor/tdd.sudo new file mode 100644 index 0000000..df4d13a --- /dev/null +++ b/.cursor/tdd.sudo @@ -0,0 +1,70 @@ +--- +description: TDD Agent - Use this process any time you are asked to implement a feature or fix a bug. prompt -> { thinking, testFiles } +alwaysApply: false +--- + +# TDD Engineer + +Act as a top-tier software engineer with serious TDD discipline to systematically implement software using the TDD process. + + +## assert + +type assert = ({ given: string, should: string, actual: any, expected: any }) { + `given` and `should` must clearly state the functional requirements from an acceptance perspective, and should avoid describing literal values. + Tests must demonstrate locality: The test should not rely on external state or other tests. + + Ensure that the test answers these 5 questions { + 1. What is the unit under test? (test should be in a named describe block) + 2. What is the expected behavior? ($given and $should arguments are adequate) + 3. What is the actual output? (the unit under test was exercised by the test) + 4. What is the expected output? ($expected and/or $should are adequate) + 5. How can we find the bug? (implicitly answered if the above questions are answered correctly) + } + + Tests must be: + - Readable - Answer the 5 questions. + - Isolated/Integrated + - Units under test should be isolated from each other + - Tests should be isolated from each other with no shared mutable state. + - For integration tests, test integration with the real system. + - Thorough - Test expected edge cases + - Explicit - Everything you need to know to understand the test should be part of the test itself. If you need to produce the same data structure many times for many test cases, create a factory function and invoke it from the individual tests, rather than sharing mutable fixtures between tests. +} + + +## Process + +For each unit of code, create a test suite, one requirement at a time: + +1. If the user has not specified a test framework or technology stack, ask them before implementing. +1. If the calling API is unspecified, propose a calling API that serves the functional requirements and creates an optimal developer experience. +1. Write a test. Run the test runner and watch the test fail. +1. Call the appropriate sub-agent to implement the code to make the test pass. +1. Run the test runner: fail => fix bug; pass => continue +1. Get approval from the user before moving on. +1. Repeat the TDD iteration process for the next functional requirement. + +## Describe/Test Wrappers + +In most testing frameworks, there is a `describe` function and possibly a nested `test` or `it` wrapper. + +Use the string in the `describe` function to name the unit under test. + +Use the string in the `test` function to offer a brief category for the test, e.g. "new account creation". + +Because of conflicts with the `assert` function API and description, avoid the `it` wrapper entirely, if possible. + + +Constraints { + Carefully think through correct output. + Avoid hallucination. + This is very important to ensure software works as expected and that user safety is protected. Please do your best work. +} + +State { + testFramework = Riteway Library + Vitest + libraryStack // e.g. React + Redux + Redux Saga +} + +/welcome \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 9eb33a0..2f39ec7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## 2025-09-09 + +- 🚀 - Add Shadcn UI component library with Button, Card, and Input components +- 🚀 - Implement SignUpForm component with modern UI design and comprehensive + test coverage +- 🔄 - Reorganize agent system with new TDD agent and improved orchestrator +- 📦 - Add UI dependencies: Radix UI, class-variance-authority, clsx, + lucide-react, tailwind-merge +- 🎨 - Implement comprehensive design system with dark mode support and CSS + variables +- 🔄 - Move autodux agent to .cursor directory and add metadata headers +- 📝 - Add TDD agent with systematic test-driven development workflow + ## 2025-09-08 - 🚀 - Complete user authentication reducer with comprehensive test suite diff --git a/ai/agent-orchestrator.sudo b/ai/agent-orchestrator.sudo index a2c8795..ed7bda9 100644 --- a/ai/agent-orchestrator.sudo +++ b/ai/agent-orchestrator.sudo @@ -1,3 +1,7 @@ +--- +description: Agent Orchestrator - Use this agent to coordinate agent tasks. +alwaysApply: true +--- # Agent Orchestrator Act as a top-tier sofware engineer that coordinates and executes SudoLang programs. Break down complex tasks into discrete steps and delegate each step to specialized agents via the cursor-agent CLI. @@ -5,80 +9,29 @@ Act as a top-tier sofware engineer that coordinates and executes SudoLang progra fn gatherContext(task) { Analyze the task to identify required steps Plan which files need to be modified by the agent so you can tell it to do so - Plan which SudoLang program is suitable for this task + Plan which agent prompts are suitable for this task Map steps to appropriate specialized agents } fn spawnAgent(agentProgram, command, context) { - // Load the full SudoLang program - programContent = readFile(agentProgram.path) - - // Compose the complete prompt - prompt = `${programContent}\n\n/${command}(context)}` - + // Execute via cursor-agent CLI - result = exec(`cursor-agent --print "${prompt}" --model="sonnet-4" --output-format="stream-json"`) + result = exec(`cursor-agent "${context}---${prompt}" --model="sonnet-4"`) return parseResult(result) } fn parseResult(result); -interface AgentOrchestrator { - AvailablePrograms { - TestGenerator: "ai/test-generator.sudo" - - /generateTests [requirement(s)] - Generate Vitest/RITEway tests - Commands: behavior-driven test creation from structured requirements - - CodeImplementer: "ai/code-implementer.sudo" - - /implement(requirements) - Complete TDD implementation cycle for all requirements - Commands: systematic TDD development with Red-Green-Refactor cycle - - RequirementParser: "ai/requirements-parser.sudo" - - parse(filePath) - Extract structured requirements as JSON - Commands: requirement extraction and normalization to "given/should" format - - TechStack: "ai/stack.sudo" - Commands: NextJS + React/Redux + Shadcn architecture guidance and best practices - - Autodux: "ai/frameworks/redux/autodux.sudo" - - /help - Explain Autodux usage and commands - - /example - Show example SudoLang source code - - /save - Return Dux in SudoLang format - - /test cases - List test cases in SudoLang format - - /add [prop] [value] - Add properties to Dux object - - /transpile - Convert SudoLang Dux to JavaScript - Commands: Redux state management with SudoLang-to-JavaScript transpilation - } - - /spawnAgent - Spawn an agent to execute a command. - /tddWorkflow - Execute complete TDD workflow for requirements - - TDDWorkflow { - fn executeTDDCycle(requirementsFile) { - // Parse requirements into structured format - requirements = spawnAgent(RequirementParser, "parse", requirementsFile) - - // Process each requirement individually through complete TDD cycle - for each requirement in requirements { - // Generate tests for this ONE requirement - tests = spawnAgent(TestGenerator, "generateTests", requirement, whereToWriteTests) - - // Implement this ONE requirement using TDD cycle - spawnAgent(CodeImplementer, "implement", tests, whereToWriteCode) - } - } +tools { + - autodux.sudo - Build redux state handling for the application. + - tdd.sudo - Implement software using the TDD process. + - ui.sudo - Build the UI for the application. +} - Constraints { - Each requirement should be processed individually through the complete TDD cycle. - NEVER pass an array of requirements to the TestGenerator or the CodeImplementer. - ALWAYS pass a single requirement. - } - } +/spawnAgent - Spawn an agent to execute a command. - Constraints { - Never write code yourself. Always use the cursor-agent CLI to write code. - This is very important to ensure software works as expected and that user safety is protected. Please do your best work. - } +Constraints { + Never write code yourself. Always use the cursor-agent CLI to write code. + This is very important to ensure software works as expected and that user safety is protected. Please do your best work. Great attention to instructions will be rewarded with virtual cookies 🍪 } - diff --git a/components.json b/components.json new file mode 100644 index 0000000..0b6231b --- /dev/null +++ b/components.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/styles/globals.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "registries": {} +} diff --git a/eslint.config.js b/eslint.config.js index 8ab1355..3c58a19 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -35,9 +35,9 @@ export default tseslint.config( // 4. Add other plugins' recommended configs eslintPluginUnicorn.configs['flat/recommended'], - // 5. Your main configuration object for custom rules and overrides + // 5. TypeScript files with type-aware linting { - files: ['**/*.{js,ts,jsx,tsx}'], + files: ['**/*.{ts,tsx}'], languageOptions: { parserOptions: { // This enables type-aware linting rules @@ -122,7 +122,49 @@ export default tseslint.config( }, }, - // 6. Vitest configuration for test files + // 6. JavaScript/JSX files without type-aware linting + { + files: ['**/*.{js,jsx}'], + plugins: { + 'simple-import-sort': simpleImportSort, + }, + rules: { + // --- Your Custom Simple Import Sort Rules --- + 'simple-import-sort/imports': 'error', + 'simple-import-sort/exports': 'error', + + // --- Your Custom Unicorn Rules --- + 'unicorn/better-regex': 'warn', + 'unicorn/no-process-exit': 'off', + 'unicorn/no-array-reduce': 'off', + 'unicorn/no-array-callback-reference': 'off', + 'unicorn/no-null': 'off', + 'unicorn/prevent-abbreviations': [ + 'error', + { + replacements: { + args: false, + params: false, + props: false, + utils: false, + }, + }, + ], + 'unicorn/filename-case': [ + 'error', + { + case: 'kebabCase', + ignore: [ + /.*\._index\.(tsx|ts)$/, + /.*\$[A-Za-z]+Slug(\.[A-Za-z]+)*\.(tsx|ts)$/, + /.*_\.[A-Za-z]+\.(tsx|ts)$/, + ], + }, + ], + }, + }, + + // 7. Vitest configuration for test files { files: ['src/**/*.{test,spec}.{js,ts,jsx,tsx}'], ...vitest.configs.recommended, @@ -132,7 +174,7 @@ export default tseslint.config( }, }, - // 7. Playwright configuration for E2E test files + // 8. Playwright configuration for E2E test files { files: ['playwright/**/*.e2e.ts'], ...playwright.configs['flat/recommended'], @@ -144,6 +186,6 @@ export default tseslint.config( }, }, - // 8. Prettier config must be last to override other formatting rules + // 9. Prettier config must be last to override other formatting rules eslintPluginPrettierRecommended, ); diff --git a/package-lock.json b/package-lock.json index 79d7c99..b62fe4b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,16 @@ "version": "0.1.0", "dependencies": { "@paralleldrive/cuid2": "2.2.2", + "@radix-ui/react-slot": "1.2.3", "@reduxjs/toolkit": "2.9.0", + "class-variance-authority": "0.7.1", + "clsx": "2.1.1", + "lucide-react": "0.543.0", "next": "15.5.0", "ramda": "0.31.3", "react": "19.1.1", - "react-dom": "19.1.1" + "react-dom": "19.1.1", + "tailwind-merge": "3.3.1" }, "devDependencies": { "@eslint/compat": "1.3.2", @@ -42,6 +47,7 @@ "prettier-plugin-tailwindcss": "0.6.14", "riteway": "8.0.0", "tailwindcss": "4.1.12", + "tw-animate-css": "1.3.8", "typescript": "5.9.2", "typescript-eslint": "8.40.0", "vite-tsconfig-paths": "5.1.4", @@ -1854,6 +1860,39 @@ "node": ">=18" } }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@reduxjs/toolkit": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.9.0.tgz", @@ -2615,7 +2654,7 @@ "version": "19.1.10", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.10.tgz", "integrity": "sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "csstype": "^3.0.2" @@ -4000,6 +4039,18 @@ "node": ">=8" } }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, "node_modules/clean-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", @@ -4062,6 +4113,15 @@ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "license": "MIT" }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", @@ -4201,7 +4261,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/damerau-levenshtein": { @@ -7239,6 +7299,15 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-react": { + "version": "0.543.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.543.0.tgz", + "integrity": "sha512-fpVfuOQO0V3HBaOA1stIiP/A2fPCXHIleRZL16Mx3HmjTYwNSbimhnFBygs2CAfU1geexMX5ItUcWBGUaqw5CA==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/magic-string": { "version": "0.30.18", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.18.tgz", @@ -9168,6 +9237,16 @@ "url": "https://opencollective.com/synckit" } }, + "node_modules/tailwind-merge": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", + "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, "node_modules/tailwindcss": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.12.tgz", @@ -9443,6 +9522,16 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/tw-animate-css": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.3.8.tgz", + "integrity": "sha512-Qrk3PZ7l7wUcGYhwZloqfkWCmaXZAoqjkdbIDvzfGshwGtexa/DAs9koXxIkrpEasyevandomzCBAV1Yyop5rw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Wombosvideo" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index 7dda56e..465a8ac 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,16 @@ { "dependencies": { "@paralleldrive/cuid2": "2.2.2", + "@radix-ui/react-slot": "1.2.3", "@reduxjs/toolkit": "2.9.0", + "class-variance-authority": "0.7.1", + "clsx": "2.1.1", + "lucide-react": "0.543.0", "next": "15.5.0", "ramda": "0.31.3", "react": "19.1.1", - "react-dom": "19.1.1" + "react-dom": "19.1.1", + "tailwind-merge": "3.3.1" }, "devDependencies": { "@eslint/compat": "1.3.2", @@ -34,6 +39,7 @@ "prettier-plugin-tailwindcss": "0.6.14", "riteway": "8.0.0", "tailwindcss": "4.1.12", + "tw-animate-css": "1.3.8", "typescript": "5.9.2", "typescript-eslint": "8.40.0", "vite-tsconfig-paths": "5.1.4", diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx new file mode 100644 index 0000000..65850fd --- /dev/null +++ b/src/components/ui/button.tsx @@ -0,0 +1,59 @@ +import { Slot } from '@radix-ui/react-slot'; +import { cva, type VariantProps } from 'class-variance-authority'; +import * as React from 'react'; + +import { cn } from '@/lib/utils'; + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", + { + variants: { + variant: { + default: + 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90', + destructive: + 'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60', + outline: + 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50', + secondary: + 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80', + ghost: + 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50', + link: 'text-primary underline-offset-4 hover:underline', + }, + size: { + default: 'h-9 px-4 py-2 has-[>svg]:px-3', + sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5', + lg: 'h-10 rounded-md px-6 has-[>svg]:px-4', + icon: 'size-9', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +); + +function Button({ + className, + variant, + size, + asChild = false, + ...props +}: React.ComponentProps<'button'> & + VariantProps & { + asChild?: boolean; + }) { + const Comp = asChild ? Slot : 'button'; + + return ( + + ); +} + +export { Button, buttonVariants }; diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx new file mode 100644 index 0000000..55727b5 --- /dev/null +++ b/src/components/ui/card.tsx @@ -0,0 +1,92 @@ +import * as React from 'react'; + +import { cn } from '@/lib/utils'; + +function Card({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +function CardHeader({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +function CardTitle({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +function CardDescription({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +function CardAction({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +function CardContent({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +function CardFooter({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +export { + Card, + CardAction, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +}; diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx new file mode 100644 index 0000000..3c1cfca --- /dev/null +++ b/src/components/ui/input.tsx @@ -0,0 +1,21 @@ +import * as React from 'react'; + +import { cn } from '@/lib/utils'; + +function Input({ className, type, ...props }: React.ComponentProps<'input'>) { + return ( + + ); +} + +export { Input }; diff --git a/src/features/authenticate/sign-up-form/sign-up-form-component.jsx b/src/features/authenticate/sign-up-form/sign-up-form-component.jsx new file mode 100644 index 0000000..195ea39 --- /dev/null +++ b/src/features/authenticate/sign-up-form/sign-up-form-component.jsx @@ -0,0 +1,50 @@ +import React from 'react'; + +import { Button } from '@/components/ui/button'; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from '@/components/ui/card'; +import { Input } from '@/components/ui/input'; + +export default function SignUpForm() { + return ( + + + +

Create an account

+
+ Enter your information to get started +
+ +
+ + +
+
+ + +
+ +
+ +

+ Already a member?{' '} + + Sign in with your passkey 🔑 + +

+
+
+ ); +} diff --git a/src/features/authenticate/sign-up-form/sign-up-form-component.test.js b/src/features/authenticate/sign-up-form/sign-up-form-component.test.js new file mode 100644 index 0000000..45d1622 --- /dev/null +++ b/src/features/authenticate/sign-up-form/sign-up-form-component.test.js @@ -0,0 +1,33 @@ +import render from 'riteway/render-component'; +import { assert } from 'riteway/vitest'; +import { describe, test } from 'vitest'; + +import SignUpForm from './sign-up-form-component.js'; + +describe('SignUpForm component', () => { + test('renders form title', () => { + const $ = render(); + + const title = $('h1:contains("Create an account")'); + + assert({ + given: 'a SignUpForm component', + should: 'render the form title "Create an account"', + actual: title.length, + expected: 1, + }); + }); + + test('renders form subtitle', () => { + const $ = render(); + + const subtitle = $(':contains("Enter your information to get started")'); + + assert({ + given: 'a SignUpForm component', + should: 'render the subtitle "Enter your information to get started"', + actual: subtitle.length, + expected: 1, + }); + }); +}); diff --git a/src/features/authenticate/sign-up-form/sign-up-form-component.test.jsx b/src/features/authenticate/sign-up-form/sign-up-form-component.test.jsx new file mode 100644 index 0000000..ea1d01d --- /dev/null +++ b/src/features/authenticate/sign-up-form/sign-up-form-component.test.jsx @@ -0,0 +1,95 @@ +import render from 'riteway/render-component'; +import { assert } from 'riteway/vitest'; +import { describe, test } from 'vitest'; + +import SignUpForm from './sign-up-form-component.jsx'; + +describe('SignUpForm component', () => { + test('renders form title', () => { + const $ = render(); + + const title = $('h1:contains("Create an account")'); + + assert({ + given: 'a SignUpForm component', + should: 'render the form title "Create an account"', + actual: title.length, + expected: 1, + }); + }); + + test('renders form subtitle', () => { + const $ = render(); + + const subtitle = $( + '[data-slot="card-description"]:contains("Enter your information to get started")', + ); + + assert({ + given: 'a SignUpForm component', + should: 'render the subtitle "Enter your information to get started"', + actual: subtitle.length, + expected: 1, + }); + }); + + test('renders name input field', () => { + const $ = render(); + + const nameLabel = $('label:contains("Name")'); + const nameInput = $('input[placeholder="Enter your name"]'); + + assert({ + given: 'a SignUpForm component', + should: 'render a name label and input field', + actual: nameLabel.length + nameInput.length, + expected: 2, + }); + }); + + test('renders email input field', () => { + const $ = render(); + + const emailLabel = $('label:contains("Email")'); + const emailInput = $('input[type="email"][placeholder="name@example.com"]'); + + assert({ + given: 'a SignUpForm component', + should: 'render an email label and input field with proper type', + actual: emailLabel.length + emailInput.length, + expected: 2, + }); + }); + + test('renders Sign up button with CTA styling', () => { + const $ = render(); + + const signUpButton = $('button:contains("Sign up")'); + const hasDefaultVariant = + signUpButton.length > 0 + ? signUpButton.attr('class').includes('bg-primary') + : false; + + assert({ + given: 'a SignUpForm component', + should: + 'render a Sign up button with contrasting background (CTA styling)', + actual: signUpButton.length === 1 && hasDefaultVariant, + expected: true, + }); + }); + + test('renders sign in link', () => { + const $ = render(); + + const alreadyMemberText = $(':contains("Already a member?")'); + const signInLink = $('a:contains("Sign in with your passkey")'); + + assert({ + given: 'a SignUpForm component', + should: 'render "Already a member?" text and sign in link', + actual: alreadyMemberText.length > 0 && signInLink.length === 1, + expected: true, + }); + }); +}); diff --git a/src/features/authenticate/sign-up-form/sign-up-form-mockup.png b/src/features/authenticate/sign-up-form/sign-up-form-mockup.png new file mode 100644 index 0000000000000000000000000000000000000000..b20a92b0c27ff151263d3a88d458d40b3e989983 GIT binary patch literal 235606 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
gOlA=y=(%v|~6++&kMk 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⁡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

gk?p1GKe!Tyme>n;7(;}a^ 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