deckhearth/TESTING_GUIDE.md
varutasu 5f2b234cc8
fix(scripts): require TEST_USERS_PASSWORD + purge weak literals from test-user helpers (#27)
`scripts/create-test-users.js` hardcoded `bcrypt.hash('alice123', 12)`
+ `bcrypt.hash('bob123', 12)` and echoed those literals back to stdout
both per-user and in a final summary block. `TESTING_GUIDE.md`'s Test
Accounts table documented the same `admin123` / `alice123` / `bob123`
trio. These were the last two weak-credential surfaces left in the
helper-script + manual-QA-doc tree after `drop-public-setup` (commits
`ff80753` + `b63b509`) and `fix-reset-db-script` (squash `3ab9bf8`,
PR #25) closed the `setup-neon-db.js` and `reset-db.js` halves of the
umbrella `purge-weak-creds-from-helpers` queued follow-up.

The fix mirrors the post-`drop-public-setup` `setup-neon-db.js`
pattern and the post-PR-#25 `reset-db.js` pattern verbatim, with one
deliberate simplification: a single `TEST_USERS_PASSWORD` env var
covers both alice + bob rather than per-user env vars (risk R2 in the
convoy file argues this — these are fixture users for the
collaboration demo flow, not independent identities, and per-user
sprawl would double the env-var contract for zero security benefit).
`createTestUsers()` now reads `process.env.TEST_USERS_PASSWORD` at the
top of the function body and exits with code 1 BEFORE opening any DB
connection if the var is unset or whitespace-only, with the same
helpful-error wording template the other two scripts use (names the
var, points at `.env.local`, suggests `openssl rand -base64 24`,
references README's "First-time admin setup" section). All four
password-echo `console.log` lines are deleted; the new summary
documents *where* the password comes from without ever printing it.
`TESTING_GUIDE.md`'s Test Accounts table is rewritten to show password
source per user instead of the literal value; the two inline
`Password: alice123` / `Password: bob123` workflow snippets are
replaced with placeholder text. Unlike the previous two convoys, no
CJS→ESM conversion was needed — `create-test-users.js` was already
top-level ESM.

Verification (all static — script is destructive and not live-tested):
`node --check scripts/create-test-users.js` exit 0; `npm run lint` 128
problems (baseline preserved, no regression); `npm run test:run` 21/21
pass; grep `scripts/ TESTING_GUIDE.md` for
`admin123|password123|test123|alice123|bob123` → 0 hits;
`TEST_USERS_PASSWORD` referenced 10 times total (5 script + 5 doc).
Operator caveat: anyone running `node scripts/create-test-users.js`
post-merge must add `TEST_USERS_PASSWORD=<value>` to their
`.env.local` first; existing alice + bob rows in already-seeded
environments are NOT rotated by re-running this script
(`ON CONFLICT (email) DO NOTHING` preserves the old hashes). Same
caveat that applies to the `drop-public-setup` admin row.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 22:53:24 -05:00

4.2 KiB

🎯 Deck Hearth Collaboration Testing Guide

👥 Test Accounts

User Email Role Password source
Admin admin@deckhearth.com Admin ADMIN_INITIAL_PASSWORD env var (seeded by npm run setup-db)
Alice alice@deckhearth.com User TEST_USERS_PASSWORD env var (seeded by node scripts/create-test-users.js)
Bob bob@deckhearth.com User TEST_USERS_PASSWORD env var (seeded by node scripts/create-test-users.js)

Both env vars must be set in .env.local before running the corresponding seed script — each script fails loud (exit 1, no DB connection opened) if its env var is unset. Generate strong values with openssl rand -base64 24; see README.md → "First-time admin setup" for the canonical env-var pattern.

Alice + Bob share a single TEST_USERS_PASSWORD value because this is a test-fixture surface; that's intentional and documented in the purge-weak-creds-from-helpers convoy.

🃏 Sample Cards Available

  • Lightning Bolt (MTG) - $2.50
  • Black Lotus (MTG) - $25,000
  • Pikachu (Pokemon) - $8.50
  • Charizard (Pokemon) - $350
  • Mickey Mouse (Lorcana) - $45
  • Elsa (Lorcana) - $15.75

🧪 Testing Workflow

1. Login as Alice

Email:    alice@deckhearth.com
Password: <value of TEST_USERS_PASSWORD from .env.local>

2. Create a Collection

  • Go to /collections
  • Click "Create Collection"
  • Fill out:
    • Name: "Alice's Pokemon Collection"
    • Description: "My favorite Pokemon cards"
    • Image: (optional) https://images.unsplash.com/photo-1606092195730-5d7b9af1efc5?w=1200
    • Show in Community: Toggle ON for public visibility

3. Add Cards to Collection

  • Navigate to the new collection (auto-redirect after creation)
  • Use "Quick Add" search in empty state
  • Search for "Pikachu" and click to add
  • Search for "Charizard" and click to add
  • See real-time collection value updates

4. Invite Bob as Collaborator

  • Click "Invite Collaborator" button
  • Enter: bob@deckhearth.com
  • Role: Collaborator (default)
  • Message: "Help me build this Pokemon collection!"
  • Click "Send Invitation"

5. Switch to Bob's Account

  • Logout and login as Bob
  • Email: bob@deckhearth.com
  • Password: <value of TEST_USERS_PASSWORD from .env.local>

6. Accept Invitation (Simulated)

Since we're testing locally, simulate email acceptance:

  • Go to: /invite/accept?token=MOCK_TOKEN
  • Or manually add Bob to Alice's collection via database

7. Test Collaboration

As Bob:

  • Go to /collections - should see Alice's collection
  • Open Alice's collection
  • Add more cards using Quick Add
  • See Bob's activity in collaboration panel

8. Test Permission Levels

  • Bob can add/edit cards (Collaborator role)
  • Bob cannot delete collection (only Alice can)
  • Collection shows as "Public" but editing requires invitation

🔧 Quick Database Commands

Add Bob to Alice's Collection Manually:

-- Get collection ID (usually 1 for first collection)
SELECT id FROM collections WHERE name LIKE '%Alice%';

-- Add Bob as collaborator
INSERT INTO collection_permissions (collection_id, user_id, role, status)
VALUES (1, 3, 'editor', 'active');

Check Users:

node scripts/list-users.js

🎯 What to Test

Collection Management:

  • Create collection with image and visibility
  • Real-time stats (card count, value)
  • Only see your own collections initially

Card Management:

  • Search and add cards via Quick Add
  • Real card data with images and prices
  • Collection value updates automatically

Collaboration:

  • Invite collaborators with email
  • Permission indicators throughout UI
  • Activity logging for all changes

User Experience:

  • Beautiful empty states with guidance
  • Real-time search with dropdown results
  • Success confirmations and navigation
  • Permission-based UI elements

🚀 Ready to Test!

The system now provides a complete, real-world testing environment with:

  • Real user authentication
  • Database-driven collections and cards
  • Working collaboration system
  • Beautiful UX with proper empty states
  • Permission-based access control

Start testing by logging in as Alice and creating your first collection! 🎮