fix: stabilize medication Playwright gate

* fix: stabilize medication Playwright gate

* fix: satisfy medication Playwright frontend gate
This commit is contained in:
Daniel Volz
2026-05-15 20:20:18 +02:00
committed by GitHub
parent 4212469cd5
commit 2f5fc2d9e9
4 changed files with 256 additions and 40 deletions
+48 -11
View File
@@ -26,7 +26,7 @@ async function fillAndSaveMedication(
opts: {
name: string;
genericName?: string;
packageType?: "blister" | "bottle" | "tube" | "liquid_container";
packageType?: "blister" | "bottle" | "tube" | "liquid_container" | "inhaler" | "injection";
packs?: string;
blistersPerPack?: string;
pillsPerBlister?: string;
@@ -50,12 +50,17 @@ async function fillAndSaveMedication(
}
const packageTypeSelect = form.locator("select.package-type-select");
if (opts.packageType === "bottle") {
await packageTypeSelect.selectOption("bottle");
if (opts.packageType === "bottle" || opts.packageType === "inhaler" || opts.packageType === "injection") {
await packageTypeSelect.selectOption(opts.packageType ?? "bottle");
await page.getByRole("tab", { name: /Package/i }).click();
if (opts.totalCapacity)
await form.getByLabel(/(Total Capacity|form\.totalCapacity|Total \(pills\))/i).fill(opts.totalCapacity);
if (opts.currentPills) await form.getByLabel(/(Current Pills|form\.currentPills)/i).fill(opts.currentPills);
await form
.getByLabel(/(Total Capacity|form\.totalCapacity|Total \(pills\)|Total \(count\)|form\.totalCount)/i)
.fill(opts.totalCapacity);
if (opts.currentPills)
await form
.getByLabel(/(Current Pills|form\.currentPills|Current Stock|form\.currentStockCount)/i)
.fill(opts.currentPills);
} else if (opts.packageType === "tube") {
await packageTypeSelect.selectOption("tube");
await page.getByRole("tab", { name: /Package/i }).click();
@@ -95,12 +100,12 @@ async function fillAndSaveMedication(
await form.getByRole("button", { name: /(Intake|form\.blisters\.addIntake)/i }).click();
}
const row = form.locator(".blister-row").nth(i);
await row
.getByLabel(
/(Usage \((pills|tablets|capsules|ml|applications)\)|form\.blisters\.(usage|usageTablets|usageCapsules|usageMl|usageApplication))/i
)
.fill(intakes[i].usage);
await row.getByLabel(/(Every \(days\)|form\.blisters\.everyDays)/i).fill(intakes[i].every);
const usageField = row.getByRole("textbox", {
name: /(Usage|Tablets|Capsules|Applications|Puffs|Injections|Ml|form\.blisters\.usage|common\.(puffs|injections))/i,
});
const everyField = row.getByLabel(/(Every \(days\)|form\.blisters\.everyDays)/i);
await usageField.fill(intakes[i].usage);
await everyField.fill(intakes[i].every);
}
await page.waitForLoadState("networkidle");
@@ -195,6 +200,38 @@ test.describe("Medication CRUD", () => {
});
});
test("should create an inhaler medication via the form", async ({ page }) => {
await navigateTo(page, "/medications");
await fillAndSaveMedication(page, {
name: "Test Rescue Inhaler",
packageType: "inhaler",
totalCapacity: "200",
currentPills: "120",
intakes: [{ usage: "2", every: "1" }],
});
const medRow = page.locator(".med-row").filter({ hasText: "Test Rescue Inhaler" });
await expect(medRow.locator(".med-details")).toContainText(/Inhaler|form\.packageTypeInhaler/i);
await expect(medRow.locator(".med-total")).toContainText("120 / 200");
});
test("should create an injection medication via the form", async ({ page }) => {
await navigateTo(page, "/medications");
await fillAndSaveMedication(page, {
name: "Test Weekly Injection",
packageType: "injection",
totalCapacity: "12",
currentPills: "4",
intakes: [{ usage: "1", every: "7" }],
});
const medRow = page.locator(".med-row").filter({ hasText: "Test Weekly Injection" });
await expect(medRow.locator(".med-details")).toContainText(/Injection|form\.packageTypeInjection/i);
await expect(medRow.locator(".med-total")).toContainText("4 / 12");
});
test("should create medication with multiple intake schedules", async ({ page }) => {
await navigateTo(page, "/medications");