74 lines
2.6 KiB
TypeScript
74 lines
2.6 KiB
TypeScript
import { companyResponseSchema } from "@deadhead/schema";
|
|
import { describe, expect, it } from "vitest";
|
|
import { buildApp } from "../src/app";
|
|
import { createRecordingQueue } from "../src/jobs/queue";
|
|
import { useTestDatabase } from "./db";
|
|
import {
|
|
call,
|
|
getState,
|
|
insertDispatch,
|
|
signUp,
|
|
signUpOwner,
|
|
testContract,
|
|
useTestApp,
|
|
} from "./game";
|
|
import { testConfig } from "./helpers";
|
|
|
|
const database = useTestDatabase();
|
|
const testApp = useTestApp(database);
|
|
|
|
describe("developer tools (Step 10K.11)", () => {
|
|
it("advances the server clock", async () => {
|
|
const guest = await signUp(testApp().app);
|
|
const before = (await call(testApp().app, guest, "GET", "/api/time")).json().realTime as number;
|
|
const response = await call(testApp().app, guest, "POST", "/api/test/advance-clock", {
|
|
advanceMs: 600_000,
|
|
});
|
|
expect(response.statusCode).toBe(200);
|
|
const after = (await call(testApp().app, guest, "GET", "/api/time")).json().realTime as number;
|
|
expect(after - before).toBeGreaterThanOrEqual(600_000);
|
|
});
|
|
|
|
it("adds credits", async () => {
|
|
const guest = await signUp(testApp().app);
|
|
const start = (await getState(testApp().app, guest)).company.credits;
|
|
const response = await call(testApp().app, guest, "POST", "/api/test/add-credits", {
|
|
amount: 10_000,
|
|
});
|
|
expect(companyResponseSchema.parse(response.json()).company.credits).toBe(start + 10_000);
|
|
});
|
|
|
|
it("lands every flight when advanced to the last arrival", async () => {
|
|
const { app, clock } = testApp();
|
|
const owner = await signUpOwner(app, database().db);
|
|
const flight = await insertDispatch(database().db, {
|
|
playerId: owner.playerId,
|
|
shipId: owner.shipId,
|
|
pilotId: owner.avatarId,
|
|
departAt: clock.now,
|
|
contract: testContract(),
|
|
});
|
|
expect((await getState(app, owner)).activeDispatches).toHaveLength(1);
|
|
await call(app, owner, "POST", "/api/test/advance-clock", {
|
|
advanceMs: flight.arrivalAt - clock.now + 1000,
|
|
});
|
|
expect((await getState(app, owner)).activeDispatches).toHaveLength(0);
|
|
});
|
|
|
|
it("does not exist in production", async () => {
|
|
const app = buildApp(testConfig({ NODE_ENV: "production" }), {
|
|
database: database(),
|
|
jobs: createRecordingQueue(),
|
|
});
|
|
for (const [url, payload] of [
|
|
["/api/test/clock-offset", { offsetMs: 1 }],
|
|
["/api/test/advance-clock", { advanceMs: 1000 }],
|
|
["/api/test/add-credits", { amount: 10_000 }],
|
|
] as const) {
|
|
const response = await app.inject({ method: "POST", url, payload });
|
|
expect(response.statusCode, url).toBe(404);
|
|
}
|
|
await app.close();
|
|
});
|
|
});
|