@prenta/admin 1.17.2 → 1.17.4
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/CHANGELOG.md +12 -0
- package/dist/__tests__/lib/posts-service.test.js +35 -0
- package/dist/__tests__/lib/posts-service.test.js.map +1 -1
- package/dist/__tests__/lib/public-path.test.d.ts +2 -0
- package/dist/__tests__/lib/public-path.test.d.ts.map +1 -0
- package/dist/__tests__/lib/public-path.test.js +25 -0
- package/dist/__tests__/lib/public-path.test.js.map +1 -0
- package/dist/__tests__/views/admin-section-renderers.test.js +1 -0
- package/dist/__tests__/views/admin-section-renderers.test.js.map +1 -1
- package/dist/__tests__/views/article-body-section.render.test.js +7 -0
- package/dist/__tests__/views/article-body-section.render.test.js.map +1 -1
- package/dist/__tests__/views/posts-list-view.render.test.js +11 -0
- package/dist/__tests__/views/posts-list-view.render.test.js.map +1 -1
- package/dist/__tests__/views/seo-autopilot-card.render.test.js +32 -47
- package/dist/__tests__/views/seo-autopilot-card.render.test.js.map +1 -1
- package/dist/__tests__/views/updates-tab.render.test.js +6 -2
- package/dist/__tests__/views/updates-tab.render.test.js.map +1 -1
- package/dist/lib/posts-service.d.ts +6 -0
- package/dist/lib/posts-service.d.ts.map +1 -1
- package/dist/lib/posts-service.js +6 -1
- package/dist/lib/posts-service.js.map +1 -1
- package/dist/lib/public-path.d.ts +21 -0
- package/dist/lib/public-path.d.ts.map +1 -0
- package/dist/lib/public-path.js +28 -0
- package/dist/lib/public-path.js.map +1 -0
- package/dist/views/Posts/PostsListView.d.ts.map +1 -1
- package/dist/views/Posts/PostsListView.js +1 -1
- package/dist/views/Posts/PostsListView.js.map +1 -1
- package/dist/views/page-editor/sections/ArticleBodySection.d.ts +3 -4
- package/dist/views/page-editor/sections/ArticleBodySection.d.ts.map +1 -1
- package/dist/views/page-editor/sections/ArticleBodySection.js +6 -5
- package/dist/views/page-editor/sections/ArticleBodySection.js.map +1 -1
- package/dist/views/page-editor/sections/admin-renderers.d.ts +3 -36
- package/dist/views/page-editor/sections/admin-renderers.d.ts.map +1 -1
- package/dist/views/page-editor/sections/admin-renderers.js +5 -5
- package/dist/views/page-editor/sections/admin-renderers.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/lib/posts-service.test.ts +35 -0
- package/src/__tests__/lib/public-path.test.ts +37 -0
- package/src/__tests__/views/admin-section-renderers.test.tsx +1 -0
- package/src/__tests__/views/article-body-section.render.test.tsx +14 -0
- package/src/__tests__/views/posts-list-view.render.test.tsx +12 -0
- package/src/__tests__/views/seo-autopilot-card.render.test.tsx +32 -53
- package/src/__tests__/views/updates-tab.render.test.tsx +6 -2
- package/src/lib/posts-service.ts +12 -1
- package/src/lib/public-path.ts +33 -0
- package/src/views/Posts/PostsListView.tsx +2 -1
- package/src/views/page-editor/sections/ArticleBodySection.tsx +7 -5
- package/src/views/page-editor/sections/admin-renderers.tsx +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @actuate-media/cms-admin
|
|
2
2
|
|
|
3
|
+
## 1.17.4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 30d88ab: Sanitize draft HTML in the admin canvas with the cms-core allow-list before it is rendered. The sanitizer is available from `@prenta/core/sanitize` so the admin bundle does not import the server barrel.
|
|
8
|
+
|
|
9
|
+
## 1.17.3
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 2a46f45: The All Posts table subtitle rendered `/{collectionSlug}/{slug}`, so a `posts` collection relabelled Blog with `urlPrefix: 'blog'` still listed `/posts/…` (and `help/articles` / `careers` collections lied the same way). Rows now carry a `publicPath` built by the new `publicPathFor(urlPrefix, collectionSlug, slug)` helper: `/{urlPrefix}/{slug}` when a prefix is declared (nested prefixes supported), `/{slug}` when the prefix is the empty string, and `/{collectionSlug}/{slug}` only when no prefix is known. The collection slug is untouched — it remains the API / cache-tag / MCP identity. Fixes #921
|
|
14
|
+
|
|
3
15
|
## 1.17.2
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -175,6 +175,41 @@ describe('posts-service.fetchPosts', () => {
|
|
|
175
175
|
seoScore: 88,
|
|
176
176
|
});
|
|
177
177
|
});
|
|
178
|
+
it('lists the public path from the collection urlPrefix, not the collection slug (#921)', async () => {
|
|
179
|
+
cmsApiMock.mockReset();
|
|
180
|
+
cmsApiMock.mockImplementation((url) => {
|
|
181
|
+
if (!url.startsWith('/posts'))
|
|
182
|
+
return { error: `unexpected url: ${url}` };
|
|
183
|
+
return {
|
|
184
|
+
data: {
|
|
185
|
+
...POSTS_RESPONSE,
|
|
186
|
+
posts: [
|
|
187
|
+
{ ...POSTS_RESPONSE.posts[1], id: 'p1', collection: 'posts', slug: 'seo-cost' },
|
|
188
|
+
{ ...POSTS_RESPONSE.posts[1], id: 'r1', collection: 'resources', slug: 'guide' },
|
|
189
|
+
{ ...POSTS_RESPONSE.posts[1], id: 'n1', collection: 'news', slug: 'q2' },
|
|
190
|
+
{ ...POSTS_RESPONSE.posts[1], id: 'x1', collection: 'unknown-type', slug: 'orphan' },
|
|
191
|
+
],
|
|
192
|
+
types: [
|
|
193
|
+
{ ...POSTS_RESPONSE.types[0], slug: 'posts', urlPrefix: 'blog' },
|
|
194
|
+
{ ...POSTS_RESPONSE.types[0], slug: 'resources', urlPrefix: '' },
|
|
195
|
+
{ ...POSTS_RESPONSE.types[1], slug: 'news', urlPrefix: 'news' },
|
|
196
|
+
],
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
});
|
|
200
|
+
const res = await fetchPosts({});
|
|
201
|
+
const byId = new Map(res.posts.map((p) => [p.id, p]));
|
|
202
|
+
// `posts` collection relabelled Blog with `urlPrefix: 'blog'` → /blog/{slug}.
|
|
203
|
+
expect(byId.get('p1')?.publicPath).toBe('/blog/seo-cost');
|
|
204
|
+
// Collection slug stays the API identity.
|
|
205
|
+
expect(byId.get('p1')?.postTypeId).toBe('posts');
|
|
206
|
+
// Empty urlPrefix (root-mounted) → /{slug}.
|
|
207
|
+
expect(byId.get('r1')?.publicPath).toBe('/guide');
|
|
208
|
+
// Prefix equal to slug is unchanged.
|
|
209
|
+
expect(byId.get('n1')?.publicPath).toBe('/news/q2');
|
|
210
|
+
// No type row for the collection → fall back to the collection slug.
|
|
211
|
+
expect(byId.get('x1')?.publicPath).toBe('/unknown-type/orphan');
|
|
212
|
+
});
|
|
178
213
|
it('surfaces the scheduled date for SCHEDULED posts as the display date', async () => {
|
|
179
214
|
const res = await fetchPosts({});
|
|
180
215
|
const news = res.posts.find((p) => p.id === 'n1');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"posts-service.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/posts-service.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"posts-service.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/posts-service.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-path.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/lib/public-path.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { publicPathFor } from '../../lib/public-path.js';
|
|
3
|
+
describe('publicPathFor', () => {
|
|
4
|
+
it('lists /{urlPrefix}/{slug} when the collection declares a public prefix', () => {
|
|
5
|
+
// The collection slug (`posts`) is API identity; the public path is `/blog`.
|
|
6
|
+
expect(publicPathFor('blog', 'posts', 'how-much-do-seo-services-cost')).toBe('/blog/how-much-do-seo-services-cost');
|
|
7
|
+
});
|
|
8
|
+
it('falls back to /{collectionSlug}/{slug} when no urlPrefix is declared', () => {
|
|
9
|
+
expect(publicPathFor(undefined, 'posts', 'hello')).toBe('/posts/hello');
|
|
10
|
+
});
|
|
11
|
+
it('lists /{slug} when urlPrefix is the empty string (root-mounted collection)', () => {
|
|
12
|
+
expect(publicPathFor('', 'pages', 'about')).toBe('/about');
|
|
13
|
+
});
|
|
14
|
+
it('supports nested prefixes and trims stray slashes', () => {
|
|
15
|
+
expect(publicPathFor('help/articles', 'help-articles', 'reset-password')).toBe('/help/articles/reset-password');
|
|
16
|
+
expect(publicPathFor('/careers/', 'careers', '/senior-engineer/')).toBe('/careers/senior-engineer');
|
|
17
|
+
});
|
|
18
|
+
it('is unchanged for a type whose prefix equals its slug', () => {
|
|
19
|
+
expect(publicPathFor('news', 'news', 'q2-roadmap')).toBe('/news/q2-roadmap');
|
|
20
|
+
});
|
|
21
|
+
it('keeps a trailing slash placeholder when the slug is empty', () => {
|
|
22
|
+
expect(publicPathFor('blog', 'posts', '')).toBe('/blog/');
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=public-path.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-path.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/public-path.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAExD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,6EAA6E;QAC7E,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,+BAA+B,CAAC,CAAC,CAAC,IAAI,CAC1E,qCAAqC,CACtC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IACzE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,aAAa,CAAC,eAAe,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAC5E,+BAA+B,CAChC,CAAA;QACD,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,IAAI,CACrE,0BAA0B,CAC3B,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -38,6 +38,7 @@ describe('pluggable admin section renderers', () => {
|
|
|
38
38
|
render(_jsx(AdminSectionRenderersProvider, { value: renderers, children: _jsx(SectionRenderer, { section: customSection() }) }));
|
|
39
39
|
const options = seen[0];
|
|
40
40
|
expect(options.sanitizeHtml('<b>x</b>')).toBe('<b>x</b>');
|
|
41
|
+
expect(options.sanitizeHtml('<p>ok</p><script>alert(1)</script>')).not.toContain('script');
|
|
41
42
|
expect(options.baseUrl).toBe('');
|
|
42
43
|
expect(screen.getByAltText('x')).toBeTruthy();
|
|
43
44
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-section-renderers.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/admin-section-renderers.test.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admin-section-renderers.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/admin-section-renderers.test.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAChC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EACL,eAAe,EACf,6BAA6B,GAE9B,MAAM,2CAA2C,CAAA;AAGlD,SAAS,aAAa,CAAC,YAAkC,EAAE;IACzD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC9B,QAAQ,EAAE,EAAE;QACZ,GAAG,SAAS;KACb,CAAA;AACH,CAAC;AAED,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CAAC,KAAC,eAAe,IAAC,OAAO,EAAE,aAAa,EAAE,GAAI,CAAC,CAAA;QACrD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;IAC3E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,SAAS,GAA4B;YACzC,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAClC,6BAAiB,eAAe,YAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAO,CAC1E;SACF,CAAA;QACD,MAAM,CACJ,KAAC,6BAA6B,IAAC,KAAK,EAAE,SAAS,YAC7C,KAAC,eAAe,IAAC,OAAO,EAAE,aAAa,EAAE,GAAI,GACf,CACjC,CAAA;QACD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,kCAAkC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC3E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,IAAI,GAAc,EAAE,CAAA;QAC1B,MAAM,SAAS,GAA4B;YACzC,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;gBACjC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAClB,OAAO,wBAAM,OAAO,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAO,CAAA;YACtE,CAAC;SACF,CAAA;QACD,MAAM,CACJ,KAAC,6BAA6B,IAAC,KAAK,EAAE,SAAS,YAC7C,KAAC,eAAe,IAAC,OAAO,EAAE,aAAa,EAAE,GAAI,GACf,CACjC,CAAA;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAA6D,CAAA;QACnF,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACzD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,oCAAoC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC1F,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,UAAU,CAAC,GAAG,EAAE;YACd,6DAA6D;YAC7D,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;QACF,SAAS,CAAC,GAAG,EAAE;YACb,EAAE,CAAC,eAAe,EAAE,CAAA;QACtB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;YACjF,MAAM,SAAS,GAA4B;gBACzC,iBAAiB,EAAE,GAAG,EAAE;oBACtB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;gBAC/C,CAAC;aACF,CAAA;YACD,MAAM,CACJ,KAAC,6BAA6B,IAAC,KAAK,EAAE,SAAS,YAC7C,KAAC,eAAe,IAAC,OAAO,EAAE,aAAa,EAAE,GAAI,GACf,CACjC,CAAA;YACD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAC3E,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,yEAAyE;QACzE,0CAA0C;QAC1C,EAAE;QACF,uEAAuE;QACvE,yEAAyE;QACzE,uEAAuE;QACvE,oDAAoD;QACpD,sEAAsE;QACtE,sEAAsE;QACtE,wEAAwE;QACxE,0DAA0D;QAC1D,MAAM,SAAS,GAA4B;YACzC,IAAI,EAAE,GAAG,EAAE,CAAC,6BAAiB,eAAe,GAAG;SAChD,CAAA;QACD,MAAM,CACJ,KAAC,6BAA6B,IAAC,KAAK,EAAE,SAAS,YAC7C,KAAC,eAAe,IACd,OAAO,EAAE,aAAa,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAC1E,GAC4B,CACjC,CAAA;QACD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACxF,wEAAwE;QACxE,oEAAoE;QACpE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACvD,MAAM,SAAS,GAA4B;YACzC,IAAI,EAAE,GAAG,EAAE;gBACT,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;YAC3C,CAAC;SACF,CAAA;QACD,MAAM,CACJ,KAAC,6BAA6B,IAAC,KAAK,EAAE,SAAS,YAC7C,KAAC,eAAe,IACd,OAAO,EAAE,aAAa,CAAC;oBACrB,WAAW,EAAE,MAAM;oBACnB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;iBAC3C,CAAC,GACF,GAC4B,CACjC,CAAA;QACD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAC3D,EAAE,CAAC,eAAe,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,2EAA2E;QAC3E,0EAA0E;QAC1E,kEAAkE;QAClE,IAAI,IAAI,GAAmC,IAAI,CAAA;QAC/C,MAAM,SAAS,GAA4B;YACzC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;gBACpB,IAAI,GAAG,OAA6C,CAAA;gBACpD,OAAO,eAAO,CAAA;YAChB,CAAC;SACF,CAAA;QACD,MAAM,CACJ,KAAC,6BAA6B,IAAC,KAAK,EAAE,SAAS,YAC7C,KAAC,eAAe,IAAC,OAAO,EAAE,aAAa,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAI,GACnD,CACjC,CAAA;QACD,MAAM,OAAO,GAAG,IAMf,CAAA;QACD,MAAM,CAAC,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACjD,mEAAmE;QACnE,oDAAoD;QACpD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACvC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC3C,MAAM,CAAC,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACnD,MAAM,CAAC,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -20,5 +20,12 @@ describe('ArticleBodySection', () => {
|
|
|
20
20
|
expect(container.querySelector('.prenta-rich-text')).toBeTruthy();
|
|
21
21
|
expect(container.querySelector('.prose')).toBeNull();
|
|
22
22
|
});
|
|
23
|
+
it('strips script tags from draft HTML before rendering (#396)', () => {
|
|
24
|
+
const { container } = render(_jsx(ArticleBodySection, { section: section({ source: 'field' }), context: { body: '<p>Safe copy</p><script>alert(1)</script>' } }));
|
|
25
|
+
const preview = container.querySelector('.prenta-rich-text');
|
|
26
|
+
expect(preview?.querySelector('script')).toBeNull();
|
|
27
|
+
expect(preview?.innerHTML).toContain('Safe copy');
|
|
28
|
+
expect(preview?.innerHTML).not.toContain('alert');
|
|
29
|
+
});
|
|
23
30
|
});
|
|
24
31
|
//# sourceMappingURL=article-body-section.render.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article-body-section.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/article-body-section.render.test.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAA;AAG3F,SAAS,OAAO,CAAC,UAAmC,EAAE;IACpD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,WAAW,EAAE,cAAc;QAC3B,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,IAAI;QACb,OAAO;QACP,QAAQ,EAAE,EAAE;KACb,CAAA;AACH,CAAC;AAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,kBAAkB,IACjB,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EACrC,OAAO,EAAE,EAAE,IAAI,EAAE,gDAAgD,EAAE,GACnE,CACH,CAAA;QAED,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAC5F,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QACjE,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IACtD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"article-body-section.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/article-body-section.render.test.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAA;AAG3F,SAAS,OAAO,CAAC,UAAmC,EAAE;IACpD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,WAAW,EAAE,cAAc;QAC3B,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,IAAI;QACb,OAAO;QACP,QAAQ,EAAE,EAAE;KACb,CAAA;AACH,CAAC;AAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,kBAAkB,IACjB,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EACrC,OAAO,EAAE,EAAE,IAAI,EAAE,gDAAgD,EAAE,GACnE,CACH,CAAA;QAED,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAC5F,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QACjE,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,kBAAkB,IACjB,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EACrC,OAAO,EAAE,EAAE,IAAI,EAAE,2CAA2C,EAAE,GAC9D,CACH,CAAA;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAA;QAC5D,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACnD,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QACjD,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -13,6 +13,9 @@ function makePost(id, title) {
|
|
|
13
13
|
postTypeAccentColor: 'blue',
|
|
14
14
|
title,
|
|
15
15
|
slug: id,
|
|
16
|
+
// Public path comes from the collection's `urlPrefix` (`blog`), not the
|
|
17
|
+
// collection slug (`articles`) — see #921.
|
|
18
|
+
publicPath: `/blog/${id}`,
|
|
16
19
|
authorName: 'Author',
|
|
17
20
|
authorInitials: 'AU',
|
|
18
21
|
status: 'PUBLISHED',
|
|
@@ -41,6 +44,14 @@ beforeEach(() => {
|
|
|
41
44
|
bulkUpdatePosts.mockClear();
|
|
42
45
|
bulkDeletePosts.mockClear();
|
|
43
46
|
});
|
|
47
|
+
describe('PostsListView — row subtitle', () => {
|
|
48
|
+
it('shows the public path (/{urlPrefix}/{slug}) rather than /{collectionSlug}/{slug} (#921)', async () => {
|
|
49
|
+
render(_jsx(PostsListView, { onNavigate: () => { } }));
|
|
50
|
+
await screen.findByLabelText('Select "Alpha"');
|
|
51
|
+
expect(screen.getByText('/blog/a1')).toBeTruthy();
|
|
52
|
+
expect(screen.queryByText('/articles/a1')).toBeNull();
|
|
53
|
+
});
|
|
54
|
+
});
|
|
44
55
|
describe('PostsListView — page-scoped selection', () => {
|
|
45
56
|
it('clears the selection when navigating to another page so the bulk count stays honest', async () => {
|
|
46
57
|
render(_jsx(PostsListView, { onNavigate: () => { } }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"posts-list-view.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/posts-list-view.render.test.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"posts-list-view.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/posts-list-view.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,uEAAuE;AACvE,0EAA0E;AAC1E,wEAAwE;AACxE,SAAS,QAAQ,CAAC,EAAU,EAAE,KAAa;IACzC,OAAO;QACL,EAAE;QACF,UAAU,EAAE,UAAU;QACtB,YAAY,EAAE,SAAS;QACvB,mBAAmB,EAAE,MAAM;QAC3B,KAAK;QACL,IAAI,EAAE,EAAE;QACR,wEAAwE;QACxE,2CAA2C;QAC3C,UAAU,EAAE,SAAS,EAAE,EAAE;QACzB,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,IAAI;QACpB,MAAM,EAAE,WAAW;QACnB,WAAW,EAAE,0BAA0B;QACvC,QAAQ,EAAE,EAAE;KACb,CAAA;AACH,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAA;AACvE,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;AAErE,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,EAAoB,EAAE,EAAE,CAAC,CAAC;IAC9D,KAAK,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;IACvC,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC7D,OAAO,EAAE,EAAE;CACZ,CAAC,CAAC,CAAA;AACH,MAAM,eAAe,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AACjE,MAAM,eAAe,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAEjE,EAAE,CAAC,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,UAAU,EAAE,CAAC,IAAsB,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;IACxD,eAAe,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,eAAe,CAAC,GAAI,IAAW,CAAC;IACzE,eAAe,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,eAAe,CAAC,GAAI,IAAW,CAAC;CAC1E,CAAC,CAAC,CAAA;AAEH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAA;AAE5E,UAAU,CAAC,GAAG,EAAE;IACd,UAAU,CAAC,SAAS,EAAE,CAAA;IACtB,eAAe,CAAC,SAAS,EAAE,CAAA;IAC3B,eAAe,CAAC,SAAS,EAAE,CAAA;AAC7B,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;QACvG,MAAM,CAAC,KAAC,aAAa,IAAC,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC,GAAI,CAAC,CAAA;QAC/C,MAAM,MAAM,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAA;QAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QACjD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IACvD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,EAAE,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;QACnG,MAAM,CAAC,KAAC,aAAa,IAAC,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC,GAAI,CAAC,CAAA;QAE/C,8CAA8C;QAC9C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAA;QAC5D,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACtB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAEnD,sBAAsB;QACtB,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAA;QAEnD,oEAAoE;QACpE,oEAAoE;QACpE,MAAM,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAA;QAC7C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACnD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,CAAC,KAAC,aAAa,IAAC,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC,GAAI,CAAC,CAAA;QAE/C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAA;QAC5D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAA;QACnE,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACtB,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACzB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAEnD,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;QAC5C,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAA;QACrE,gEAAgE;QAChE,MAAM,GAAG,GAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAA4B,CAAC,CAAC,CAAC,CAAA;QACxE,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -111,8 +111,10 @@ beforeEach(() => {
|
|
|
111
111
|
describe('SeoAutopilotCard', () => {
|
|
112
112
|
it('renders the master toggle, type groups, thresholds, and a Never run status', async () => {
|
|
113
113
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
// The heading is present during the loading skeleton; wait on the first
|
|
115
|
+
// loaded control instead so the assertions below never race the fetch.
|
|
116
|
+
const toggle = await screen.findByRole('switch', { name: /enable autopilot/i });
|
|
117
|
+
expect(toggle.getAttribute('aria-checked')).toBe('false');
|
|
116
118
|
expect(screen.getByText('Titles')).toBeTruthy();
|
|
117
119
|
expect(screen.getByText('Redirects')).toBeTruthy();
|
|
118
120
|
expect(screen.getByLabelText(/minimum brand alignment/i).value).toBe('85');
|
|
@@ -122,8 +124,7 @@ describe('SeoAutopilotCard', () => {
|
|
|
122
124
|
});
|
|
123
125
|
it('a blur-commit followed immediately by a checkbox click lands two PUTs, in order', async () => {
|
|
124
126
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
125
|
-
await screen.
|
|
126
|
-
const brand = screen.getByLabelText(/minimum brand alignment/i);
|
|
127
|
+
const brand = await screen.findByLabelText(/minimum brand alignment/i);
|
|
127
128
|
const checkbox = screen.getByLabelText('Missing meta title');
|
|
128
129
|
fireEvent.change(brand, { target: { value: '90' } });
|
|
129
130
|
// mousedown on the checkbox blurs the input (commit → PUT #1) and the click
|
|
@@ -143,9 +144,9 @@ describe('SeoAutopilotCard', () => {
|
|
|
143
144
|
const gate = deferred();
|
|
144
145
|
putGate = gate.promise;
|
|
145
146
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
146
|
-
|
|
147
|
+
// The card region also wraps the loading skeleton; wait on a loaded control.
|
|
148
|
+
const checkbox = (await screen.findByLabelText('Missing meta title'));
|
|
147
149
|
const card = screen.getByRole('region', { name: 'SEO Autopilot' });
|
|
148
|
-
const checkbox = screen.getByLabelText('Missing meta title');
|
|
149
150
|
checkbox.focus();
|
|
150
151
|
fireEvent.click(checkbox);
|
|
151
152
|
await waitFor(() => expect(card.getAttribute('aria-busy')).toBe('true'));
|
|
@@ -163,8 +164,7 @@ describe('SeoAutopilotCard', () => {
|
|
|
163
164
|
runGate = gate.promise;
|
|
164
165
|
current = { ...SETTINGS, enabled: true, enabledById: 'a' };
|
|
165
166
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
166
|
-
await screen.
|
|
167
|
-
fireEvent.click(screen.getByRole('button', { name: /run now/i }));
|
|
167
|
+
fireEvent.click(await screen.findByRole('button', { name: /run now/i }));
|
|
168
168
|
await waitFor(() => expect(cmsApi).toHaveBeenCalledWith('/seo/autopilot/run', expect.anything()));
|
|
169
169
|
fireEvent.click(screen.getByLabelText('Missing meta title'));
|
|
170
170
|
await waitFor(() => expect(toastInfo).toHaveBeenCalledTimes(1));
|
|
@@ -175,8 +175,7 @@ describe('SeoAutopilotCard', () => {
|
|
|
175
175
|
});
|
|
176
176
|
it('toggling a type PUTs a types patch', async () => {
|
|
177
177
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
178
|
-
await screen.
|
|
179
|
-
fireEvent.click(screen.getByLabelText('Missing meta title'));
|
|
178
|
+
fireEvent.click(await screen.findByLabelText('Missing meta title'));
|
|
180
179
|
await waitFor(() => expect(cmsApi).toHaveBeenCalledWith('/seo/autopilot/settings', expect.objectContaining({
|
|
181
180
|
method: 'PUT',
|
|
182
181
|
body: JSON.stringify({ types: { 'missing-meta-title': true } }),
|
|
@@ -186,15 +185,13 @@ describe('SeoAutopilotCard', () => {
|
|
|
186
185
|
});
|
|
187
186
|
it('toggling the master switch PUTs { enabled }', async () => {
|
|
188
187
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
189
|
-
await screen.
|
|
190
|
-
fireEvent.click(screen.getByRole('switch', { name: /enable autopilot/i }));
|
|
188
|
+
fireEvent.click(await screen.findByRole('switch', { name: /enable autopilot/i }));
|
|
191
189
|
await waitFor(() => expect(putBodies()).toEqual([{ enabled: true }]));
|
|
192
190
|
await waitFor(() => expect(screen.getByRole('switch', { name: /enable autopilot/i }).getAttribute('aria-checked')).toBe('true'));
|
|
193
191
|
});
|
|
194
192
|
it('commits a clamped threshold on blur and sends the outcome-watch ratio as a fraction', async () => {
|
|
195
193
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
196
|
-
await screen.
|
|
197
|
-
const brand = screen.getByLabelText(/minimum brand alignment/i);
|
|
194
|
+
const brand = await screen.findByLabelText(/minimum brand alignment/i);
|
|
198
195
|
fireEvent.change(brand, { target: { value: '140' } });
|
|
199
196
|
fireEvent.blur(brand);
|
|
200
197
|
await waitFor(() => expect(putBodies()).toEqual([{ minBrandAlignment: 100 }]));
|
|
@@ -205,8 +202,7 @@ describe('SeoAutopilotCard', () => {
|
|
|
205
202
|
});
|
|
206
203
|
it('does not PUT when a number field is blurred unchanged or with garbage', async () => {
|
|
207
204
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
208
|
-
await screen.
|
|
209
|
-
const perRun = screen.getByLabelText(/max changes per run/i);
|
|
205
|
+
const perRun = await screen.findByLabelText(/max changes per run/i);
|
|
210
206
|
fireEvent.blur(perRun);
|
|
211
207
|
fireEvent.change(perRun, { target: { value: '' } });
|
|
212
208
|
fireEvent.blur(perRun);
|
|
@@ -216,8 +212,7 @@ describe('SeoAutopilotCard', () => {
|
|
|
216
212
|
it('surfaces a PUT validation error verbatim and keeps the previous state', async () => {
|
|
217
213
|
putResponse = { error: 'maxPerRun must be an integer between 1 and 25', status: 400 };
|
|
218
214
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
219
|
-
await screen.
|
|
220
|
-
fireEvent.click(screen.getByLabelText('Missing meta title'));
|
|
215
|
+
fireEvent.click(await screen.findByLabelText('Missing meta title'));
|
|
221
216
|
await waitFor(() => expect(toastError).toHaveBeenCalledWith('maxPerRun must be an integer between 1 and 25'));
|
|
222
217
|
expect(toastSuccess).not.toHaveBeenCalled();
|
|
223
218
|
expect(screen.getByLabelText('Missing meta title').checked).toBe(false);
|
|
@@ -225,8 +220,7 @@ describe('SeoAutopilotCard', () => {
|
|
|
225
220
|
it('resets a number field to the last saved value when its PUT fails', async () => {
|
|
226
221
|
putResponse = { error: 'maxPerRun must be an integer between 1 and 25', status: 400 };
|
|
227
222
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
228
|
-
await screen.
|
|
229
|
-
const perRun = screen.getByLabelText(/max changes per run/i);
|
|
223
|
+
const perRun = (await screen.findByLabelText(/max changes per run/i));
|
|
230
224
|
fireEvent.change(perRun, { target: { value: '9' } });
|
|
231
225
|
fireEvent.blur(perRun);
|
|
232
226
|
await waitFor(() => expect(toastError).toHaveBeenCalledWith('maxPerRun must be an integer between 1 and 25'));
|
|
@@ -305,16 +299,14 @@ describe('SeoAutopilotCard', () => {
|
|
|
305
299
|
pausedTypes: { 'missing-meta-title': reason },
|
|
306
300
|
};
|
|
307
301
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
308
|
-
await screen.
|
|
309
|
-
const list = screen.getByRole('list', { name: /paused fix types/i });
|
|
302
|
+
const list = await screen.findByRole('list', { name: /paused fix types/i });
|
|
310
303
|
expect(list.textContent ?? '').toContain(`Missing meta title — ${reason}`);
|
|
311
304
|
fireEvent.click(within(list).getByRole('button', { name: /resume/i }));
|
|
312
305
|
await waitFor(() => expect(putBodies()).toEqual([{ resumeTypes: ['missing-meta-title'] }]));
|
|
313
306
|
});
|
|
314
307
|
it('Run now is disabled while the policy is disabled and explains why', async () => {
|
|
315
308
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
316
|
-
await screen.
|
|
317
|
-
const run = screen.getByRole('button', { name: /run now/i });
|
|
309
|
+
const run = (await screen.findByRole('button', { name: /run now/i }));
|
|
318
310
|
expect(run.disabled).toBe(true);
|
|
319
311
|
expect(run.getAttribute('title')).toMatch(/enable autopilot to run it now/i);
|
|
320
312
|
const hintId = run.getAttribute('aria-describedby');
|
|
@@ -330,8 +322,7 @@ describe('SeoAutopilotCard', () => {
|
|
|
330
322
|
pausedReason: 'manual',
|
|
331
323
|
};
|
|
332
324
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
333
|
-
await screen.
|
|
334
|
-
const run = screen.getByRole('button', { name: /run now/i });
|
|
325
|
+
const run = (await screen.findByRole('button', { name: /run now/i }));
|
|
335
326
|
expect(run.disabled).toBe(true);
|
|
336
327
|
expect(run.getAttribute('title')).toMatch(/resume autopilot to run it now/i);
|
|
337
328
|
const hintId = run.getAttribute('aria-describedby');
|
|
@@ -340,8 +331,7 @@ describe('SeoAutopilotCard', () => {
|
|
|
340
331
|
it('Run now carries no hint once it is runnable', async () => {
|
|
341
332
|
current = { ...SETTINGS, enabled: true, enabledById: 'a' };
|
|
342
333
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
343
|
-
await screen.
|
|
344
|
-
const run = screen.getByRole('button', { name: /run now/i });
|
|
334
|
+
const run = (await screen.findByRole('button', { name: /run now/i }));
|
|
345
335
|
expect(run.disabled).toBe(false);
|
|
346
336
|
expect(run.getAttribute('title')).toBeNull();
|
|
347
337
|
expect(run.getAttribute('aria-describedby')).toBeNull();
|
|
@@ -349,8 +339,7 @@ describe('SeoAutopilotCard', () => {
|
|
|
349
339
|
it('Run now POSTs /seo/autopilot/run and reloads', async () => {
|
|
350
340
|
current = { ...SETTINGS, enabled: true, enabledById: 'a' };
|
|
351
341
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
352
|
-
await screen.
|
|
353
|
-
const run = screen.getByRole('button', { name: /run now/i });
|
|
342
|
+
const run = await screen.findByRole('button', { name: /run now/i });
|
|
354
343
|
expect(run.disabled).toBe(false);
|
|
355
344
|
fireEvent.click(run);
|
|
356
345
|
// Second click while in flight must not queue a second run.
|
|
@@ -376,8 +365,7 @@ describe('SeoAutopilotCard', () => {
|
|
|
376
365
|
},
|
|
377
366
|
};
|
|
378
367
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
379
|
-
await screen.
|
|
380
|
-
const summary = screen.getByRole('status', { name: /last run/i });
|
|
368
|
+
const summary = await screen.findByRole('status', { name: /last run/i });
|
|
381
369
|
expect(summary.textContent ?? '').toMatch(/4 applied/);
|
|
382
370
|
expect(summary.textContent ?? '').toMatch(/1 verify-failed/);
|
|
383
371
|
expect(summary.textContent ?? '').toMatch(/2 reverted/);
|
|
@@ -393,8 +381,7 @@ describe('SeoAutopilotCard', () => {
|
|
|
393
381
|
lastRun: { ...RUN_SUMMARY, halted: true, haltedReason: 'verify_failures' },
|
|
394
382
|
};
|
|
395
383
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
396
|
-
await screen.
|
|
397
|
-
const halted = screen.getByRole('status', { name: /run stopped/i });
|
|
384
|
+
const halted = await screen.findByRole('status', { name: /run stopped/i });
|
|
398
385
|
expect(halted.textContent ?? '').toMatch(/verification failures/i);
|
|
399
386
|
expect(halted.className).toContain('text-warning');
|
|
400
387
|
});
|
|
@@ -408,8 +395,7 @@ describe('SeoAutopilotCard', () => {
|
|
|
408
395
|
lastRun: { ...RUN_SUMMARY, halted: true, haltedReason: 'budget_exhausted' },
|
|
409
396
|
};
|
|
410
397
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
411
|
-
await screen.
|
|
412
|
-
const halted = screen.getByRole('status', { name: /run stopped/i });
|
|
398
|
+
const halted = await screen.findByRole('status', { name: /run stopped/i });
|
|
413
399
|
expect(halted.textContent ?? '').toMatch(/ran out of time/i);
|
|
414
400
|
expect(halted.textContent ?? '').not.toMatch(/daily/i);
|
|
415
401
|
});
|
|
@@ -426,8 +412,7 @@ describe('SeoAutopilotCard', () => {
|
|
|
426
412
|
lastRun: { ...RUN_SUMMARY, halted: true, haltedReason: reason },
|
|
427
413
|
};
|
|
428
414
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
429
|
-
await screen.
|
|
430
|
-
const halted = screen.getByRole('status', { name: /run stopped/i });
|
|
415
|
+
const halted = await screen.findByRole('status', { name: /run stopped/i });
|
|
431
416
|
expect(halted.textContent ?? '').toMatch(copy);
|
|
432
417
|
expect(halted.textContent ?? '').not.toMatch(/stopped with an error/i);
|
|
433
418
|
expect(halted.className).toContain('text-warning');
|
|
@@ -439,8 +424,8 @@ describe('SeoAutopilotCard', () => {
|
|
|
439
424
|
lastRunAt: new Date(Date.now() - 5 * 60_000).toISOString(),
|
|
440
425
|
};
|
|
441
426
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
442
|
-
await screen.
|
|
443
|
-
expect(
|
|
427
|
+
const summary = await screen.findByRole('status', { name: /last run/i });
|
|
428
|
+
expect(summary.textContent ?? '').toMatch(/last run 5m ago/i);
|
|
444
429
|
});
|
|
445
430
|
it('offers every autopilot issue type exactly once (mirror of SEO_AUTOPILOT_ISSUE_TYPES)', () => {
|
|
446
431
|
const ids = AUTOPILOT_TYPE_GROUPS.flatMap((g) => g.options.map((o) => o.id));
|
|
@@ -450,8 +435,8 @@ describe('SeoAutopilotCard', () => {
|
|
|
450
435
|
it('read-only for non-admins', async () => {
|
|
451
436
|
current = { ...SETTINGS, enabled: true, enabledById: 'a' };
|
|
452
437
|
render(_jsx(SeoAutopilotCard, { canEdit: false, onNavigate: () => { } }));
|
|
453
|
-
await screen.
|
|
454
|
-
expect(
|
|
438
|
+
const toggle = await screen.findByRole('switch', { name: /enable autopilot/i });
|
|
439
|
+
expect(toggle.disabled).toBe(true);
|
|
455
440
|
expect(screen.getByLabelText('Missing meta title').disabled).toBe(true);
|
|
456
441
|
expect(screen.getByLabelText(/minimum brand alignment/i).disabled).toBe(true);
|
|
457
442
|
expect(screen.getByRole('button', { name: /run now/i }).disabled).toBe(true);
|
|
@@ -465,8 +450,7 @@ describe('SeoAutopilotCard', () => {
|
|
|
465
450
|
};
|
|
466
451
|
const onNavigate = vi.fn();
|
|
467
452
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: onNavigate }));
|
|
468
|
-
await screen.
|
|
469
|
-
const notice = screen.getByRole('region', { name: /governance/i });
|
|
453
|
+
const notice = await screen.findByRole('region', { name: /governance/i });
|
|
470
454
|
expect(notice.getAttribute('role')).not.toBe('status');
|
|
471
455
|
expect(notice.textContent ?? '').toMatch(/requires approval/i);
|
|
472
456
|
fireEvent.click(within(notice).getByRole('button', { name: /settings → ai/i }));
|
|
@@ -480,7 +464,9 @@ describe('SeoAutopilotCard', () => {
|
|
|
480
464
|
governance: { issueFixApprovalRequired: true, redirectApprovalRequired: false },
|
|
481
465
|
};
|
|
482
466
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
483
|
-
|
|
467
|
+
// Wait on a loaded control: against the skeleton the negative check below
|
|
468
|
+
// would pass vacuously.
|
|
469
|
+
await screen.findByRole('switch', { name: /enable autopilot/i });
|
|
484
470
|
expect(screen.queryByRole('region', { name: /governance/i })).toBeNull();
|
|
485
471
|
});
|
|
486
472
|
it('keeps live regions to the last-run lines only', async () => {
|
|
@@ -495,8 +481,7 @@ describe('SeoAutopilotCard', () => {
|
|
|
495
481
|
governance: { issueFixApprovalRequired: true, redirectApprovalRequired: false },
|
|
496
482
|
};
|
|
497
483
|
render(_jsx(SeoAutopilotCard, { canEdit: true, onNavigate: () => { } }));
|
|
498
|
-
await screen.
|
|
499
|
-
const live = screen.getAllByRole('status').map((el) => el.getAttribute('aria-label'));
|
|
484
|
+
const live = (await screen.findAllByRole('status')).map((el) => el.getAttribute('aria-label'));
|
|
500
485
|
expect(live.sort()).toEqual(['Last run', 'Run stopped']);
|
|
501
486
|
});
|
|
502
487
|
it('shows an error state with Retry when settings fail to load', async () => {
|