@plan2net/typo3-playwright-toolkit 0.26.0 → 0.27.1
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/README.md +147 -2
- package/dist/backend.d.ts +8 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +27 -0
- package/dist/backend.js.map +1 -0
- package/dist/builders/content-builder.d.ts +26 -1
- package/dist/builders/content-builder.d.ts.map +1 -1
- package/dist/builders/content-builder.js +77 -5
- package/dist/builders/content-builder.js.map +1 -1
- package/dist/builders/fields.d.ts +5 -0
- package/dist/builders/fields.d.ts.map +1 -1
- package/dist/builders/fields.js +7 -0
- package/dist/builders/fields.js.map +1 -1
- package/dist/builders/file-metadata-builder.d.ts +18 -0
- package/dist/builders/file-metadata-builder.d.ts.map +1 -0
- package/dist/builders/file-metadata-builder.js +54 -0
- package/dist/builders/file-metadata-builder.js.map +1 -0
- package/dist/builders/page-builder.d.ts +14 -0
- package/dist/builders/page-builder.d.ts.map +1 -1
- package/dist/builders/page-builder.js +55 -3
- package/dist/builders/page-builder.js.map +1 -1
- package/dist/builders/relations.d.ts +14 -1
- package/dist/builders/relations.d.ts.map +1 -1
- package/dist/builders/relations.js +38 -9
- package/dist/builders/relations.js.map +1 -1
- package/dist/builders/request-context.d.ts +2 -0
- package/dist/builders/request-context.d.ts.map +1 -1
- package/dist/builders/request-context.js +1 -0
- package/dist/builders/request-context.js.map +1 -1
- package/dist/contract.d.ts +1 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +1 -0
- package/dist/contract.js.map +1 -1
- package/dist/http/off-site-headers.d.ts +8 -2
- package/dist/http/off-site-headers.d.ts.map +1 -1
- package/dist/http/off-site-headers.js +31 -9
- package/dist/http/off-site-headers.js.map +1 -1
- package/dist/http/record-commit.d.ts +24 -0
- package/dist/http/record-commit.d.ts.map +1 -0
- package/dist/http/record-commit.js +34 -0
- package/dist/http/record-commit.js.map +1 -0
- package/dist/http/record-edit.d.ts +27 -0
- package/dist/http/record-edit.d.ts.map +1 -1
- package/dist/http/record-edit.js +34 -4
- package/dist/http/record-edit.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/media/media-manifest.d.ts +3 -0
- package/dist/media/media-manifest.d.ts.map +1 -1
- package/dist/media/media-manifest.js +27 -10
- package/dist/media/media-manifest.js.map +1 -1
- package/dist/scenario.d.ts +14 -1
- package/dist/scenario.d.ts.map +1 -1
- package/dist/scenario.js +15 -0
- package/dist/scenario.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -237,6 +237,19 @@ A test that means to create such a record, say to cover an import, says so:
|
|
|
237
237
|
await builders.content().onPage(pageId).ofType('text').withoutFormRules().create()
|
|
238
238
|
```
|
|
239
239
|
|
|
240
|
+
A test that checks the backend refuses a record, a content type kept out of a column for
|
|
241
|
+
example, saves it with `refusal()` instead of `create()`. It returns TYPO3's reasons, and
|
|
242
|
+
fails when the record was saved after all. Any other failure, such as a lost session,
|
|
243
|
+
passes through as an error, so it cannot pass as a refusal:
|
|
244
|
+
|
|
245
|
+
```ts
|
|
246
|
+
const reasons = await builders.page().atParentId(1).refusal()
|
|
247
|
+
// in the test: expect(state.reasons).toContainEqual(expect.stringContaining('"title" is required.'))
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
A record saved with `saveRecord()` fails with a `RecordRefusedError`, whose `reasons`
|
|
251
|
+
hold the same messages.
|
|
252
|
+
|
|
240
253
|
<picture>
|
|
241
254
|
<source media="(max-width: 700px)" srcset="https://raw.githubusercontent.com/plan2net/typo3-playwright-toolkit/main/diagrams/scenario-fan-out-narrow.svg">
|
|
242
255
|
<img width="880" src="https://raw.githubusercontent.com/plan2net/typo3-playwright-toolkit/main/diagrams/scenario-fan-out.svg"
|
|
@@ -333,8 +346,10 @@ fails at the line that used it and lists the names that do, which is the reason
|
|
|
333
346
|
prefer a name over a number: `42` cannot tell you it used to be a different image.
|
|
334
347
|
|
|
335
348
|
The order you call them in is the order the records get. A child takes `pid` and
|
|
336
|
-
`sys_language_uid` from the record above it
|
|
337
|
-
|
|
349
|
+
`sys_language_uid` from the record above it. For a translation, see
|
|
350
|
+
[Translations](#translations).
|
|
351
|
+
|
|
352
|
+
On `update()`, the references you set replace what the column held.
|
|
338
353
|
|
|
339
354
|
Never set `uid_local`, `uid_foreign`, `tablenames`, `fieldname` or `sorting_foreign`:
|
|
340
355
|
the toolkit writes them, and your own value fails. A wrong `uid_foreign` saves a row
|
|
@@ -365,6 +380,90 @@ override getRelations(owner: RelationOwner): RelationOutput {
|
|
|
365
380
|
}
|
|
366
381
|
```
|
|
367
382
|
|
|
383
|
+
### Translations
|
|
384
|
+
|
|
385
|
+
`translate()` makes a translation the way an editor does in the backend: it sends
|
|
386
|
+
TYPO3's own translate command, so the translation is connected to the record it came
|
|
387
|
+
from, and TYPO3 copies its files and child records. Whatever you set on the builder
|
|
388
|
+
then fills the translation:
|
|
389
|
+
|
|
390
|
+
```ts
|
|
391
|
+
export const test = defineScenario(async ({ builders }) => {
|
|
392
|
+
const products = await builders.page().withTitle('Products').withSlug('/products')
|
|
393
|
+
.withFileReference('media', 'hero.png')
|
|
394
|
+
.create()
|
|
395
|
+
const gallery = await builders.content().onPage(products.id).ofType('textmedia')
|
|
396
|
+
.configure((element) => element.withHeader('Gallery').withFiles(['hero.png', 'lawn.jpg']))
|
|
397
|
+
.create()
|
|
398
|
+
|
|
399
|
+
const german = await builders.page().translate(products.id, 1)
|
|
400
|
+
.withTitle('Produkte')
|
|
401
|
+
.withSlug('/produkte')
|
|
402
|
+
.create()
|
|
403
|
+
await builders.content().translate(gallery.id, 1, 'textmedia')
|
|
404
|
+
.configure((element) => element.withHeader('Galerie'))
|
|
405
|
+
.withCopiedFileReference('assets', 1, { alternative: 'Rasen' })
|
|
406
|
+
.withFileReference('assets', 'badge.svg')
|
|
407
|
+
.create()
|
|
408
|
+
|
|
409
|
+
return { slug: german.slug }
|
|
410
|
+
})
|
|
411
|
+
|
|
412
|
+
test('shows the German gallery', async ({ page, state }) => {
|
|
413
|
+
await page.goto(`/de${state.slug}`)
|
|
414
|
+
|
|
415
|
+
await expect(page.getByRole('heading', { name: 'Galerie' })).toBeVisible()
|
|
416
|
+
})
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
The second argument is the language ID of the site. The page builder answers the
|
|
420
|
+
translation's `id` and `slug`; the slug has no language base, so the test puts the
|
|
421
|
+
`/de` in front itself.
|
|
422
|
+
|
|
423
|
+
- **A free copy:** `content().copyTo(id, language)` copies an element into a
|
|
424
|
+
language without connecting it, as the "copy" mode of the page module does. Pages
|
|
425
|
+
have no free mode in TYPO3, so there is no `page().copyTo()`.
|
|
426
|
+
- **Its content type:** name the type as the third argument to reach its setters
|
|
427
|
+
through `configure()`. Without it you have `withField()` and the file setters.
|
|
428
|
+
- **Copied files:** TYPO3 copies each file reference of the original.
|
|
429
|
+
`withCopiedFileReference(column, position, fields)` changes the copy at that
|
|
430
|
+
position, counted from 0. `withFileReference()` adds a reference after the copies;
|
|
431
|
+
the copies stay where they are.
|
|
432
|
+
- **What TYPO3 does by itself:** it hides a translation and puts
|
|
433
|
+
`[Translate to German:]` in front of its texts. The toolkit shows the translation
|
|
434
|
+
unless you set `hidden`; the prefix stays wherever you do not set a value of your
|
|
435
|
+
own.
|
|
436
|
+
- **What the backend refuses:** a field TCA keeps the same in every language
|
|
437
|
+
(`l10n_mode: exclude`, such as a page's `layout`) cannot be set on a translation,
|
|
438
|
+
and the save fails with TYPO3's reason. So does a record that already has a
|
|
439
|
+
translation in that language, a language the site does not have, and a table
|
|
440
|
+
without languages. `refusal()` works here as everywhere.
|
|
441
|
+
|
|
442
|
+
A file's metadata, its alternative text and title, can be translated too:
|
|
443
|
+
|
|
444
|
+
```ts
|
|
445
|
+
await builders.fileMetadata('badge.svg').translate(1).withField('alternative', 'Abzeichen').create()
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
Without `translate()`, `fileMetadata()` changes the default language. It takes the
|
|
449
|
+
name of a media fixture; for metadata every test shares, use `translations` in
|
|
450
|
+
`media.json` — see [Media fixtures](../playwright-toolkit/README.md#media-fixtures).
|
|
451
|
+
A file whose metadata `media.json` already translates cannot be translated again in
|
|
452
|
+
that language.
|
|
453
|
+
|
|
454
|
+
For a table without a builder, `translateRecord()` in the setup tools sends the same
|
|
455
|
+
command and answers the new `uid`; fill it with `saveRecord()`:
|
|
456
|
+
|
|
457
|
+
```ts
|
|
458
|
+
export const test = defineScenario(async ({ translateRecord, saveRecord }) => {
|
|
459
|
+
const { uid } = await translateRecord({ table: 'tx_shop_product', uid: 7, language: 1, mode: 'localize' })
|
|
460
|
+
await saveRecord({ table: 'tx_shop_product', identifier: String(uid), target: uid,
|
|
461
|
+
data: { tx_shop_product: { [uid]: { title: 'Gartenschere', hidden: 0 } } } })
|
|
462
|
+
})
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
Translations need the extension of the same release, 0.27.0 or newer.
|
|
466
|
+
|
|
368
467
|
### One request for several elements
|
|
369
468
|
|
|
370
469
|
Every `create()` is a POST, and every POST boots the backend, builds the form and runs
|
|
@@ -403,6 +502,9 @@ await builders.batch(
|
|
|
403
502
|
)
|
|
404
503
|
```
|
|
405
504
|
|
|
505
|
+
A translation cannot join a batch either: TYPO3 makes it with a command of its own,
|
|
506
|
+
so call `create()` on it.
|
|
507
|
+
|
|
406
508
|
A content type whose children hang off a column of its own needs none of this:
|
|
407
509
|
`withChildren` already writes them in the same request as their parent. Batching is
|
|
408
510
|
for elements that sit side by side on a page.
|
|
@@ -415,6 +517,21 @@ Every request client carries the test ID for `testingURL`: the `request` that
|
|
|
415
517
|
throwaway database the browser does. Requests to any other host get neither toolkit
|
|
416
518
|
header.
|
|
417
519
|
|
|
520
|
+
### Checking the backend
|
|
521
|
+
|
|
522
|
+
What editors see — the buttons of the rich text editor, the types a column offers, a
|
|
523
|
+
field a form leaves out — is checked on `backendPage`: a page logged into the backend on
|
|
524
|
+
the test's own database, opened only for a test that asks for it. `editRecord` opens a
|
|
525
|
+
record's edit form there and answers the frame it shows in:
|
|
526
|
+
|
|
527
|
+
```ts
|
|
528
|
+
test('offers no underline in the editor', async ({ backendPage, state }) => {
|
|
529
|
+
const form = await editRecord(backendPage, 'tt_content', state.text)
|
|
530
|
+
|
|
531
|
+
await expect(form.getByRole('button', { name: 'Underline' })).toHaveCount(0)
|
|
532
|
+
})
|
|
533
|
+
```
|
|
534
|
+
|
|
418
535
|
### Site settings for one test
|
|
419
536
|
|
|
420
537
|
A scenario can give its site other settings than `settings.yaml` has, for its own
|
|
@@ -451,6 +568,24 @@ prepareContext: async (context) => {
|
|
|
451
568
|
},
|
|
452
569
|
```
|
|
453
570
|
|
|
571
|
+
### Changing a response in a test
|
|
572
|
+
|
|
573
|
+
The toolkit adds the test ID to every request, so the site uses the test's database.
|
|
574
|
+
A test that changes a page with `page.route()` gets its handler called before the
|
|
575
|
+
toolkit adds the ID. A plain `route.fetch()` in it then reaches the site's normal
|
|
576
|
+
database, where the test's pages do not exist, and you get the 404 page. Use
|
|
577
|
+
`fetchForTest` instead: it adds the test ID, but only for the site under test.
|
|
578
|
+
|
|
579
|
+
```ts
|
|
580
|
+
test('works without the script', async ({ page, state, testId }) => {
|
|
581
|
+
await page.route(`**${state.slug}`, async (route) => {
|
|
582
|
+
const response = await fetchForTest(route, testId)
|
|
583
|
+
await route.fulfill({ response, body: (await response.text()).replace(/<script\b[\s\S]*?<\/script>/g, '') })
|
|
584
|
+
})
|
|
585
|
+
await page.goto(state.slug)
|
|
586
|
+
})
|
|
587
|
+
```
|
|
588
|
+
|
|
454
589
|
### Reusing a scenario's setup
|
|
455
590
|
|
|
456
591
|
A scenario's setup posts its content through the real backend, which is the slowest
|
|
@@ -866,6 +1001,16 @@ and that its hostname is set up as in step 1 of SETUP.md.
|
|
|
866
1001
|
right after its caches were emptied, so TYPO3 builds them first. If your site needs
|
|
867
1002
|
longer than that, set `PW_HEALTH_TIMEOUT_MS`, in milliseconds.
|
|
868
1003
|
|
|
1004
|
+
**"No route token for tce_db".** The extension is older than 0.27.0 and hands out no
|
|
1005
|
+
token for the translate command. Update it to the release of this package.
|
|
1006
|
+
|
|
1007
|
+
**"TYPO3 created no translation of …".** The record already has a translation in
|
|
1008
|
+
that language, or the site has no such language. Translate a record once per
|
|
1009
|
+
language, and check the language ID in the site configuration.
|
|
1010
|
+
|
|
1011
|
+
**"No media metadata at …".** `fileMetadata()` reads a file the extension writes
|
|
1012
|
+
from 0.27.0 on. Update it and run `ddev playwright-prepare`.
|
|
1013
|
+
|
|
869
1014
|
**Settings seem to be ignored.** `defineToolkitConfig` ran too late. It must be the
|
|
870
1015
|
first thing in `playwright.config.ts`.
|
|
871
1016
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Frame, Page } from '@playwright/test';
|
|
2
|
+
/**
|
|
3
|
+
* Opens the backend's edit form of one record on a page from the `backendPage`
|
|
4
|
+
* fixture, and answers the frame that holds it: the backend's content frame, or the
|
|
5
|
+
* page itself where a core shows the form without the frame.
|
|
6
|
+
*/
|
|
7
|
+
export declare function editRecord(page: Page, table: string, uid: number | string): Promise<Frame>;
|
|
8
|
+
//# sourceMappingURL=backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAQnD;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAkBhG"}
|
package/dist/backend.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { getToolkitConfig } from './config.js';
|
|
2
|
+
import { RECORD_EDIT_ROUTE } from './http/record-edit.js';
|
|
3
|
+
import { DEFAULT_BACKEND_PATH } from './http/test-api.js';
|
|
4
|
+
const CONTENT_FRAME = '#typo3-contentIframe';
|
|
5
|
+
const EDIT_FORM = 'form[name="editform"]';
|
|
6
|
+
/**
|
|
7
|
+
* Opens the backend's edit form of one record on a page from the `backendPage`
|
|
8
|
+
* fixture, and answers the frame that holds it: the backend's content frame, or the
|
|
9
|
+
* page itself where a core shows the form without the frame.
|
|
10
|
+
*/
|
|
11
|
+
export async function editRecord(page, table, uid) {
|
|
12
|
+
const config = getToolkitConfig();
|
|
13
|
+
const backendPath = config.backendPath ?? DEFAULT_BACKEND_PATH;
|
|
14
|
+
await page.goto(`${config.testingURL}${backendPath}${RECORD_EDIT_ROUTE}?edit%5B${table}%5D%5B${uid}%5D=edit`);
|
|
15
|
+
const shown = page.locator(`${CONTENT_FRAME}, ${EDIT_FORM}`).first();
|
|
16
|
+
await shown.waitFor();
|
|
17
|
+
if ('IFRAME' !== (await shown.evaluate((element) => element.tagName))) {
|
|
18
|
+
return page.mainFrame();
|
|
19
|
+
}
|
|
20
|
+
const frame = await (await shown.elementHandle())?.contentFrame();
|
|
21
|
+
if (!frame) {
|
|
22
|
+
throw new Error(`[typo3-playwright-toolkit] The backend's content frame for ${table}:${uid} has no document.`);
|
|
23
|
+
}
|
|
24
|
+
await frame.locator(EDIT_FORM).waitFor();
|
|
25
|
+
return frame;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAEzD,MAAM,aAAa,GAAG,sBAAsB,CAAA;AAC5C,MAAM,SAAS,GAAG,uBAAuB,CAAA;AAEzC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAU,EAAE,KAAa,EAAE,GAAoB;IAC5E,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAA;IACjC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,oBAAoB,CAAA;IAC9D,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,GAAG,WAAW,GAAG,iBAAiB,WAAW,KAAK,SAAS,GAAG,UAAU,CAAC,CAAA;IAE7G,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,aAAa,KAAK,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;IACpE,MAAM,KAAK,CAAC,OAAO,EAAE,CAAA;IACrB,IAAI,QAAQ,KAAK,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACpE,OAAO,IAAI,CAAC,SAAS,EAAE,CAAA;IAC3B,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC,EAAE,YAAY,EAAE,CAAA;IACjE,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,8DAA8D,KAAK,IAAI,GAAG,mBAAmB,CAAC,CAAA;IAClH,CAAC;IACD,MAAM,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;IAExC,OAAO,KAAK,CAAA;AAChB,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { ContentBuilderInterface, type ContentFields } from '../types/content-bu
|
|
|
3
3
|
import type { ContentTypeFor, ContentTypeKey } from './core-content.js';
|
|
4
4
|
import { type RecordDataMap } from '../http/record-edit.js';
|
|
5
5
|
import { type ChildRecord } from './relations.js';
|
|
6
|
+
import { type TranslationMode } from '../http/record-commit.js';
|
|
6
7
|
import { type RequestContext } from './request-context.js';
|
|
7
8
|
export declare class ContentBuilder {
|
|
8
9
|
private page;
|
|
@@ -16,12 +17,28 @@ export declare class ContentBuilder {
|
|
|
16
17
|
*/
|
|
17
18
|
ofType<K extends ContentTypeKey>(type: K): TypedContentBuilder<ContentTypeFor<K>>;
|
|
18
19
|
ofType(type: string): TypedContentBuilder<ContentBuilderInterface>;
|
|
20
|
+
/**
|
|
21
|
+
* Makes create() translate the element the way the backend does, connected to
|
|
22
|
+
* it. Name its type to reach that type's setters through configure().
|
|
23
|
+
*/
|
|
24
|
+
translate<K extends ContentTypeKey>(contentId: number | string, language: number, type: K): TypedContentBuilder<ContentTypeFor<K>>;
|
|
25
|
+
translate(contentId: number | string, language: number, type?: string): TypedContentBuilder<ContentBuilderInterface>;
|
|
26
|
+
/** Like translate(), as a free copy: connected to nothing, so it follows no change of the origin. */
|
|
27
|
+
copyTo<K extends ContentTypeKey>(contentId: number | string, language: number, type: K): TypedContentBuilder<ContentTypeFor<K>>;
|
|
28
|
+
copyTo(contentId: number | string, language: number, type?: string): TypedContentBuilder<ContentBuilderInterface>;
|
|
29
|
+
private translation;
|
|
30
|
+
}
|
|
31
|
+
interface ContentTranslation {
|
|
32
|
+
origin: number;
|
|
33
|
+
language: number;
|
|
34
|
+
mode: TranslationMode;
|
|
19
35
|
}
|
|
20
36
|
/** What `batch()` needs of a queued element, whatever CType it builds. */
|
|
21
37
|
export interface QueuedContent {
|
|
22
38
|
readonly identifier: string;
|
|
23
39
|
readonly targetPageId: string;
|
|
24
40
|
readonly skipsFormRules: boolean;
|
|
41
|
+
readonly translates?: boolean;
|
|
25
42
|
prepared(context: RequestContext, positionPid: string): {
|
|
26
43
|
row: Record<string, unknown>;
|
|
27
44
|
records: RecordDataMap;
|
|
@@ -31,14 +48,17 @@ declare class TypedContentBuilder<B extends ContentBuilderInterface = ContentBui
|
|
|
31
48
|
private page;
|
|
32
49
|
private pageId;
|
|
33
50
|
private requestContext?;
|
|
51
|
+
private readonly translation?;
|
|
34
52
|
readonly identifier: string;
|
|
35
53
|
private builder;
|
|
36
54
|
private optedOutOfFormRules;
|
|
37
55
|
private readonly fields;
|
|
56
|
+
private readonly copiedEdits;
|
|
38
57
|
private readonly relations;
|
|
39
|
-
constructor(page: Page, pageId: string, type: string, requestContext?: Partial<RequestContext> | undefined);
|
|
58
|
+
constructor(page: Page, pageId: string, type: string | undefined, requestContext?: Partial<RequestContext> | undefined, translation?: ContentTranslation | undefined);
|
|
40
59
|
get targetPageId(): string;
|
|
41
60
|
get skipsFormRules(): boolean;
|
|
61
|
+
get translates(): boolean;
|
|
42
62
|
configure(fn: (builder: B) => void): this;
|
|
43
63
|
withField(column: string, value: ContentFields[string]): this;
|
|
44
64
|
withoutFormRules(): this;
|
|
@@ -46,13 +66,18 @@ declare class TypedContentBuilder<B extends ContentBuilderInterface = ContentBui
|
|
|
46
66
|
withFileReferences(column: string, files: (string | number)[], fields?: ContentFields): this;
|
|
47
67
|
withChild(column: string, table: string, configure: (child: ChildRecord) => void): this;
|
|
48
68
|
withChildren<T>(column: string, table: string, items: T[], configure: (child: ChildRecord, item: T) => void): this;
|
|
69
|
+
/** On a translation: changes the reference it copied from that position (from 0) of the origin's column. */
|
|
70
|
+
withCopiedFileReference(column: string, position: number, fields: ContentFields): this;
|
|
49
71
|
create(): Promise<{
|
|
50
72
|
id: string;
|
|
51
73
|
}>;
|
|
74
|
+
/** Saves the element as create() does, for a test that expects the backend to refuse it: TYPO3's reasons. */
|
|
75
|
+
refusal(): Promise<string[]>;
|
|
52
76
|
prepared(context: RequestContext, positionPid: string): {
|
|
53
77
|
row: Record<string, unknown>;
|
|
54
78
|
records: RecordDataMap;
|
|
55
79
|
};
|
|
80
|
+
private createTranslation;
|
|
56
81
|
}
|
|
57
82
|
/**
|
|
58
83
|
* One request for many elements, which saves a backend bootstrap each. Their own
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-builder.d.ts","sourceRoot":"","sources":["../../src/builders/content-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,uBAAuB,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAEzF,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,
|
|
1
|
+
{"version":3,"file":"content-builder.d.ts","sourceRoot":"","sources":["../../src/builders/content-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,uBAAuB,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAEzF,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAClF,OAAO,EAAyC,KAAK,WAAW,EAA4B,MAAM,gBAAgB,CAAA;AAElH,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAEhF,OAAO,EAAyC,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAKjG,qBAAa,cAAc;IACvB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAyB;gBAE7C,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAKhE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK5B;;;OAGG;IACH,MAAM,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,CAAC,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC,uBAAuB,CAAC;IAYlE;;;OAGG;IACH,SAAS,CAAC,CAAC,SAAS,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAClI,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC,uBAAuB,CAAC;IAKpH,qGAAqG;IACrG,MAAM,CAAC,CAAC,SAAS,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAC/H,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC,uBAAuB,CAAC;IAKjH,OAAO,CAAC,WAAW;CAYtB;AAED,UAAU,kBAAkB;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,eAAe,CAAA;CACxB;AAID,0EAA0E;AAC1E,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CACJ,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,MAAM,GACpB;QAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,EAAE,aAAa,CAAA;KAAE,CAAA;CAC9D;AAED,cAAM,mBAAmB,CAAC,CAAC,SAAS,uBAAuB,GAAG,uBAAuB,CACjF,YAAW,aAAa;IAWpB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAbjC,QAAQ,CAAC,UAAU,SAAwB;IAE3C,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,mBAAmB,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmE;gBAGjF,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,GAAG,SAAS,EAChB,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,YAAA,EAC/B,WAAW,CAAC,EAAE,kBAAkB,YAAA;IAKrD,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,SAAS,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;IAKzC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI;IAM7D,gBAAgB,IAAI,IAAI;IAMxB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,GAAE,aAAkB,GAAG,IAAI;IAM1F,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAE,aAAkB,GAAG,IAAI;IAMhG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAMvF,YAAY,CAAC,CAAC,EACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,GACjD,IAAI;IAMP,4GAA4G;IAC5G,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;IAMhF,MAAM,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAyBvC,6GAA6G;IAC7G,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI5B,QAAQ,CACJ,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,MAAM,GACpB;QAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,EAAE,aAAa,CAAA;KAAE;YAoC7C,iBAAiB;CA0ClC;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAC3B,IAAI,EAAE,IAAI,EACV,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,EACnD,MAAM,EAAE,aAAa,EAAE,GACxB,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAmDhC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { createContent } from './content-factory.js';
|
|
2
|
-
import { saveRecord } from '../http/record-edit.js';
|
|
3
|
-
import { mergeRecords, RelationSet } from './relations.js';
|
|
4
|
-
import { toColumnValues } from './fields.js';
|
|
2
|
+
import { refusalOf, saveRecord } from '../http/record-edit.js';
|
|
3
|
+
import { keepCopies, mergeRecords, RelationSet } from './relations.js';
|
|
4
|
+
import { ownValues, toColumnValues } from './fields.js';
|
|
5
|
+
import { translateRecord } from '../http/record-commit.js';
|
|
6
|
+
import { TRANSLATION_DEFAULTS } from './page-builder.js';
|
|
5
7
|
import { replayParentId, resolveRequestContext } from './request-context.js';
|
|
6
8
|
import { newRecordIdentifier } from './identifier.js';
|
|
7
9
|
const lastElementOnPage = new WeakMap();
|
|
@@ -24,21 +26,38 @@ export class ContentBuilder {
|
|
|
24
26
|
}
|
|
25
27
|
return new TypedContentBuilder(this.page, this.pageId, type, this.requestContext);
|
|
26
28
|
}
|
|
29
|
+
translate(contentId, language, type) {
|
|
30
|
+
return this.translation(contentId, language, 'localize', type);
|
|
31
|
+
}
|
|
32
|
+
copyTo(contentId, language, type) {
|
|
33
|
+
return this.translation(contentId, language, 'copyToLanguage', type);
|
|
34
|
+
}
|
|
35
|
+
translation(contentId, language, mode, type) {
|
|
36
|
+
return new TypedContentBuilder(this.page, this.pageId, type, this.requestContext, {
|
|
37
|
+
origin: Number(contentId),
|
|
38
|
+
language,
|
|
39
|
+
mode,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
27
42
|
}
|
|
43
|
+
const UNTYPED = { type: '', getFields: () => ({}) };
|
|
28
44
|
class TypedContentBuilder {
|
|
29
45
|
page;
|
|
30
46
|
pageId;
|
|
31
47
|
requestContext;
|
|
48
|
+
translation;
|
|
32
49
|
identifier = newRecordIdentifier();
|
|
33
50
|
builder;
|
|
34
51
|
optedOutOfFormRules = false;
|
|
35
52
|
fields = {};
|
|
53
|
+
copiedEdits = [];
|
|
36
54
|
relations = new RelationSet('tt_content', (column) => column in this.fields);
|
|
37
|
-
constructor(page, pageId, type, requestContext) {
|
|
55
|
+
constructor(page, pageId, type, requestContext, translation) {
|
|
38
56
|
this.page = page;
|
|
39
57
|
this.pageId = pageId;
|
|
40
58
|
this.requestContext = requestContext;
|
|
41
|
-
this.
|
|
59
|
+
this.translation = translation;
|
|
60
|
+
this.builder = undefined === type ? UNTYPED : createContent(type);
|
|
42
61
|
}
|
|
43
62
|
get targetPageId() {
|
|
44
63
|
return this.pageId;
|
|
@@ -46,6 +65,9 @@ class TypedContentBuilder {
|
|
|
46
65
|
get skipsFormRules() {
|
|
47
66
|
return this.optedOutOfFormRules;
|
|
48
67
|
}
|
|
68
|
+
get translates() {
|
|
69
|
+
return undefined !== this.translation;
|
|
70
|
+
}
|
|
49
71
|
configure(fn) {
|
|
50
72
|
fn(this.builder);
|
|
51
73
|
return this;
|
|
@@ -74,7 +96,15 @@ class TypedContentBuilder {
|
|
|
74
96
|
this.relations.withChildren(column, table, items, configure);
|
|
75
97
|
return this;
|
|
76
98
|
}
|
|
99
|
+
/** On a translation: changes the reference it copied from that position (from 0) of the origin's column. */
|
|
100
|
+
withCopiedFileReference(column, position, fields) {
|
|
101
|
+
this.copiedEdits.push({ column, position, fields });
|
|
102
|
+
return this;
|
|
103
|
+
}
|
|
77
104
|
async create() {
|
|
105
|
+
if (undefined !== this.translation) {
|
|
106
|
+
return this.createTranslation(this.translation);
|
|
107
|
+
}
|
|
78
108
|
const context = resolveRequestContext(this.page, this.requestContext);
|
|
79
109
|
const pageId = replayParentId(context, this.pageId);
|
|
80
110
|
const { row, records } = this.prepared(context, insertPosition(this.page, pageId));
|
|
@@ -90,6 +120,10 @@ class TypedContentBuilder {
|
|
|
90
120
|
lastElementOnPage.get(this.page)?.set(pageId, saved.uid);
|
|
91
121
|
return { id: String(saved.uid) };
|
|
92
122
|
}
|
|
123
|
+
/** Saves the element as create() does, for a test that expects the backend to refuse it: TYPO3's reasons. */
|
|
124
|
+
refusal() {
|
|
125
|
+
return refusalOf(() => this.create());
|
|
126
|
+
}
|
|
93
127
|
prepared(context, positionPid) {
|
|
94
128
|
const pageId = replayParentId(context, this.pageId);
|
|
95
129
|
const fields = this.builder.getFields();
|
|
@@ -118,6 +152,40 @@ class TypedContentBuilder {
|
|
|
118
152
|
mergeRecords(records, outer.records);
|
|
119
153
|
return { row, records };
|
|
120
154
|
}
|
|
155
|
+
async createTranslation(translation) {
|
|
156
|
+
const context = resolveRequestContext(this.page, this.requestContext);
|
|
157
|
+
const translated = await translateRecord(this.page.request, context, {
|
|
158
|
+
table: 'tt_content',
|
|
159
|
+
uid: translation.origin,
|
|
160
|
+
language: translation.language,
|
|
161
|
+
mode: translation.mode,
|
|
162
|
+
});
|
|
163
|
+
const id = String(translated.uid);
|
|
164
|
+
const owner = { pid: translated.pid, sys_language_uid: translation.language };
|
|
165
|
+
const inner = this.builder.getRelations?.(owner) ?? { columns: {}, records: {} };
|
|
166
|
+
const outer = this.relations.materialise(owner);
|
|
167
|
+
refuseSharedColumns(inner.columns, outer.columns);
|
|
168
|
+
const added = {};
|
|
169
|
+
mergeRecords(added, inner.records);
|
|
170
|
+
mergeRecords(added, outer.records);
|
|
171
|
+
const { columns, records } = keepCopies({ columns: { ...inner.columns, ...outer.columns }, records: added }, translated, this.copiedEdits);
|
|
172
|
+
const own = Object.fromEntries(Object.entries(this.builder.getFields()).filter(([column]) => 'CType' !== column));
|
|
173
|
+
const row = {
|
|
174
|
+
...toColumnValues({ ...TRANSLATION_DEFAULTS, ...own, ...this.fields }),
|
|
175
|
+
...columns,
|
|
176
|
+
};
|
|
177
|
+
const state = 'localize' === translation.mode ? { l10n_state: ownValues(Object.keys(row)) } : {};
|
|
178
|
+
const data = { tt_content: { [id]: { ...row, ...state } } };
|
|
179
|
+
mergeRecords(data, records);
|
|
180
|
+
await saveRecord(this.page.request, context, {
|
|
181
|
+
table: 'tt_content',
|
|
182
|
+
identifier: id,
|
|
183
|
+
target: translated.uid,
|
|
184
|
+
data,
|
|
185
|
+
withoutFormRules: this.optedOutOfFormRules,
|
|
186
|
+
});
|
|
187
|
+
return { id };
|
|
188
|
+
}
|
|
121
189
|
}
|
|
122
190
|
/**
|
|
123
191
|
* One request for many elements, which saves a backend bootstrap each. Their own
|
|
@@ -129,6 +197,10 @@ export async function saveBatch(page, requestContext, queued) {
|
|
|
129
197
|
if (0 === queued.length) {
|
|
130
198
|
throw new Error('[typo3-playwright-toolkit] batch() was given nothing to build.');
|
|
131
199
|
}
|
|
200
|
+
if (queued.some((element) => element.translates)) {
|
|
201
|
+
throw new Error('[typo3-playwright-toolkit] A translation cannot join a batch: the backend makes it with a ' +
|
|
202
|
+
'command of its own. Call create() on it instead.');
|
|
203
|
+
}
|
|
132
204
|
const context = resolveRequestContext(page, requestContext);
|
|
133
205
|
refuseASecondPage(queued);
|
|
134
206
|
const pageId = replayParentId(context, queued[0].targetPageId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-builder.js","sourceRoot":"","sources":["../../src/builders/content-builder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content-builder.js","sourceRoot":"","sources":["../../src/builders/content-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,11 @@ export type FlexFormValues = Record<string, string | number | boolean>;
|
|
|
24
24
|
*/
|
|
25
25
|
export declare function flexForm(values: FlexFormValues): NestedFields;
|
|
26
26
|
export declare function flexForm(sheets: Record<string, FlexFormValues>): NestedFields;
|
|
27
|
+
/**
|
|
28
|
+
* The `l10n_state` a backend form posts when an editor gives a connected translation
|
|
29
|
+
* its own value; core ignores the columns that never follow the origin.
|
|
30
|
+
*/
|
|
31
|
+
export declare function ownValues(columns: string[]): Record<string, 'custom'>;
|
|
27
32
|
/**
|
|
28
33
|
* A boolean is a 0/1 int column. An undefined field is left out rather than sent
|
|
29
34
|
* as null, which DataHandler would write.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/builders/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,MAAM,WAAW,aAAa;IAC1B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACjB;AAID,MAAM,WAAW,WAAW;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;CAC/B;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,WAAgB,GAAG,MAAM,CAE3D;AAED,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,MAAM,CAYxE;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;AAEtE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,CAAA;AAC9D,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,YAAY,CAAA;AAoB9E;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAevF"}
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/builders/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,MAAM,WAAW,aAAa;IAC1B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACjB;AAID,MAAM,WAAW,WAAW;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;CAC/B;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,WAAgB,GAAG,MAAM,CAE3D;AAED,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,MAAM,CAYxE;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;AAEtE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,CAAA;AAC9D,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,YAAY,CAAA;AAoB9E;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAErE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAevF"}
|
package/dist/builders/fields.js
CHANGED
|
@@ -32,6 +32,13 @@ export function flexForm(input) {
|
|
|
32
32
|
}
|
|
33
33
|
return { data };
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* The `l10n_state` a backend form posts when an editor gives a connected translation
|
|
37
|
+
* its own value; core ignores the columns that never follow the origin.
|
|
38
|
+
*/
|
|
39
|
+
export function ownValues(columns) {
|
|
40
|
+
return Object.fromEntries(columns.map((column) => [column, 'custom']));
|
|
41
|
+
}
|
|
35
42
|
/**
|
|
36
43
|
* A boolean is a 0/1 int column. An undefined field is left out rather than sent
|
|
37
44
|
* as null, which DataHandler would write.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/builders/fields.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,GAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;AAQtE;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,UAAuB,EAAE;IAC/C,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;AAC3C,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,UAAU,CAAC,QAAqC;IAC5D,MAAM,KAAK,GAA4B,EAAE,CAAA;IAEzC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,GAAG;YACV,QAAQ,EAAE,OAAO,CAAC,IAAI,IAAI,WAAW;YACrC,aAAa,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;YACrC,SAAS,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;SACnC,CAAA;IACL,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAChC,CAAC;AAUD,MAAM,UAAU,QAAQ,CACpB,KAAsD;IAEtD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,KAAK,OAAO,KAAK,CAAC;QAC3E,CAAC,CAAE,KAAwC;QAC3C,CAAC,CAAC,EAAE,IAAI,EAAE,KAAuB,EAAE,CAAA;IAEvC,MAAM,IAAI,GAAiB,EAAE,CAAA;IAC7B,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,MAAM,GAAiB,EAAE,CAAA;QAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;QAClC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IAClC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,CAAA;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAA+B;IAC1D,MAAM,MAAM,GAA4B,EAAE,CAAA;IAE1C,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,SAAQ;QACZ,CAAC;QACD,IAAI,SAAS,KAAK,OAAO,KAAK,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC9B,SAAQ;QACZ,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;IAC1B,CAAC;IAED,OAAO,MAAM,CAAA;AACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/builders/fields.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,GAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;AAQtE;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,UAAuB,EAAE;IAC/C,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;AAC3C,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,UAAU,CAAC,QAAqC;IAC5D,MAAM,KAAK,GAA4B,EAAE,CAAA;IAEzC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,GAAG;YACV,QAAQ,EAAE,OAAO,CAAC,IAAI,IAAI,WAAW;YACrC,aAAa,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;YACrC,SAAS,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;SACnC,CAAA;IACL,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAChC,CAAC;AAUD,MAAM,UAAU,QAAQ,CACpB,KAAsD;IAEtD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,KAAK,OAAO,KAAK,CAAC;QAC3E,CAAC,CAAE,KAAwC;QAC3C,CAAC,CAAC,EAAE,IAAI,EAAE,KAAuB,EAAE,CAAA;IAEvC,MAAM,IAAI,GAAiB,EAAE,CAAA;IAC7B,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,MAAM,GAAiB,EAAE,CAAA;QAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;QAClC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IAClC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,CAAA;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,OAAiB;IACvC,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAA+B;IAC1D,MAAM,MAAM,GAA4B,EAAE,CAAA;IAE1C,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,SAAQ;QACZ,CAAC;QACD,IAAI,SAAS,KAAK,OAAO,KAAK,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC9B,SAAQ;QACZ,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;IAC1B,CAAC;IAED,OAAO,MAAM,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Page } from '@playwright/test';
|
|
2
|
+
import type { ContentFields } from '../types/content-builder.js';
|
|
3
|
+
import { type RequestContext } from './request-context.js';
|
|
4
|
+
export declare class FileMetadataBuilder {
|
|
5
|
+
private readonly page;
|
|
6
|
+
private readonly name;
|
|
7
|
+
private readonly requestContext?;
|
|
8
|
+
private language?;
|
|
9
|
+
private readonly fields;
|
|
10
|
+
constructor(page: Page, name: string, requestContext?: Partial<RequestContext> | undefined);
|
|
11
|
+
withField(column: string, value: ContentFields[string]): this;
|
|
12
|
+
/** Makes create() translate the metadata the way the backend does, then fill the translation. */
|
|
13
|
+
translate(language: number): this;
|
|
14
|
+
create(): Promise<{
|
|
15
|
+
id: string;
|
|
16
|
+
}>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=file-metadata-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-metadata-builder.d.ts","sourceRoot":"","sources":["../../src/builders/file-metadata-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAKvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAEhE,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAEjF,qBAAa,mBAAmB;IAKxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IANpC,OAAO,CAAC,QAAQ,CAAC,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;gBAGtB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,YAAA;IAU7D,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI;IAM7D,iGAAiG;IACjG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAM3B,MAAM,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CAyB1C"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { getToolkitConfig } from '../config.js';
|
|
2
|
+
import { translateRecord } from '../http/record-commit.js';
|
|
3
|
+
import { saveRecord } from '../http/record-edit.js';
|
|
4
|
+
import { resolveMetadataUid } from '../media/media-manifest.js';
|
|
5
|
+
import { toColumnValues } from './fields.js';
|
|
6
|
+
import { resolveRequestContext } from './request-context.js';
|
|
7
|
+
export class FileMetadataBuilder {
|
|
8
|
+
page;
|
|
9
|
+
name;
|
|
10
|
+
requestContext;
|
|
11
|
+
language;
|
|
12
|
+
fields = {};
|
|
13
|
+
constructor(page, name, requestContext) {
|
|
14
|
+
this.page = page;
|
|
15
|
+
this.name = name;
|
|
16
|
+
this.requestContext = requestContext;
|
|
17
|
+
if ('string' !== typeof name) {
|
|
18
|
+
throw new Error(`[typo3-playwright-toolkit] fileMetadata() takes the name of a media fixture, not ${String(name)}: ` +
|
|
19
|
+
'a file uid does not say which metadata record belongs to it.');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
withField(column, value) {
|
|
23
|
+
this.fields[column] = value;
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
/** Makes create() translate the metadata the way the backend does, then fill the translation. */
|
|
27
|
+
translate(language) {
|
|
28
|
+
this.language = language;
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
async create() {
|
|
32
|
+
const context = resolveRequestContext(this.page, this.requestContext);
|
|
33
|
+
let uid = resolveMetadataUid(getToolkitConfig(), this.name);
|
|
34
|
+
if (undefined !== this.language) {
|
|
35
|
+
uid = (await translateRecord(this.page.request, context, {
|
|
36
|
+
table: 'sys_file_metadata',
|
|
37
|
+
uid,
|
|
38
|
+
language: this.language,
|
|
39
|
+
mode: 'localize',
|
|
40
|
+
})).uid;
|
|
41
|
+
}
|
|
42
|
+
const row = toColumnValues(this.fields);
|
|
43
|
+
if (Object.keys(row).length > 0) {
|
|
44
|
+
await saveRecord(this.page.request, context, {
|
|
45
|
+
table: 'sys_file_metadata',
|
|
46
|
+
identifier: String(uid),
|
|
47
|
+
target: uid,
|
|
48
|
+
data: { sys_file_metadata: { [String(uid)]: row } },
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return { id: String(uid) };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=file-metadata-builder.js.map
|