create-m5kdev 0.38.12 → 0.38.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-m5kdev",
3
- "version": "0.38.12",
3
+ "version": "0.38.14",
4
4
  "license": "GPL-3.0-only",
5
5
  "engines": {
6
6
  "node": ">=24"
@@ -494,6 +494,7 @@ test("admin creates, bans, unbans, and authenticates a user", async ({ page, req
494
494
 
495
495
  const createdRow = page.getByRole("row").filter({ hasText: email });
496
496
  await expect(createdRow).toBeVisible();
497
+ await expect(createdRow.getByText(/^verified$/i)).toBeVisible();
497
498
  await createdRow.getByLabel("User actions").click();
498
499
  await page.getByRole("menuitem", { name: /^ban$/i }).click();
499
500
 
@@ -551,6 +552,65 @@ test("admin creates, bans, unbans, and authenticates a user", async ({ page, req
551
552
  ).toBe(true);
552
553
  });
553
554
 
555
+ test("admin verifies email, changes user role, and sets password from users list", async ({
556
+ page,
557
+ request,
558
+ }) => {
559
+ const email = `admin-user-actions.${Date.now()}@auth-e2e.local`;
560
+ const password = "password1234";
561
+ const newPassword = "password5678";
562
+
563
+ await signUp(page, email, password);
564
+ const before = await getUserState(request, profile, email);
565
+ expect(before.user.emailVerified).toBe(false);
566
+ expect(before.user.role).toBe("user");
567
+
568
+ await login(page, profiles.standard.adminEmail, profiles.standard.adminPassword);
569
+ await page.goto("/admin/users");
570
+ await page.locator('input[name="search"]').fill(email);
571
+
572
+ const row = page.getByRole("row").filter({ hasText: email });
573
+ await expect(row).toBeVisible();
574
+ await expect(row.getByText(/^unverified$/i)).toBeVisible();
575
+
576
+ await row.getByLabel("User actions").click();
577
+ await page.getByRole("menuitem", { name: /^verify email$/i }).click();
578
+ await expect(row.getByText(/^verified$/i)).toBeVisible();
579
+ await expect
580
+ .poll(async () => {
581
+ const state = await getUserState(request, profile, email);
582
+ return state.user.emailVerified;
583
+ })
584
+ .toBe(true);
585
+
586
+ await row.getByRole("button", { name: `Role for ${email}` }).click();
587
+ await page.getByRole("option", { name: /^admin$/i }).click();
588
+ await expect
589
+ .poll(async () => {
590
+ const state = await getUserState(request, profile, email);
591
+ return state.user.role;
592
+ })
593
+ .toBe("admin");
594
+
595
+ await row.getByLabel("User actions").click();
596
+ await expect(page.getByRole("menuitem", { name: /^verify email$/i })).toHaveCount(0);
597
+ await page.getByRole("menuitem", { name: /^set password$/i }).click();
598
+ const passwordDialog = page.getByRole("dialog");
599
+ await passwordDialog.getByPlaceholder(/enter password/i).fill(newPassword);
600
+ await passwordDialog.getByRole("button", { name: /^set password$/i }).click();
601
+ await expect(passwordDialog).toBeHidden();
602
+
603
+ await page.locator('input[name="search"]').fill(profiles.standard.adminEmail);
604
+ const adminRow = page.getByRole("row").filter({ hasText: profiles.standard.adminEmail });
605
+ await expect(adminRow).toBeVisible();
606
+ await expect(
607
+ adminRow.getByRole("button", { name: `Role for ${profiles.standard.adminEmail}` })
608
+ ).toBeDisabled();
609
+
610
+ await logout(page);
611
+ await login(page, email, newPassword);
612
+ });
613
+
554
614
  test("admin manages organization members from organization admin", async ({ page, request }) => {
555
615
  const email = `admin-org-member.${Date.now()}@auth-e2e.local`;
556
616
  const password = "password1234";
@@ -7,18 +7,18 @@ catalogs:
7
7
  "@heroui/react": 3.0.3
8
8
  "@heroui/styles": 3.0.3
9
9
  "@libsql/client": 0.17.4
10
- "@m5kdev/backend": 0.38.12
11
- "@m5kdev/commons": 0.38.12
12
- "@m5kdev/config": 0.38.12
13
- "@m5kdev/email": 0.38.12
14
- "@m5kdev/expo": 0.38.12
15
- "@m5kdev/frontend": 0.38.12
16
- "@m5kdev/module-clay": 0.38.12
17
- "@m5kdev/module-docx": 0.38.12
18
- "@m5kdev/module-pdf": 0.38.12
19
- "@m5kdev/module-social": 0.38.12
20
- "@m5kdev/module-video": 0.38.12
21
- "@m5kdev/web-ui": 0.38.12
10
+ "@m5kdev/backend": 0.38.14
11
+ "@m5kdev/commons": 0.38.14
12
+ "@m5kdev/config": 0.38.14
13
+ "@m5kdev/email": 0.38.14
14
+ "@m5kdev/expo": 0.38.14
15
+ "@m5kdev/frontend": 0.38.14
16
+ "@m5kdev/module-clay": 0.38.14
17
+ "@m5kdev/module-docx": 0.38.14
18
+ "@m5kdev/module-pdf": 0.38.14
19
+ "@m5kdev/module-social": 0.38.14
20
+ "@m5kdev/module-video": 0.38.14
21
+ "@m5kdev/web-ui": 0.38.14
22
22
  "@mastra/core": 1.51.0
23
23
  "@openrouter/ai-sdk-provider": 3.0.0
24
24
  "@opentelemetry/api": 1.9.0