merge: worktree-a11y-fixes into main
Some checks failed
Test / vitest (push) Successful in 12m45s
Test / playwright (push) Failing after 10m5s
Test / visual (push) Failing after 9m16s

Accessibility fixes (aria-labels, color contrast, html lang, inline link
underlines), atomic dev login endpoints, and E2E test hardening.
This commit is contained in:
Jennie Robinson Faber 2026-04-05 22:04:54 +01:00
commit bab53cec9e
31 changed files with 792 additions and 162 deletions

View file

@ -34,7 +34,7 @@ export default defineEventHandler(async (event) => {
const config = useRuntimeConfig(event);
const token = jwt.sign(
{ memberId: member._id, email: member.email, tv: member.tokenVersion },
{ memberId: member._id, email: member.email, tv: member.tokenVersion || 0 },
config.jwtSecret,
{ expiresIn: "7d" },
);
@ -43,6 +43,7 @@ export default defineEventHandler(async (event) => {
httpOnly: true,
secure: false,
sameSite: "lax",
path: "/",
maxAge: 60 * 60 * 24 * 7,
});

View file

@ -13,23 +13,24 @@ export default defineEventHandler(async (event) => {
await connectDB();
// Find or create a test admin user
let member = await Member.findOne({ email: "test-admin@ghostguild.dev" });
if (!member) {
member = await Member.create({
email: "test-admin@ghostguild.dev",
name: "Test Admin",
circle: "founder",
contributionTier: "0",
role: "admin",
status: "active",
});
}
// Find or create a test admin user (atomic to avoid race conditions in parallel tests)
const member = await Member.findOneAndUpdate(
{ email: "test-admin@ghostguild.dev" },
{
$setOnInsert: {
name: "Test Admin",
circle: "founder",
contributionTier: "0",
role: "admin",
status: "active",
},
},
{ upsert: true, new: true },
);
const config = useRuntimeConfig(event);
const token = jwt.sign(
{ memberId: member._id, email: member.email, tv: member.tokenVersion },
{ memberId: member._id, email: member.email, tv: member.tokenVersion || 0 },
config.jwtSecret,
{ expiresIn: "7d" },
);
@ -38,6 +39,7 @@ export default defineEventHandler(async (event) => {
httpOnly: true,
secure: false,
sameSite: "lax",
path: "/",
maxAge: 60 * 60 * 24 * 7,
});