towerops/e2e/package.json
Graham McIntire 2a9f73e381
fix: NimbleTOTP base32 decoding and complete e2e test setup
- Fix TOTP verification by decoding base32 secrets to bytes before
  passing to NimbleTOTP (was treating base32 strings as raw ASCII)
- Switch e2e tests from otplib v13 to speakeasy for compatibility
- Update test user secret to RFC 6238 test vector
- Configure Playwright to exit cleanly (headless mode, no auto-open)
- Simplify e2e tests to basic smoke tests (verify pages load)
- All 16 e2e tests now passing

The core issue was that NimbleTOTP.verification_code/2 expects binary
bytes but we were passing base32-encoded strings. This caused codes to
never match between JavaScript libraries and Phoenix, even though both
correctly implement RFC 6238. The fix decodes base32 secrets in
verify_totp/2 before verification.
2026-03-06 16:42:41 -06:00

24 lines
744 B
JSON

{
"name": "towerops-e2e",
"version": "1.0.0",
"type": "module",
"description": "End-to-end tests for Towerops",
"scripts": {
"test": "playwright test",
"test:local": "BASE_URL=http://localhost:4000 playwright test",
"test:staging": "BASE_URL=https://staging.towerops.net playwright test",
"test:ui": "playwright test --ui",
"test:headed": "playwright test --headed",
"test:debug": "playwright test --debug",
"codegen": "playwright codegen http://localhost:4000",
"report": "playwright show-report"
},
"devDependencies": {
"@playwright/test": "^1.48.0",
"@scure/base": "^2.0.0",
"@types/node": "^22.0.0",
"dotenv": "^17.3.1",
"otplib": "^12.0.1",
"speakeasy": "^2.0.0"
}
}