Files
odysseus/tests/e2e/photo-editor/merge-fidelity.spec.js
T

49 lines
2.4 KiB
JavaScript

const { test, expect } = require('@playwright/test');
const { editorState, flattenedPixelDigest, openBlankEditor } = require('./helpers.js');
async function seedVisibleLayers(page) {
await page.evaluate(async () => {
const { state } = await import('/static/js/editor/state.js');
const background = state.layers.find(layer => layer.name === 'Background');
const edit = state.layers.find(layer => layer.name === 'Edit');
background.ctx.fillStyle = '#26354f';
background.ctx.fillRect(0, 0, background.canvas.width, background.canvas.height);
edit.ctx.fillStyle = '#cf5b4a';
edit.ctx.fillRect(48, 32, edit.canvas.width - 96, edit.canvas.height - 64);
window.galleryEditorComposite?.();
});
}
test('Merge all preserves retained effects and adjustment output', async ({ page }) => {
await openBlankEditor(page, { width: 320, height: 220 }, 'Merge fidelity E2E');
await seedVisibleLayers(page);
await page.locator('#ge-filter-menu-btn').click();
await page.locator('[data-filter-action="effect-color-overlay"]').click();
await expect(page.locator('.ge-filter-modal')).toBeVisible();
await page.locator('.ge-filter-row input[type="color"]').fill('#f0c04a');
await page.locator('.ge-filter-row input[data-key="opacity"]').fill('35');
await page.locator('.ge-filter-modal [data-action="apply"]').click();
await page.locator('#ge-add-layer').click();
await page.locator('.ge-add-layer-menu [data-adjustment-type="exposure"]').click();
await expect(page.locator('.ge-adj-popup')).toBeVisible();
await page.locator('.ge-adj-row input[data-key="exposure"]').fill('45');
await page.locator('.ge-adj-row input[data-key="exposure"]').dispatchEvent('input');
await page.locator('[data-adj-action="ok"]').click();
const before = await flattenedPixelDigest(page);
const beforeState = await editorState(page);
expect(beforeState.layers.some(layer => layer.effects.length)).toBe(true);
expect(beforeState.layers.some(layer => layer.kind === 'adjustment')).toBe(true);
await page.locator('#ge-merge-all').click();
await expect.poll(async () => (await editorState(page)).layers.length).toBe(1);
const afterState = await editorState(page);
expect(afterState.layers[0].effects).toHaveLength(0);
expect(afterState.layers).toEqual([
expect.objectContaining({ kind: 'raster', effects: [] }),
]);
expect(await flattenedPixelDigest(page)).toEqual(before);
});