mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-07 04:12:04 +00:00
The card carries data-period and each goal row and goal field a data-goal-key, so the spec no longer depends on the English labels.
69 lines
2.6 KiB
TypeScript
69 lines
2.6 KiB
TypeScript
import { expect, test } from "./setup/test";
|
|
|
|
import { STORAGE_STATE_PATH } from "./setup/global-setup";
|
|
|
|
/**
|
|
* The activity calendar on the workouts page (D1036), at phone width: the
|
|
* card renders a whole-week grid, pages back a period, switches to the week
|
|
* view, and the goals sheet saves a goal the calendar then reports.
|
|
*/
|
|
test.describe("activity calendar", () => {
|
|
test.use({
|
|
storageState: STORAGE_STATE_PATH,
|
|
viewport: { width: 390, height: 844 },
|
|
});
|
|
|
|
test("draws the month, pages back and switches to a week", async ({
|
|
page,
|
|
}) => {
|
|
await page.goto("/insights/workouts");
|
|
const card = page.locator('[data-slot="activity-calendar"]');
|
|
await expect(card).toBeVisible();
|
|
await expect(
|
|
page.locator('[data-slot="activity-calendar-label"]'),
|
|
).not.toHaveText("");
|
|
|
|
const days = page.locator('[data-slot="activity-calendar-day"]');
|
|
const monthCount = await days.count();
|
|
if (monthCount > 0) expect(monthCount % 7).toBe(0);
|
|
|
|
const label = page.locator('[data-slot="activity-calendar-label"]');
|
|
const before = await label.textContent();
|
|
await page.locator('[data-slot="activity-calendar-previous"]').click();
|
|
await expect(label).not.toHaveText(before ?? "");
|
|
|
|
await expect(card).toHaveAttribute("data-period", "month");
|
|
await page.locator('[data-slot="activity-calendar-period-week"]').click();
|
|
await expect(card).toHaveAttribute("data-period", "week");
|
|
if ((await days.count()) > 0) await expect(days).toHaveCount(7);
|
|
|
|
// Nothing in the card pushes the page sideways on a phone.
|
|
const overflow = await page.evaluate(
|
|
() =>
|
|
document.documentElement.scrollWidth -
|
|
document.documentElement.clientWidth,
|
|
);
|
|
expect(overflow).toBeLessThanOrEqual(0);
|
|
});
|
|
|
|
test("saves a goal and shows its progress", async ({ page }) => {
|
|
await page.goto("/insights/workouts");
|
|
await page.locator('[data-slot="activity-calendar-set-goals"]').click();
|
|
const field = page.locator(
|
|
'[data-slot="activity-goals-form"] [data-goal-key="stepsPerMonth"]',
|
|
);
|
|
const goal = page.locator(
|
|
'[data-slot="activity-calendar-goal"][data-goal-key="stepsPerMonth"]',
|
|
);
|
|
await field.fill("150000");
|
|
await page.locator('[data-slot="activity-goals-save"]').click();
|
|
await expect(goal).toBeVisible();
|
|
|
|
// Clear it again so the account is left as it was found.
|
|
await page.locator('[data-slot="activity-calendar-set-goals"]').click();
|
|
await field.fill("");
|
|
await page.locator('[data-slot="activity-goals-save"]').click();
|
|
await expect(goal).toHaveCount(0);
|
|
});
|
|
});
|