"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const mockClient = { query: jest.fn(), release: jest.fn(), }; const mockPool = { connect: jest.fn(async () => mockClient), query: jest.fn(), end: jest.fn(), }; jest.mock("pg", () => ({ Pool: jest.fn(() => mockPool), })); const mileage_1 = require("../../src/mileage"); describe("MileageEngine flow", () => { beforeEach(() => { jest.clearAllMocks(); mockClient.query.mockImplementation(async (query) => { if (query.includes("RETURNING total_miles")) { return { rows: [{ total_miles: 120 }] }; } return { rows: [] }; }); }); it("awards miles, persists event, and upgrades role when threshold reached", async () => { const roleAdd = jest.fn().mockResolvedValue(undefined); const member = { roles: { cache: { has: jest.fn().mockReturnValue(false), }, add: roleAdd, }, guild: { members: { me: { roles: { highest: { position: 100, }, }, }, }, roles: { fetch: jest.fn().mockResolvedValue({ id: "role-1", position: 10, }), }, }, }; const engine = new mileage_1.MileageEngine({ databaseUrl: "postgres://test", roleTiers: [{ roleId: "role-1", minMiles: 100 }], eventScores: { command_execute: 10 }, }); const result = await engine.awardMiles({ guildId: "guild-1", userId: "user-1", eventType: "command_execute", member, }); expect(result).toEqual({ awardedMiles: 10, totalMiles: 120, upgradedRoleIds: ["role-1"], }); expect(mockClient.query).toHaveBeenCalledWith("BEGIN"); expect(mockClient.query).toHaveBeenCalledWith("COMMIT"); expect(roleAdd).toHaveBeenCalledWith(expect.objectContaining({ id: "role-1" }), "Mileage upgrade: reached 100 miles"); }); }); //# sourceMappingURL=mileage-engine-flow.test.js.map