deadhead-space-freight-tycoon/apps/web/e2e/14-7-on-device.e2e.ts

41 lines
1.4 KiB
TypeScript

import { expect, test } from "@playwright/test";
import {
advanceTo,
dismissLogbook,
dispatchFromEarthBoard,
goAway,
playToDeal,
state,
} from "./support";
test.describe("the game runs on the device (CR-014 Step 14.7)", () => {
test("plays the opening with every network request outside the app's own files blocked", async ({
page,
baseURL,
}) => {
const origin = new URL(baseURL!).origin;
const blocked: string[] = [];
await page.route("**/*", (route) => {
const url = new URL(route.request().url());
// Only the app's own static files may load; there is no API any more.
if (url.origin === origin && !url.pathname.startsWith("/api/")) return route.continue();
blocked.push(url.href);
return route.abort("internetdisconnected");
});
// Start a company, fly the tutorial, shake on the deal, dispatch a contract.
const owner = await playToDeal(page);
expect(owner.tutorial).toBeNull();
expect(owner.ships.map((s) => s.modelId)).toEqual(["courier", "clipper"]);
const dispatchId = await dispatchFromEarthBoard(page);
const flight = (await state(page)).activeDispatches.find((d) => d.id === dispatchId)!;
await goAway(page);
await advanceTo(page, flight.arrivalAt);
await page.reload();
await dismissLogbook(page);
expect((await state(page)).activeDispatches).toEqual([]);
expect(blocked).toEqual([]);
});
});