import Router from "@koa/router"; import getPort from "get-port"; import { Browser, Page } from "playwright"; import type { Context } from "koa"; import Koa from "koa"; import { mount } from "../../mount.js"; import { Form } from "../form.js"; import { getBrowser } from "../../utils/browser-creator.js"; import { Controls, Fields, sleep } from "../../index.js"; import _locreq from "locreq"; import { module_dirname } from "../../utils/module-dirname.js"; import { FileManager, PathFilePointer } from "@sealcode/file-manager"; import assert from "node:assert"; const locreq = _locreq(module_dirname(import.meta.url)); describe("file-control", () => { describe("basic tests", async () => { let server: ReturnType; let browser: Browser; let page: Page; after(() => { server.close(); }); it("doesn't require image input if it already has old-value", async () => { const port = await getPort(); console.info(`Using port ${port} for image.test.ts`); const app = new Koa(); const router = new Router(); const fields = { file: new Fields.File(true), }; let submit_called = false; mount( router, "/", new (class extends Form { getFields = () => fields; getControls = () => [new Controls.File(fields.file)]; async onSubmit(_ctx: Context) { submit_called = true; } async getInitialValues(_ctx: Context) { const file = new PathFilePointer( new FileManager("/tmp", "/uploaded_files"), locreq.resolve("assets/important.png") ); return { file: await file.save(false), // to get the token }; } async canAccess(_: Context) { return { canAccess: true, message: "" }; } })(), true ); app.use(router.routes()).use(router.allowedMethods()); server = app.listen(port); browser = await getBrowser(); const context = await browser.newContext(); page = await context.newPage(); await page.goto(`http://localhost:${port}`); await page.getByRole("button", { name: "Wyƛlij" }).click(); await sleep(100); assert(submit_called, "Submit not called - something prevented submit on click?"); }); }).timeout(10000); });