Improve toolbox checklists, image browsing, and guide integration
All checks were successful
Deploy Sokko G / deploy (push) Successful in 18s
All checks were successful
Deploy Sokko G / deploy (push) Successful in 18s
This commit is contained in:
parent
00e73f0062
commit
386212041f
47 changed files with 744 additions and 112 deletions
|
|
@ -64,6 +64,32 @@ test("counters persist signed values and reset without affecting other counters"
|
|||
await expect(tool.locator(".counter-value span")).toHaveText("Other");
|
||||
});
|
||||
|
||||
test("empty collection tools explain that they have no content", async ({ page }) => {
|
||||
await page.goto("/#/toolboxes");
|
||||
await page.getByText("Importer une toolbox", { exact: true }).locator('input[type="file"]').setInputFiles({
|
||||
name: "empty-tools.json",
|
||||
mimeType: "application/json",
|
||||
buffer: Buffer.from(JSON.stringify({
|
||||
toolbox: {
|
||||
id: "empty-tools",
|
||||
name: "Empty tools",
|
||||
modules: [
|
||||
{ id: "checklist", type: "checklist", title: "Checklist" },
|
||||
{ id: "images", type: "images", title: "Images" },
|
||||
{ id: "links", type: "links", title: "Links" },
|
||||
{ id: "counters", type: "counters", title: "Counters" }
|
||||
]
|
||||
},
|
||||
modules: {}
|
||||
}))
|
||||
});
|
||||
await page.getByRole("link", { name: "Ouvrir Empty tools", exact: true }).first().click();
|
||||
await expect(page.getByText("Aucun élément dans cette checklist.", { exact: true })).toBeVisible();
|
||||
await expect(page.getByText("Aucune image.", { exact: true })).toBeVisible();
|
||||
await expect(page.getByText("Aucun lien.", { exact: true })).toBeVisible();
|
||||
await expect(page.getByText("Aucun compteur.", { exact: true })).toBeVisible();
|
||||
});
|
||||
|
||||
test("checklist quantities are clamped and completed categories hide without losing data", async ({ page }) => {
|
||||
const tool = await setup(page, "checklist", { sections: [] });
|
||||
await tool.getByPlaceholder("Catégorie", { exact: true }).fill("Craft");
|
||||
|
|
@ -81,6 +107,14 @@ test("checklist quantities are clamped and completed categories hide without los
|
|||
await expect(tool.getByRole("radio", { name: "Cachée quand terminée", exact: true })).toHaveAttribute("aria-checked", "true");
|
||||
await tool.getByRole("radio", { name: "Visible quand terminée", exact: true }).click();
|
||||
await expect(quantity).toHaveValue("3");
|
||||
const hideCompleted = tool.getByRole("button", { name: "Masquer les éléments terminés", exact: true });
|
||||
await hideCompleted.click();
|
||||
await expect(hideCompleted).toHaveAttribute("aria-pressed", "true");
|
||||
await expect(quantity).toHaveCount(0);
|
||||
await page.reload();
|
||||
await expect(hideCompleted).toHaveAttribute("aria-pressed", "true");
|
||||
await hideCompleted.click();
|
||||
await expect(quantity).toHaveValue("3");
|
||||
await tool.getByRole("button", { name: "Retirer une quantité", exact: true }).click();
|
||||
await page.reload();
|
||||
await expect(quantity).toHaveValue("2");
|
||||
|
|
@ -88,3 +122,63 @@ test("checklist quantities are clamped and completed categories hide without los
|
|||
await page.reload();
|
||||
await expect(quantity).toHaveCount(0);
|
||||
});
|
||||
|
||||
test("a simple checklist can hide and restore checked rows", async ({ page }) => {
|
||||
const tool = await setup(page, "checklist", {
|
||||
items: [
|
||||
{ id: "done", label: "Done", qtyCurrent: 1 },
|
||||
{ id: "pending", label: "Pending" }
|
||||
]
|
||||
});
|
||||
const hideCompleted = tool.getByRole("button", { name: "Masquer les éléments terminés", exact: true });
|
||||
await hideCompleted.click();
|
||||
await expect(tool.getByRole("checkbox", { name: "Terminer Done", exact: true })).toHaveCount(0);
|
||||
await expect(tool.getByRole("checkbox", { name: "Terminer Pending", exact: true })).toBeVisible();
|
||||
await hideCompleted.click();
|
||||
await expect(tool.getByRole("checkbox", { name: "Terminer Done", exact: true })).toBeVisible();
|
||||
});
|
||||
|
||||
test("images open a gallery and navigate the current collection without looping", async ({ page }) => {
|
||||
const makeImage = (color) => `data:image/svg+xml,${encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" width="640" height="360"><rect width="640" height="360" fill="${color}"/></svg>`)}`;
|
||||
const tool = await setup(page, "images", {
|
||||
images: [
|
||||
{ id: "one", label: "First", dataUrl: makeImage("#8b5cf6") },
|
||||
{ id: "two", label: "Second", dataUrl: makeImage("#22d3ee") },
|
||||
{ id: "three", dataUrl: makeImage("#f6c453") }
|
||||
]
|
||||
});
|
||||
|
||||
await tool.getByRole("button", { name: "Galerie", exact: true }).click();
|
||||
const dialog = page.getByRole("dialog", { name: "Galerie d'images", exact: true });
|
||||
await expect(dialog).toBeVisible();
|
||||
await expect(dialog.locator(".image-viewer-gallery-item")).toHaveCount(3);
|
||||
await dialog.getByRole("button", { name: "Afficher en grand : Second", exact: true }).click();
|
||||
await expect(page.locator(".image-viewer-title")).toHaveText("Second");
|
||||
await expect(page.locator(".image-viewer-position")).toHaveText("2 / 3");
|
||||
|
||||
await page.keyboard.press("ArrowRight");
|
||||
await expect(page.locator(".image-viewer-title")).toHaveText("Image");
|
||||
await expect(page.getByRole("button", { name: "Image suivante", exact: true })).toBeDisabled();
|
||||
await page.keyboard.press("ArrowLeft");
|
||||
await expect(page.locator(".image-viewer-title")).toHaveText("Second");
|
||||
|
||||
await page.getByRole("button", { name: "Revenir à la galerie", exact: true }).click();
|
||||
const secondThumbnail = dialog.getByRole("button", { name: "Afficher en grand : Second", exact: true });
|
||||
await expect(secondThumbnail).toBeFocused();
|
||||
await page.keyboard.press("Escape");
|
||||
await expect(dialog).toHaveCount(0);
|
||||
|
||||
await page.setViewportSize({ width: 390, height: 844 });
|
||||
await tool.getByRole("button", { name: "Galerie", exact: true }).click();
|
||||
const galleryBox = await dialog.boundingBox();
|
||||
expect(galleryBox.x).toBeGreaterThanOrEqual(0);
|
||||
expect(galleryBox.y).toBeGreaterThanOrEqual(0);
|
||||
expect(galleryBox.x + galleryBox.width).toBeLessThanOrEqual(390);
|
||||
expect(galleryBox.y + galleryBox.height).toBeLessThanOrEqual(844);
|
||||
await dialog.getByRole("button", { name: "Fermer", exact: true }).click();
|
||||
|
||||
await tool.locator(".image-preview").nth(2).click();
|
||||
await expect(page.locator(".image-viewer-position")).toHaveText("3 / 3");
|
||||
await expect(page.getByRole("button", { name: "Image suivante", exact: true })).toBeDisabled();
|
||||
await page.getByRole("button", { name: "Fermer", exact: true }).click();
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue