forked from Bitcoindefi/OpenAO
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgame-tickets.integration.test.ts
More file actions
89 lines (72 loc) · 2.75 KB
/
Copy pathgame-tickets.integration.test.ts
File metadata and controls
89 lines (72 loc) · 2.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import assert from "node:assert/strict";
import { beforeAll, test } from "vitest";
import {
consumeGameTicket,
countGameTickets,
createAccountFixture,
createCharacterFixture,
createWorldGameTicket,
ensureApiReady,
logoutSession,
patchCharacter,
} from "./helpers/api";
beforeAll(async () => {
await ensureApiReady();
});
test("world ticket creation requires a selected character", async () => {
const account = await createAccountFixture();
const response = await createWorldGameTicket(account.session.sessionToken);
assert.equal(response.status, 400);
assert.equal(
(response.data as { error?: string }).error,
"No hay un personaje seleccionado",
);
});
test("world tickets can be consumed once", async () => {
const owner = await createCharacterFixture({ namePrefix: "Tick" });
const created = await createWorldGameTicket(owner.sessionToken);
assert.equal(created.status, 200);
const ticket = (created.data as { ticket: string }).ticket;
assert.ok(ticket, "No se devolvió ticket");
const consumed = await consumeGameTicket(ticket, "198.51.100.10");
const consumedAgain = await consumeGameTicket(ticket, "198.51.100.10");
assert.equal(consumed.status, 200);
assert.equal(
(consumed.data as { account?: { _id: string } }).account?._id,
owner.accountId,
);
assert.equal(consumedAgain.status, 404);
assert.equal(
(consumedAgain.data as { error?: string }).error,
"Game ticket invalido",
);
});
test("logout removes pending world tickets", async () => {
const owner = await createCharacterFixture({ namePrefix: "OutT" });
const created = await createWorldGameTicket(owner.sessionToken);
assert.equal(created.status, 200);
assert.equal(await countGameTickets(owner.accountId), 1);
const logout = await logoutSession(owner.sessionToken);
assert.equal(logout.status, 200);
assert.equal(await countGameTickets(owner.accountId), 0);
});
test("banned characters cannot create world tickets", async () => {
const owner = await createCharacterFixture({ namePrefix: "BanT" });
await patchCharacter(owner.id, {
banned: new Date(Date.now() + 60 * 60 * 1000).toISOString(),
});
const response = await createWorldGameTicket(owner.sessionToken);
assert.equal(response.status, 403);
assert.equal(
(response.data as { error?: string }).error,
"Tu personaje se encuentra baneado.",
);
});
test("consume rejects malformed payloads without a ticket", async () => {
const response = await consumeGameTicket("", "198.51.100.11");
assert.equal(response.status, 400);
assert.equal(
(response.data as { error?: string }).error,
"ticket es requerido",
);
});