Files
PhotonVision/photon-client/tests/platformDependent/od.spec.ts
2025-12-04 22:25:48 -06:00

80 lines
3.2 KiB
TypeScript

import { expect } from "@playwright/test";
import { test } from "../fixtures";
import axios from "axios";
import path from "path";
const fakeModelName = "FAKE-MODEL";
const fakeLabels = "test, 1, woof";
const newModelName = "foo-bar";
const platforms = ["LINUX_RK3588_64", "LINUX_QCS6490"];
for (const platform of platforms) {
test.describe(`Platform: ${platform}`, () => {
test.beforeEach(async ({ page }) => {
await page.goto("/#/settings");
await axios.post("/override/platform", { platform: platform });
await page.reload();
});
test("testSettingsPage", async ({ page }) => {
if (platform.endsWith("RK3588_64")) {
await expect(page.getByRole("main")).toContainText("Linux AARCH 64-bit with RK3588");
} else if (platform.endsWith("QCS6490")) {
await expect(page.getByRole("main")).toContainText("Linux AARCH 64-bit with QCS6490");
}
await expect(page.getByText("Object Detection")).toBeVisible();
});
test("Upload model", async ({ page }) => {
const testsDir = process.env.TESTS_DIR;
if (!testsDir) {
throw new Error("TESTS_DIR is not set");
}
await page.getByRole("button", { name: "Import Model" }).click();
await page.getByRole("textbox", { name: "Labels" }).fill(fakeLabels);
await page.getByRole("spinbutton", { name: "Width" }).fill("640");
await page.getByRole("spinbutton", { name: "Height" }).fill("640");
await page.getByTestId("import-version-select").click();
await page.getByRole("option", { name: "YOLOv8" }).click();
const modelFile = platform.endsWith("RK3588_64") ? `${fakeModelName}.rknn` : `${fakeModelName}.tflite`;
await page
.getByRole("button", { name: "Model File Model File" })
.setInputFiles(path.join(testsDir, "tests/resources", modelFile));
await page.getByRole("button", { name: "Import Object Detection Model" }).click();
await page.goto("/#/settings");
const tableRow = page.getByTestId("model-table").locator("tr", { hasText: fakeModelName });
await expect(tableRow).toBeVisible();
await expect(tableRow).toContainText(fakeLabels);
});
test("Rename model", async ({ page }) => {
const tableRow = page.getByTestId("model-table").locator("tr", { hasText: fakeModelName });
await tableRow.getByRole("button", { name: "Rename Model" }).click();
await page.getByRole("textbox", { name: "New Name New Name" }).fill(newModelName);
await page.getByRole("button", { name: "Rename", exact: true }).click();
await page.reload();
const renamedRow = page.getByTestId("model-table").locator("tr", { hasText: newModelName });
await expect(renamedRow).toContainText(fakeLabels);
});
test("Delete model", async ({ page }) => {
const tableRow = page.getByTestId("model-table").locator("tr", { hasText: newModelName });
await tableRow.getByRole("button", { name: "Delete Model" }).click();
await page.getByRole("button", { name: "Delete model", exact: true }).click();
await page.reload();
const deletedRow = page.getByTestId("model-table").locator("tr", { hasText: newModelName });
await expect(deletedRow).toHaveCount(0);
});
});
}