@prenta/admin 1.11.0 → 1.13.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.
Files changed (75) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/__tests__/components/seo-editor-pane.render.test.js +15 -0
  3. package/dist/__tests__/components/seo-editor-pane.render.test.js.map +1 -1
  4. package/dist/__tests__/lib/seo-service-errors.test.js +87 -1
  5. package/dist/__tests__/lib/seo-service-errors.test.js.map +1 -1
  6. package/dist/__tests__/views/ai-settings.render.test.js +26 -8
  7. package/dist/__tests__/views/ai-settings.render.test.js.map +1 -1
  8. package/dist/__tests__/views/redirects-pane.render.test.js +20 -2
  9. package/dist/__tests__/views/redirects-pane.render.test.js.map +1 -1
  10. package/dist/__tests__/views/seo-settings.render.test.js +110 -5
  11. package/dist/__tests__/views/seo-settings.render.test.js.map +1 -1
  12. package/dist/components/seo/SeoCopilotDrawer.d.ts.map +1 -1
  13. package/dist/components/seo/SeoCopilotDrawer.js +4 -0
  14. package/dist/components/seo/SeoCopilotDrawer.js.map +1 -1
  15. package/dist/components/seo/SeoEditorPane.d.ts.map +1 -1
  16. package/dist/components/seo/SeoEditorPane.js +8 -1
  17. package/dist/components/seo/SeoEditorPane.js.map +1 -1
  18. package/dist/components/seo/SeoIssueFixDrawer.d.ts.map +1 -1
  19. package/dist/components/seo/SeoIssueFixDrawer.js +4 -0
  20. package/dist/components/seo/SeoIssueFixDrawer.js.map +1 -1
  21. package/dist/components/seo/SeoSearchStats.d.ts +4 -0
  22. package/dist/components/seo/SeoSearchStats.d.ts.map +1 -0
  23. package/dist/components/seo/SeoSearchStats.js +91 -0
  24. package/dist/components/seo/SeoSearchStats.js.map +1 -0
  25. package/dist/lib/seo-service.d.ts +60 -0
  26. package/dist/lib/seo-service.d.ts.map +1 -1
  27. package/dist/lib/seo-service.js +53 -1
  28. package/dist/lib/seo-service.js.map +1 -1
  29. package/dist/prenta-admin.css +1 -1
  30. package/dist/views/seo/OverviewTab.js +1 -1
  31. package/dist/views/seo/OverviewTab.js.map +1 -1
  32. package/dist/views/seo/RedirectsTab.d.ts.map +1 -1
  33. package/dist/views/seo/RedirectsTab.js +6 -0
  34. package/dist/views/seo/RedirectsTab.js.map +1 -1
  35. package/dist/views/settings/AISettingsTab.d.ts.map +1 -1
  36. package/dist/views/settings/AISettingsTab.js +1 -1
  37. package/dist/views/settings/AISettingsTab.js.map +1 -1
  38. package/dist/views/settings/AiFeaturesCard.d.ts +8 -3
  39. package/dist/views/settings/AiFeaturesCard.d.ts.map +1 -1
  40. package/dist/views/settings/AiFeaturesCard.js +7 -6
  41. package/dist/views/settings/AiFeaturesCard.js.map +1 -1
  42. package/dist/views/settings/SearchDataCard.d.ts +10 -0
  43. package/dist/views/settings/SearchDataCard.d.ts.map +1 -0
  44. package/dist/views/settings/SearchDataCard.js +126 -0
  45. package/dist/views/settings/SearchDataCard.js.map +1 -0
  46. package/dist/views/settings/SeoDigestCard.d.ts +9 -0
  47. package/dist/views/settings/SeoDigestCard.d.ts.map +1 -0
  48. package/dist/views/settings/SeoDigestCard.js +77 -0
  49. package/dist/views/settings/SeoDigestCard.js.map +1 -0
  50. package/dist/views/settings/SeoSettingsTab.d.ts.map +1 -1
  51. package/dist/views/settings/SeoSettingsTab.js +3 -1
  52. package/dist/views/settings/SeoSettingsTab.js.map +1 -1
  53. package/dist/views/settings/useAiSettings.d.ts +12 -0
  54. package/dist/views/settings/useAiSettings.d.ts.map +1 -1
  55. package/dist/views/settings/useAiSettings.js +29 -1
  56. package/dist/views/settings/useAiSettings.js.map +1 -1
  57. package/package.json +3 -3
  58. package/src/__tests__/components/seo-editor-pane.render.test.tsx +25 -3
  59. package/src/__tests__/lib/seo-service-errors.test.ts +111 -0
  60. package/src/__tests__/views/ai-settings.render.test.tsx +38 -8
  61. package/src/__tests__/views/redirects-pane.render.test.tsx +28 -2
  62. package/src/__tests__/views/seo-settings.render.test.tsx +156 -4
  63. package/src/components/seo/SeoCopilotDrawer.tsx +4 -0
  64. package/src/components/seo/SeoEditorPane.tsx +13 -0
  65. package/src/components/seo/SeoIssueFixDrawer.tsx +4 -0
  66. package/src/components/seo/SeoSearchStats.tsx +183 -0
  67. package/src/lib/seo-service.ts +107 -2
  68. package/src/views/seo/OverviewTab.tsx +1 -1
  69. package/src/views/seo/RedirectsTab.tsx +6 -0
  70. package/src/views/settings/AISettingsTab.tsx +1 -0
  71. package/src/views/settings/AiFeaturesCard.tsx +59 -2
  72. package/src/views/settings/SearchDataCard.tsx +390 -0
  73. package/src/views/settings/SeoDigestCard.tsx +164 -0
  74. package/src/views/settings/SeoSettingsTab.tsx +4 -0
  75. package/src/views/settings/useAiSettings.ts +71 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,53 @@
1
1
  # @actuate-media/cms-admin
2
2
 
3
+ ## 1.13.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 9b3a11c: The weekly SEO cron (`/api/cms/cron/seo-scan`, Mondays) now runs the full
8
+ persisting audit pipeline — the same `SeoAuditRun` + `SeoIssue` artifacts as
9
+ the admin's "Run audit" button, with run-over-run score deltas and 404
10
+ redirect-recovery seeding — instead of the legacy compute-and-discard scan
11
+ (the admin's manual `POST /seo/scan` quick scan is unchanged). Stale RUNNING
12
+ runs older than 15 minutes are swept to FAILED at the start of each tick.
13
+
14
+ New opt-in **weekly SEO digest email** (Settings → SEO → Weekly digest): site
15
+ score + delta, 7-day search clicks/impressions with week-over-week change,
16
+ impression-weighted quick wins, new issues since the previous audit, and
17
+ pending proposal counts, with deep links into the admin. Off by default;
18
+ sends only when enabled with at least one recipient (max 10, one email per
19
+ recipient). A failed or stale audit is called out at the top of the email
20
+ instead of silently reporting old numbers. Includes
21
+ `GET/PUT /seo/digest-settings` and a rate-limited
22
+ `POST /seo/digest-settings/test-send` that emails the current user. No new
23
+ cron entry is needed — existing deployments get all of this by upgrading.
24
+
25
+ ## 1.12.0
26
+
27
+ ### Minor Changes
28
+
29
+ - fda3a91: Enforce the per-feature AI governance flags (audit roadmap item 2). `maxRequestsPerDay` now rate-limits the governed runtime (new `rate_limited` error → HTTP 429); `approvalRequired` / `allowBulkApply` gate the 404-recovery auto-apply pipeline via a new `ai/governance` module (safe defaults: approval required, no bulk). New governed `embedForFeature` runtime path (toggle + budget + cap + metering) powers the 404 redirect rerank, replacing the ungoverned plugin-ai import; OpenAI-compatible providers gain an embeddings adapter. Fixed `mergeFeatures` silently resetting stored `approvalRequired`/`allowBulkApply`. Removed the misleading `redirectChainFlattening` AI flag (chain flattening is deterministic). `PUT /ai/settings` accepts and validates the three governance fields, and Settings → AI exposes per-feature approval, bulk-apply, and daily-cap controls. The admin surfaces governed refusals instead of swallowing them: rate-limit/budget/disabled messages appear verbatim in the SEO copilot surfaces, and the Redirects tab explains when governance skipped an auto-apply.
30
+
31
+ **UPGRADE NOTE — behavior change:** with the default flags (`approvalRequired: true`), the SEO module's "Auto-apply high-confidence redirects" setting no longer applies redirects on its own. Eligible redirects are stored as pending suggestions until you disable "Require approval" (and enable "Allow bulk apply" for multi-redirect runs) for **404 Recovery suggestions** under Settings → AI. Existing instances that relied on unattended auto-apply must flip those two switches once after upgrading.
32
+
33
+ - a112369: Google Search Console + CrUX integration: real search outcome data now feeds the SEO engine.
34
+
35
+ **@prenta/core**
36
+ - New `SearchPerfDaily` and `SearchPageInsight` tables (additive migration) storing daily GSC search analytics (90-day rolling window) and per-page 28-day totals, deltas, top-query snapshots, and CrUX p75 Core Web Vitals.
37
+ - Service-account GSC client (`jose` RS256 JWT, zero new dependencies) with typed error taxonomy, pagination, and injectable fetch; keyed CrUX client with p75 threshold classification (404 = no field data, never a failure).
38
+ - Nightly `/cron/search-sync` (chunked, resumable, rotating CrUX cap for serverless duration limits) plus admin endpoints: `GET/PUT /seo/search-console` (encrypted key storage, never echoed), `POST /seo/search-console/test`, `POST /seo/search-sync` (rate-limited), and `GET /seo/search-insights/:entityId`.
39
+ - Audit engine consumes synced data: poor CWV populates the `slowPages` performance signal, a new `declining-performance` issue fires on ≥40% 28-day click drops, and quick wins are impression-weighted. Sync writes data only — the audit engine stays the single issue writer.
40
+ - SEO overview serves real search performance, impressions, and average position (with real trends) when connected; demo data remains the fallback.
41
+ - AI content briefs and `/ai/seo/generate-field` prompts now include the page's real 28-day stats and top queries, clamped and fenced as untrusted data.
42
+
43
+ **@prenta/admin**
44
+ - New "Search data" card in Settings → SEO: paste a service-account JSON key and CrUX API key (write-only, masked), property input with suggestion, test connection, sync status, and manual "Sync now".
45
+ - New read-only "Search performance" section in the SEO editor pane: 28-day clicks/impressions/position with deltas, top queries, and real-user Core Web Vitals.
46
+ - Overview empty state now points at the Search data settings instead of the unrelated verification token.
47
+
48
+ **@prenta/mcp-server**
49
+ - New tools: `get_search_performance` (top pages, real data when connected) and `run_search_sync` (confirm-gated manual sync).
50
+
3
51
  ## 1.11.0
4
52
 
5
53
  ### Minor Changes
@@ -97,5 +97,20 @@ describe('SeoEditorPane OG generation', () => {
97
97
  // ...and the search meta title is untouched (was NOT overwritten/cleared).
98
98
  expect(screen.getByDisplayValue('Home')).toBeTruthy();
99
99
  });
100
+ it('surfaces a governance/rate-limit refusal as its own toast, not "No suggestion"', async () => {
101
+ const capMsg = 'The "SEO meta generation" feature reached its daily limit of 5 AI requests. Raise the cap in Settings > AI.';
102
+ generateSeoField.mockResolvedValueOnce({ error: capMsg });
103
+ const { toast } = await import('sonner');
104
+ render(_jsx(SeoEditorPane, { entityType: "page", entityId: "p1", onClose: () => { } }));
105
+ expect(await screen.findByDisplayValue('Home')).toBeTruthy();
106
+ fireEvent.click(screen.getByRole('button', { name: /Social appearance/ }));
107
+ const ogLabel = await screen.findByText('OG title');
108
+ const ogFieldHeader = ogLabel.closest('div');
109
+ fireEvent.click(within(ogFieldHeader).getByRole('button', { name: /AI Generate/ }));
110
+ // The server's crafted message (which cap, where to raise it) reaches the
111
+ // user verbatim instead of the generic "No suggestion was returned."
112
+ await waitFor(() => expect(toast.error).toHaveBeenCalledWith(capMsg));
113
+ expect(screen.queryByDisplayValue('Generated OG Title')).toBeNull();
114
+ });
100
115
  });
101
116
  //# sourceMappingURL=seo-editor-pane.render.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"seo-editor-pane.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/components/seo-editor-pane.render.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seo-editor-pane.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/components/seo-editor-pane.render.test.tsx"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ const cmsApi = vi.fn();
3
3
  vi.mock('../../lib/api.js', () => ({
4
4
  cmsApi: (...args) => cmsApi(...args),
5
5
  }));
6
- const { applySeoInternalLink, fetchSeoOverview, fetchSeoContentRecords, fetchSeoIssues, fetchRedirectRules, isInlineSeoFixIssue, runSeoAudit, updateSeoFields, } = await import('../../lib/seo-service.js');
6
+ const { applySeoInternalLink, explainSeoIssue, fetchDigestSettings, fetchSeoOverview, fetchSeoContentRecords, fetchSeoIssues, fetchRedirectRules, generate404RecoverySuggestions, generateSeoField, generateStructuredData, isInlineSeoFixIssue, runSeoAudit, summarizeSeoAudit, updateSeoFields, } = await import('../../lib/seo-service.js');
7
7
  afterEach(() => {
8
8
  cmsApi.mockReset();
9
9
  });
@@ -69,6 +69,92 @@ describe('SEO service read fetchers surface errors', () => {
69
69
  });
70
70
  });
71
71
  });
72
+ /**
73
+ * Regression tests for the "swallowed governance errors" gap: the governed AI
74
+ * runtime returns crafted 429/403 messages (daily request cap, monthly budget,
75
+ * disabled feature) and the copilot helpers must surface them, not collapse to
76
+ * `{}` — which the UI renders as the misleading "No suggestion was returned."
77
+ * Unavailability (501/503) stays a distinct graceful state.
78
+ */
79
+ describe('AI copilot helpers surface governance errors', () => {
80
+ const capMsg = 'The "SEO meta generation" feature reached its daily limit of 5 AI requests. Raise the cap in Settings > AI.';
81
+ it('generateSeoField returns the server message on 429', async () => {
82
+ cmsApi.mockResolvedValue({ error: capMsg, status: 429 });
83
+ await expect(generateSeoField('metaTitle', { entityType: 'page', entityId: 'p1' })).resolves.toEqual({ error: capMsg });
84
+ });
85
+ it('generateSeoField still maps 501/503 to { unavailable: true }', async () => {
86
+ cmsApi.mockResolvedValue({ error: 'AI provider is not configured', status: 503 });
87
+ await expect(generateSeoField('metaTitle', { entityType: 'page', entityId: 'p1' })).resolves.toEqual({ unavailable: true });
88
+ });
89
+ it('explainSeoIssue returns the server message on 429', async () => {
90
+ cmsApi.mockResolvedValue({ error: capMsg, status: 429 });
91
+ await expect(explainSeoIssue('issue-1')).resolves.toEqual({ error: capMsg });
92
+ });
93
+ it('generateStructuredData returns the server message on 403', async () => {
94
+ cmsApi.mockResolvedValue({ error: 'This AI feature is disabled.', status: 403 });
95
+ await expect(generateStructuredData({ entityType: 'page', entityId: 'p1', schemaType: 'Article' })).resolves.toEqual({ error: 'This AI feature is disabled.' });
96
+ });
97
+ it('summarizeSeoAudit returns the server message on 429', async () => {
98
+ cmsApi.mockResolvedValue({ error: capMsg, status: 429 });
99
+ await expect(summarizeSeoAudit()).resolves.toEqual({ error: capMsg });
100
+ });
101
+ });
102
+ describe('generate404RecoverySuggestions governance passthrough', () => {
103
+ it('surfaces governanceBlocked from the suggest response', async () => {
104
+ cmsApi.mockResolvedValue({
105
+ data: {
106
+ created: 3,
107
+ autoApplied: 0,
108
+ governanceBlocked: 'Auto-apply requires human approval.',
109
+ },
110
+ status: 200,
111
+ });
112
+ await expect(generate404RecoverySuggestions()).resolves.toEqual({
113
+ autoApplied: 0,
114
+ governanceBlocked: 'Auto-apply requires human approval.',
115
+ });
116
+ });
117
+ it('normalizes a null governanceBlocked to undefined', async () => {
118
+ cmsApi.mockResolvedValue({
119
+ data: { created: 1, autoApplied: 1, governanceBlocked: null },
120
+ status: 200,
121
+ });
122
+ await expect(generate404RecoverySuggestions()).resolves.toEqual({ autoApplied: 1 });
123
+ });
124
+ });
125
+ /**
126
+ * Regression tests for the digest-settings shape crash: a response body that
127
+ * isn't the expected settings object (e.g. a catch-all `{}` mock, or a future
128
+ * server drift) must resolve to null — which SeoDigestCard renders as its
129
+ * error state — instead of leaking a malformed object that crashes on
130
+ * `recipients.join`.
131
+ */
132
+ describe('fetchDigestSettings response validation', () => {
133
+ it('returns null when the response body is not a digest settings object', async () => {
134
+ cmsApi.mockResolvedValue({ data: {}, status: 200 });
135
+ await expect(fetchDigestSettings()).resolves.toBeNull();
136
+ });
137
+ it('returns null when recipients is missing', async () => {
138
+ cmsApi.mockResolvedValue({ data: { enabled: true }, status: 200 });
139
+ await expect(fetchDigestSettings()).resolves.toBeNull();
140
+ });
141
+ it('returns null on request failure', async () => {
142
+ cmsApi.mockResolvedValue({ error: 'Request failed (500)', status: 500 });
143
+ await expect(fetchDigestSettings()).resolves.toBeNull();
144
+ });
145
+ it('normalizes a valid payload, defaulting absent nullable fields to null', async () => {
146
+ cmsApi.mockResolvedValue({
147
+ data: { enabled: true, recipients: ['owner@example.com'] },
148
+ status: 200,
149
+ });
150
+ await expect(fetchDigestSettings()).resolves.toEqual({
151
+ enabled: true,
152
+ recipients: ['owner@example.com'],
153
+ lastSentAt: null,
154
+ lastError: null,
155
+ });
156
+ });
157
+ });
72
158
  describe('inline SEO fix issue types', () => {
73
159
  it('treats orphan-page as an inline Approve issue', () => {
74
160
  expect(isInlineSeoFixIssue('orphan-page')).toBe(true);
@@ -1 +1 @@
1
- {"version":3,"file":"seo-service-errors.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/seo-service-errors.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seo-service-errors.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/seo-service-errors.test.ts"],"names":[],"mappings":"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"}
@@ -19,14 +19,9 @@ const SETTINGS_RESPONSE = {
19
19
  enabled: true,
20
20
  category: 'content',
21
21
  requiredCapabilities: ['text'],
22
- },
23
- {
24
- key: 'ai.features.redirectChainFlattening',
25
- label: 'Redirect chain flattening',
26
- description: 'Suggest single-hop redirects.',
27
- enabled: false,
28
- category: 'seo',
29
- requiredCapabilities: ['text'],
22
+ approvalRequired: true,
23
+ allowBulkApply: false,
24
+ maxRequestsPerDay: 40,
30
25
  },
31
26
  ],
32
27
  budget: { monthlyTokenLimit: 1000000 },
@@ -201,6 +196,26 @@ describe('AISettingsTab', () => {
201
196
  const cw = body.features.find((f) => f.key === 'ai.features.contentWriting');
202
197
  expect(cw.modelId).toBe('anthropic:claude-haiku');
203
198
  });
199
+ it('renders per-feature governance controls and buffers edits into the save payload', async () => {
200
+ render(_jsx(AISettingsTab, { role: "ADMIN" }));
201
+ await screen.findByText('AI Features');
202
+ const approval = screen.getByRole('switch', { name: 'Require approval' });
203
+ expect(screen.getByRole('switch', { name: 'Allow bulk apply' })).toBeTruthy();
204
+ const capInput = screen.getByLabelText('Max requests per day');
205
+ expect(capInput.value).toBe('40');
206
+ fireEvent.click(approval);
207
+ fireEvent.change(capInput, { target: { value: '15' } });
208
+ const save = screen.getByRole('button', { name: 'Save Changes' });
209
+ expect(save.disabled).toBe(false);
210
+ fireEvent.click(save);
211
+ await waitFor(() => expect(cmsApi).toHaveBeenCalledWith('/ai/settings', expect.objectContaining({ method: 'PUT' })));
212
+ const putCall = cmsApi.mock.calls.find(([e, o]) => e === '/ai/settings' && o?.method === 'PUT');
213
+ const body = JSON.parse(putCall[1].body);
214
+ const cw = body.features.find((f) => f.key === 'ai.features.contentWriting');
215
+ expect(cw.approvalRequired).toBe(false);
216
+ expect(cw.allowBulkApply).toBe(false);
217
+ expect(cw.maxRequestsPerDay).toBe(15);
218
+ });
204
219
  it('warns when a feature would run on a model missing a required capability', async () => {
205
220
  settingsResponse = deepClone(SETTINGS_RESPONSE);
206
221
  // Alt-text needs vision; route it through the text-only Haiku model.
@@ -212,6 +227,9 @@ describe('AISettingsTab', () => {
212
227
  category: 'media',
213
228
  requiredCapabilities: ['vision'],
214
229
  modelId: 'anthropic:claude-haiku',
230
+ approvalRequired: true,
231
+ allowBulkApply: false,
232
+ maxRequestsPerDay: 100,
215
233
  });
216
234
  render(_jsx(AISettingsTab, { role: "ADMIN" }));
217
235
  await screen.findByText('AI Features');
@@ -1 +1 @@
1
- {"version":3,"file":"ai-settings.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/ai-settings.render.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-settings.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/ai-settings.render.test.tsx"],"names":[],"mappings":"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"}
@@ -33,6 +33,7 @@ const fetchRedirectRules = vi.fn(async () => RULES);
33
33
  const createRedirectRule = vi.fn(async (_p) => ({}));
34
34
  const updateRedirectRule = vi.fn(async (_id, _p) => ({}));
35
35
  const deleteRedirectRule = vi.fn(async (_id) => ({}));
36
+ const generate404RecoverySuggestions = vi.fn(async () => ({}));
36
37
  vi.mock('../../lib/seo-service.js', () => ({
37
38
  fetchRedirectOverview: vi.fn(async () => ({
38
39
  activeRedirects: 2,
@@ -48,7 +49,7 @@ vi.mock('../../lib/seo-service.js', () => ({
48
49
  updateRedirectRule: (id, p) => updateRedirectRule(id, p),
49
50
  deleteRedirectRule: (id) => deleteRedirectRule(id),
50
51
  flattenRedirectChain: vi.fn(async () => ({})),
51
- generate404RecoverySuggestions: vi.fn(async () => ({})),
52
+ generate404RecoverySuggestions: () => generate404RecoverySuggestions(),
52
53
  acceptRedirectSuggestion: vi.fn(async () => ({})),
53
54
  dismissRedirectSuggestion: vi.fn(async () => ({})),
54
55
  exportRedirectsCsv: vi.fn(async () => ({ csv: '' })),
@@ -60,7 +61,9 @@ vi.mock('../../lib/seo-service.js', () => ({
60
61
  })),
61
62
  saveRedirectRecoverySettings: vi.fn(async () => ({})),
62
63
  }));
63
- vi.mock('sonner', () => ({ toast: { success: vi.fn(), error: vi.fn(), loading: vi.fn() } }));
64
+ vi.mock('sonner', () => ({
65
+ toast: { success: vi.fn(), error: vi.fn(), info: vi.fn(), loading: vi.fn() },
66
+ }));
64
67
  const { RedirectsTab } = await import('../../views/seo/RedirectsTab.js');
65
68
  beforeEach(() => {
66
69
  fetchRedirectRules.mockClear();
@@ -126,4 +129,19 @@ describe('Redirects inline editor pane', () => {
126
129
  expect(createRedirectRule).not.toHaveBeenCalled();
127
130
  });
128
131
  });
132
+ describe('AI 404 recovery governance feedback', () => {
133
+ it('explains why auto-apply was skipped when governance blocked it', async () => {
134
+ generate404RecoverySuggestions.mockResolvedValueOnce({
135
+ autoApplied: 0,
136
+ governanceBlocked: 'The "404 Recovery suggestions" feature requires human approval before AI results are applied.',
137
+ });
138
+ const { toast } = await import('sonner');
139
+ render(_jsx(RedirectsTab, {}));
140
+ fireEvent.click(await screen.findByRole('button', { name: /Generate suggestions/ }));
141
+ // Generation succeeded — suggestions exist — but the operator is told the
142
+ // governance reason instead of silently seeing nothing auto-applied.
143
+ await waitFor(() => expect(toast.info).toHaveBeenCalledWith(expect.stringContaining('requires human approval')));
144
+ expect(toast.success).toHaveBeenCalledWith('Generated 404 recovery suggestions.');
145
+ });
146
+ });
129
147
  //# sourceMappingURL=redirects-pane.render.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"redirects-pane.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/redirects-pane.render.test.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAChC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAE3E;;;;;GAKG;AAEH,SAAS,QAAQ,CAAC,OAAgC,EAAE;IAClD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,GAAY;QAClB,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,CAAC;QACX,aAAa,EAAE,KAAK;QACpB,IAAI,EAAE,CAAC;QACP,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,sBAAsB;QACjC,GAAG,IAAI;KACR,CAAA;AACH,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAA;AAE5F,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAA;AACnD,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAW,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC7D,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,GAAW,EAAE,EAAW,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC1E,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAE7D,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,qBAAqB,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACxC,eAAe,EAAE,CAAC;QAClB,cAAc,EAAE,CAAC;QACjB,iBAAiB,EAAE,CAAC;QACpB,aAAa,EAAE,CAAC;QAChB,cAAc,EAAE,CAAC;KAClB,CAAC,CAAC;IACH,kBAAkB,EAAE,GAAG,EAAE,CAAC,kBAAkB,EAAE;IAC9C,mBAAmB,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;IAC1C,wBAAwB,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;IAC/C,kBAAkB,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACzD,kBAAkB,EAAE,CAAC,EAAU,EAAE,CAAU,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC;IACzE,kBAAkB,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC1D,oBAAoB,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7C,8BAA8B,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACvD,wBAAwB,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACjD,yBAAyB,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAClD,kBAAkB,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IACpD,kBAAkB,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IACxD,6BAA6B,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAChD,QAAQ,EAAE,KAAK;QACf,SAAS,EAAE,KAAK;QAChB,sBAAsB,EAAE,IAAI;KAC7B,CAAC,CAAC;IACH,4BAA4B,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;CACtD,CAAC,CAAC,CAAA;AAEH,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;AAE5F,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAA;AAExE,UAAU,CAAC,GAAG,EAAE;IACd,kBAAkB,CAAC,SAAS,EAAE,CAAA;IAC9B,kBAAkB,CAAC,SAAS,EAAE,CAAA;IAC9B,kBAAkB,CAAC,SAAS,EAAE,CAAA;IAC9B,kBAAkB,CAAC,SAAS,EAAE,CAAA;AAChC,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,CAAC,KAAC,YAAY,KAAG,CAAC,CAAA;QACxB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;QAC1E,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAE7D,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAE1B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAC5E,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC5D,gDAAgD;QAChD,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QACjF,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IACnF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,CAAC,KAAC,YAAY,KAAG,CAAC,CAAA;QACxB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;QAE1E,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC1B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAE5E,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC1B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC9E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,CAAC,KAAC,YAAY,KAAG,CAAC,CAAA;QACxB,SAAS,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;QACzE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAE5E,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAA;QAC9E,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC9E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,CAAC,KAAC,YAAY,KAAG,CAAC,CAAA;QACxB,SAAS,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;QACzE,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;QAEnD,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAA;QACvF,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAA;QAErE,MAAM,OAAO,CAAC,GAAG,EAAE,CACjB,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAC7C,IAAI,EACJ,MAAM,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAChF,CACF,CAAA;QACD,iDAAiD;QACjD,MAAM,OAAO,CAAC,GAAG,EAAE,CACjB,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAC7E,CAAA;QACD,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAA;IAC3F,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,CAAC,KAAC,YAAY,KAAG,CAAC,CAAA;QACxB,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;QAExD,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAA;QACrE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAE5E,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAA;QACvF,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAA;QACvF,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAA;QAExE,yDAAyD;QACzD,MAAM,OAAO,CAAC,GAAG,EAAE,CACjB,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAC7C,MAAM,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAC9E,CACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,CAAC,KAAC,YAAY,KAAG,CAAC,CAAA;QACxB,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;QAExD,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAA;QACrE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAA;QAExE,MAAM,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QACrD,MAAM,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IACnD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"redirects-pane.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/redirects-pane.render.test.tsx"],"names":[],"mappings":"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"}
@@ -2,10 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // @vitest-environment happy-dom
3
3
  import { beforeEach, describe, expect, it, vi } from 'vitest';
4
4
  import { fireEvent, render, screen, waitFor, within } from '@testing-library/react';
5
- // The SEO defaults tab reads four shared backends: /seo/config (meta defaults +
6
- // verification), /seo/crawl-settings (sitemap toggles), /seo/sitemap/status
7
- // (read-only summary), and /seo/index-status (environment).
8
- const cmsApi = vi.fn(async (endpoint, options) => {
5
+ async function defaultApi(endpoint, options) {
9
6
  const method = options?.method ?? 'GET';
10
7
  if (endpoint === '/seo/config' && method === 'GET') {
11
8
  return {
@@ -51,12 +48,45 @@ const cmsApi = vi.fn(async (endpoint, options) => {
51
48
  if (endpoint === '/seo/index-status' && method === 'GET') {
52
49
  return { data: { environment: 'preview' }, status: 200 };
53
50
  }
51
+ if (endpoint === '/seo/search-console' && method === 'GET') {
52
+ return {
53
+ data: {
54
+ propertyUrl: '',
55
+ hasServiceAccountKey: false,
56
+ serviceAccountEmail: null,
57
+ hasCruxApiKey: false,
58
+ connected: false,
59
+ lastSyncAt: null,
60
+ syncStatus: null,
61
+ suggestedProperty: 'sc-domain:acme.test',
62
+ },
63
+ status: 200,
64
+ };
65
+ }
66
+ if (endpoint === '/seo/digest-settings' && method === 'GET') {
67
+ return {
68
+ data: { enabled: false, recipients: [], lastSentAt: null, lastError: null },
69
+ status: 200,
70
+ };
71
+ }
54
72
  return { data: {}, status: 200 };
55
- });
73
+ }
74
+ const cmsApi = vi.fn(defaultApi);
56
75
  vi.mock('../../lib/api.js', () => ({
57
76
  cmsApi: (e, o) => cmsApi(e, o),
58
77
  ensureCsrfToken: vi.fn(async () => { }),
59
78
  }));
79
+ // Record toast calls so tests can assert server errors are surfaced verbatim.
80
+ const toastSuccess = vi.fn();
81
+ const toastError = vi.fn();
82
+ vi.mock('sonner', () => ({
83
+ toast: {
84
+ success: (...args) => toastSuccess(...args),
85
+ error: (...args) => toastError(...args),
86
+ warning: vi.fn(),
87
+ loading: vi.fn(),
88
+ },
89
+ }));
60
90
  // Stub the Media Center picker: when open, expose a button that selects a known
61
91
  // asset (id + url), exercising the asset-id storage path without the real
62
92
  // MediaBrowser/network stack.
@@ -69,6 +99,9 @@ vi.mock('../../components/MediaPickerModal.js', () => ({
69
99
  const { SeoSettingsTab } = await import('../../views/settings/SeoSettingsTab.js');
70
100
  beforeEach(() => {
71
101
  cmsApi.mockClear();
102
+ cmsApi.mockImplementation(defaultApi);
103
+ toastSuccess.mockClear();
104
+ toastError.mockClear();
72
105
  });
73
106
  describe('SeoSettingsTab', () => {
74
107
  it('renders the workspace callout and loads meta defaults from /seo/config', async () => {
@@ -169,5 +202,77 @@ describe('SeoSettingsTab', () => {
169
202
  const metaCard = screen.getByRole('region', { name: 'Meta Defaults' });
170
203
  expect(within(metaCard).getByLabelText('Title template').disabled).toBe(true);
171
204
  });
205
+ it('renders the Search data card in its not-connected state with gated actions', async () => {
206
+ render(_jsx(SeoSettingsTab, { role: "ADMIN" }));
207
+ expect(await screen.findByText('Not connected')).toBeTruthy();
208
+ // Test/sync require a stored key or a working connection respectively.
209
+ expect(screen.getByRole('button', { name: /Test connection/ }).disabled).toBe(true);
210
+ expect(screen.getByRole('button', { name: /Sync now/ }).disabled).toBe(true);
211
+ });
212
+ it('saves Search Console credentials via PUT /seo/search-console', async () => {
213
+ render(_jsx(SeoSettingsTab, { role: "ADMIN" }));
214
+ fireEvent.change(await screen.findByLabelText(/Search Console property/), {
215
+ target: { value: 'sc-domain:acme.test' },
216
+ });
217
+ fireEvent.change(screen.getByLabelText(/Service account key/), {
218
+ target: { value: '{"client_email":"svc@acme.iam.gserviceaccount.com","private_key":"k"}' },
219
+ });
220
+ fireEvent.click(screen.getByRole('button', { name: /Save credentials/ }));
221
+ await waitFor(() => expect(cmsApi).toHaveBeenCalledWith('/seo/search-console', expect.objectContaining({ method: 'PUT' })));
222
+ const putCall = cmsApi.mock.calls.find(([e, o]) => e === '/seo/search-console' && o?.method === 'PUT');
223
+ const body = JSON.parse(putCall[1].body);
224
+ expect(body.propertyUrl).toBe('sc-domain:acme.test');
225
+ expect(body.serviceAccountKey).toContain('svc@acme.iam.gserviceaccount.com');
226
+ });
227
+ it('renders the Weekly SEO digest card with the toggle off by default', async () => {
228
+ render(_jsx(SeoSettingsTab, { role: "ADMIN" }));
229
+ expect(await screen.findByText('Weekly SEO digest')).toBeTruthy();
230
+ const toggle = screen.getByRole('switch', { name: 'Send weekly digest' });
231
+ expect(toggle.getAttribute('aria-checked')).toBe('false');
232
+ expect(screen.getByText('Never sent')).toBeTruthy();
233
+ });
234
+ it('saves recipients as a trimmed, comma-split list', async () => {
235
+ render(_jsx(SeoSettingsTab, { role: "ADMIN" }));
236
+ await screen.findByText('Weekly SEO digest');
237
+ fireEvent.change(screen.getByLabelText('Recipients'), {
238
+ target: { value: ' a@x.com , b@x.com ' },
239
+ });
240
+ fireEvent.click(screen.getByRole('button', { name: 'Save recipients' }));
241
+ await waitFor(() => expect(cmsApi).toHaveBeenCalledWith('/seo/digest-settings', expect.objectContaining({ method: 'PUT' })));
242
+ const putCall = cmsApi.mock.calls.find(([e, o]) => e === '/seo/digest-settings' && o?.method === 'PUT');
243
+ const body = JSON.parse(putCall[1].body);
244
+ expect(body.recipients).toEqual(['a@x.com', 'b@x.com']);
245
+ });
246
+ it('surfaces the server error verbatim when test-send fails', async () => {
247
+ cmsApi.mockImplementation(async (endpoint, options) => {
248
+ if (endpoint === '/seo/digest-settings/test-send' && options?.method === 'POST') {
249
+ return { error: 'No completed SEO audit yet — run an audit first', status: 409 };
250
+ }
251
+ return defaultApi(endpoint, options);
252
+ });
253
+ render(_jsx(SeoSettingsTab, { role: "ADMIN" }));
254
+ await screen.findByText('Weekly SEO digest');
255
+ fireEvent.click(screen.getByRole('button', { name: /Send test digest/ }));
256
+ await waitFor(() => expect(toastError).toHaveBeenCalledWith('No completed SEO audit yet — run an audit first'));
257
+ });
258
+ it('shows the last error from settings in destructive tone', async () => {
259
+ cmsApi.mockImplementation(async (endpoint, options) => {
260
+ if (endpoint === '/seo/digest-settings' && (options?.method ?? 'GET') === 'GET') {
261
+ return {
262
+ data: {
263
+ enabled: true,
264
+ recipients: ['owner@acme.test'],
265
+ lastSentAt: '2026-09-01T04:00:00Z',
266
+ lastError: '1/2 digest sends failed',
267
+ },
268
+ status: 200,
269
+ };
270
+ }
271
+ return defaultApi(endpoint, options);
272
+ });
273
+ render(_jsx(SeoSettingsTab, { role: "ADMIN" }));
274
+ const lastError = await screen.findByText(/1\/2 digest sends failed/);
275
+ expect(lastError.className).toContain('text-destructive');
276
+ });
172
277
  });
173
278
  //# sourceMappingURL=seo-settings.render.test.js.map