@actuate-media/cms-admin 0.30.0 → 0.31.0

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=user-detail-drawer.render.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-detail-drawer.render.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/views/user-detail-drawer.render.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,113 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // @vitest-environment happy-dom
3
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
4
+ import { render, screen, fireEvent, waitFor } from '@testing-library/react';
5
+ /**
6
+ * Render tests for the User detail drawer: overview facts, lazy-loaded Sessions
7
+ * and Permissions tabs, and the security action surface.
8
+ */
9
+ const DETAIL = {
10
+ id: 'u1',
11
+ name: 'Priya Nair',
12
+ email: 'priya@actuatemedia.com',
13
+ avatarUrl: null,
14
+ initials: 'PN',
15
+ role: 'EDITOR',
16
+ roleName: 'Editor',
17
+ status: 'active',
18
+ mfaEnabled: true,
19
+ mfaRequired: false,
20
+ passwordSet: true,
21
+ forcePasswordReset: false,
22
+ failedLoginCount: 0,
23
+ lockedAt: null,
24
+ suspendedAt: null,
25
+ authProvider: null,
26
+ oauthProviders: [],
27
+ ssoOnly: false,
28
+ emailVerified: true,
29
+ lastLoginAt: new Date(Date.now() - 86400000).toISOString(),
30
+ lastActiveAt: new Date(Date.now() - 86400000).toISOString(),
31
+ acceptedInviteAt: new Date('2026-01-02').toISOString(),
32
+ createdAt: new Date('2026-01-01').toISOString(),
33
+ invitedBy: { id: 'o1', name: 'Dana Chen', email: 'dana@actuatemedia.com' },
34
+ externalDomain: false,
35
+ contentOwnedCount: 4,
36
+ isCurrentUser: false,
37
+ };
38
+ const SESSIONS = [
39
+ {
40
+ id: 's1',
41
+ deviceLabel: 'Chrome on macOS',
42
+ browser: 'Chrome',
43
+ os: 'macOS',
44
+ ipCountry: null,
45
+ createdAt: new Date(Date.now() - 3600000).toISOString(),
46
+ lastSeenAt: new Date().toISOString(),
47
+ expiresAt: new Date(Date.now() + 86400000).toISOString(),
48
+ revokedAt: null,
49
+ current: false,
50
+ active: true,
51
+ },
52
+ ];
53
+ const PERMISSIONS = {
54
+ role: 'EDITOR',
55
+ roleName: 'Editor',
56
+ permissions: ['dashboard.view', 'content.publish'],
57
+ };
58
+ const { cmsApi } = vi.hoisted(() => ({ cmsApi: vi.fn() }));
59
+ vi.mock('../../lib/api.js', () => ({ cmsApi }));
60
+ cmsApi.mockImplementation(async (endpoint) => {
61
+ if (!endpoint)
62
+ return { data: null, status: 200 };
63
+ if (endpoint.endsWith('/sessions'))
64
+ return { data: SESSIONS, status: 200 };
65
+ if (endpoint.endsWith('/permissions'))
66
+ return { data: PERMISSIONS, status: 200 };
67
+ if (endpoint.endsWith('/activity'))
68
+ return { data: [], status: 200 };
69
+ if (endpoint.startsWith('/users/u1'))
70
+ return { data: DETAIL, status: 200 };
71
+ return { data: null, status: 200 };
72
+ });
73
+ const { UserDetailDrawer } = await import('../../views/users/UserDetailDrawer.js');
74
+ // Radix Tabs activates on mousedown (button 0), not a bare click.
75
+ function selectTab(name) {
76
+ const tab = screen.getByRole('tab', { name });
77
+ fireEvent.mouseDown(tab, { button: 0 });
78
+ fireEvent.click(tab);
79
+ }
80
+ describe('UserDetailDrawer', () => {
81
+ beforeEach(() => cmsApi.mockClear());
82
+ it('renders overview facts for the user', async () => {
83
+ render(_jsx(UserDetailDrawer, { userId: "u1", open: true, onOpenChange: () => { } }));
84
+ expect(await screen.findByText('Priya Nair')).toBeTruthy();
85
+ expect(screen.getByText('Content owned')).toBeTruthy();
86
+ expect(screen.getByText('4 items')).toBeTruthy();
87
+ expect(screen.getByText('Dana Chen')).toBeTruthy();
88
+ });
89
+ it('shows security actions on the Security tab', async () => {
90
+ render(_jsx(UserDetailDrawer, { userId: "u1", open: true, onOpenChange: () => { } }));
91
+ await screen.findByText('Priya Nair');
92
+ selectTab('Security');
93
+ expect(await screen.findByText('Multi-factor authentication')).toBeTruthy();
94
+ expect(screen.getByRole('button', { name: 'Reset MFA' })).toBeTruthy();
95
+ expect(screen.getByRole('button', { name: 'Send reset' })).toBeTruthy();
96
+ expect(screen.getByRole('button', { name: 'Suspend' })).toBeTruthy();
97
+ });
98
+ it('lazy-loads the Sessions tab', async () => {
99
+ render(_jsx(UserDetailDrawer, { userId: "u1", open: true, onOpenChange: () => { } }));
100
+ await screen.findByText('Priya Nair');
101
+ selectTab('Sessions');
102
+ expect(await screen.findByText('Chrome on macOS')).toBeTruthy();
103
+ expect(screen.getByRole('button', { name: 'Revoke all' })).toBeTruthy();
104
+ });
105
+ it('lazy-loads derived permissions', async () => {
106
+ render(_jsx(UserDetailDrawer, { userId: "u1", open: true, onOpenChange: () => { } }));
107
+ await screen.findByText('Priya Nair');
108
+ selectTab('Permissions');
109
+ await waitFor(() => expect(screen.getByText('content.publish')).toBeTruthy());
110
+ expect(screen.getByText('dashboard.view')).toBeTruthy();
111
+ });
112
+ });
113
+ //# sourceMappingURL=user-detail-drawer.render.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-detail-drawer.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/user-detail-drawer.render.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=users.render.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.render.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/views/users.render.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,146 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // @vitest-environment happy-dom
3
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
4
+ import { render, screen, fireEvent, waitFor, within } from '@testing-library/react';
5
+ /**
6
+ * Render tests for the rebuilt Users tab: dynamic metric cards, access-review
7
+ * banner, team table (members + pending invites), role filter pills, search,
8
+ * and the invite modal.
9
+ */
10
+ const MEMBERS = [
11
+ {
12
+ id: 'u1',
13
+ name: 'Dana Chen',
14
+ email: 'dana@actuatemedia.com',
15
+ initials: 'DC',
16
+ role: 'OWNER',
17
+ roleName: 'Owner',
18
+ status: 'active',
19
+ mfaEnabled: true,
20
+ externalDomain: false,
21
+ lastLoginAt: new Date().toISOString(),
22
+ lastActiveAt: new Date().toISOString(),
23
+ acceptedInviteAt: new Date().toISOString(),
24
+ createdAt: new Date().toISOString(),
25
+ isCurrentUser: true,
26
+ },
27
+ {
28
+ id: 'u2',
29
+ name: 'Priya Nair',
30
+ email: 'priya@actuatemedia.com',
31
+ initials: 'PN',
32
+ role: 'EDITOR',
33
+ roleName: 'Editor',
34
+ status: 'active',
35
+ mfaEnabled: true,
36
+ externalDomain: false,
37
+ lastLoginAt: new Date(Date.now() - 86400000).toISOString(),
38
+ lastActiveAt: new Date(Date.now() - 86400000).toISOString(),
39
+ acceptedInviteAt: new Date().toISOString(),
40
+ createdAt: new Date().toISOString(),
41
+ isCurrentUser: false,
42
+ },
43
+ ];
44
+ const INVITES = [
45
+ {
46
+ id: 'i1',
47
+ email: 'jordan@actuatemedia.com',
48
+ role: 'EDITOR',
49
+ roleName: 'Editor',
50
+ status: 'PENDING',
51
+ expiresAt: new Date(Date.now() + 5 * 86400000).toISOString(),
52
+ createdAt: new Date(Date.now() - 2 * 86400000).toISOString(),
53
+ expired: false,
54
+ },
55
+ ];
56
+ const STATS = {
57
+ members: 2,
58
+ pendingInvites: 1,
59
+ admins: 1,
60
+ seatsUsed: 3,
61
+ seatLimit: 10,
62
+ seatsAvailable: 7,
63
+ emailConfigured: true,
64
+ };
65
+ const REVIEW = [
66
+ {
67
+ id: 'inactive_user:u9',
68
+ userId: 'u9',
69
+ severity: 'high',
70
+ type: 'inactive_user',
71
+ title: 'Access review',
72
+ description: "Sara Lindqvist (sara@freelance.io) hasn't signed in for 94 days.",
73
+ recommendedAction: 'Revoke access',
74
+ },
75
+ ];
76
+ const { cmsApi } = vi.hoisted(() => ({ cmsApi: vi.fn() }));
77
+ vi.mock('../../lib/api.js', () => ({ cmsApi }));
78
+ cmsApi.mockImplementation(async (endpoint) => {
79
+ if (!endpoint)
80
+ return { data: null };
81
+ if (endpoint.startsWith('/users/stats'))
82
+ return { data: STATS };
83
+ if (endpoint.startsWith('/users'))
84
+ return { data: MEMBERS };
85
+ if (endpoint.startsWith('/invites'))
86
+ return { data: INVITES };
87
+ if (endpoint.startsWith('/access-review'))
88
+ return { data: REVIEW };
89
+ return { data: null };
90
+ });
91
+ const { Users } = await import('../../views/Users.js');
92
+ describe('Users tab', () => {
93
+ beforeEach(() => cmsApi.mockClear());
94
+ it('renders dynamic metric cards', async () => {
95
+ render(_jsx(Users, { embedded: true }));
96
+ expect(await screen.findByText('Members')).toBeTruthy();
97
+ expect(screen.getByText('Pending invites')).toBeTruthy();
98
+ expect(screen.getByText('Admins')).toBeTruthy();
99
+ expect(screen.getByText('Seats used')).toBeTruthy();
100
+ expect(screen.getByText('3 / 10')).toBeTruthy();
101
+ });
102
+ it('renders the access review banner with the AI badge', async () => {
103
+ render(_jsx(Users, { embedded: true }));
104
+ expect(await screen.findByText('Access review')).toBeTruthy();
105
+ expect(screen.getByText('AI')).toBeTruthy();
106
+ expect(screen.getByText(/hasn't signed in for 94 days/)).toBeTruthy();
107
+ });
108
+ it('renders members and pending invites in the team table', async () => {
109
+ render(_jsx(Users, { embedded: true }));
110
+ expect(await screen.findByText('Dana Chen')).toBeTruthy();
111
+ expect(screen.getByText('Priya Nair')).toBeTruthy();
112
+ // pending invite row
113
+ expect(screen.getByText('jordan@actuatemedia.com')).toBeTruthy();
114
+ expect(screen.getByText('Invited')).toBeTruthy();
115
+ expect(screen.getByText(/people have access/)).toBeTruthy();
116
+ });
117
+ it('filters by role pill', async () => {
118
+ render(_jsx(Users, { embedded: true }));
119
+ await screen.findByText('Dana Chen');
120
+ fireEvent.click(screen.getByRole('button', { name: 'Owner', pressed: false }));
121
+ await waitFor(() => expect(screen.queryByText('Priya Nair')).toBeNull());
122
+ expect(screen.getByText('Dana Chen')).toBeTruthy();
123
+ });
124
+ it('filters by search', async () => {
125
+ render(_jsx(Users, { embedded: true }));
126
+ await screen.findByText('Dana Chen');
127
+ fireEvent.change(screen.getByLabelText('Search team members'), { target: { value: 'priya' } });
128
+ await waitFor(() => expect(screen.queryByText('Dana Chen')).toBeNull());
129
+ expect(screen.getByText('Priya Nair')).toBeTruthy();
130
+ });
131
+ it('opens the invite modal with role radio cards', async () => {
132
+ render(_jsx(Users, { embedded: true }));
133
+ await screen.findByText('Dana Chen');
134
+ fireEvent.click(screen.getByRole('button', { name: /Invite user/ }));
135
+ const dialog = await screen.findByRole('dialog');
136
+ expect(within(dialog).getByText('Invite a user')).toBeTruthy();
137
+ expect(within(dialog).getByPlaceholderText('name@company.com')).toBeTruthy();
138
+ // Owner sees the advanced Owner role card too (current user is Owner).
139
+ expect(within(dialog).getByText('Owner')).toBeTruthy();
140
+ expect(within(dialog).getByText('Admin')).toBeTruthy();
141
+ expect(within(dialog).getByText('Editor')).toBeTruthy();
142
+ expect(within(dialog).getByText('Viewer')).toBeTruthy();
143
+ expect(within(dialog).getByRole('button', { name: 'Send invite' })).toBeTruthy();
144
+ });
145
+ });
146
+ //# sourceMappingURL=users.render.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/users.render.test.tsx"],"names":[],"mappings":"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"}