UNPKG

erlc-api

Version:

An ER:LC API wrapper for JS/TS

102 lines (86 loc) 2.9 kB
const erlc = require("../src/erlc.js"); const getPlayers = require("../src/functions/server/getPlayers.js"); describe("Optional cache", () => { const serverToken = "test-server"; let fetchCalls = 0; let lastUrl = ""; const mockFetch = async (url, opts) => { fetchCalls += 1; lastUrl = url; return { ok: true, status: 200, json: async () => ({ Players: [{ Player: "User:123", Permission: "Normal" }], }), }; }; beforeEach(() => { fetchCalls = 0; lastUrl = ""; erlc.config.serverToken = undefined; erlc.config.globalToken = undefined; erlc.config.cache.enabled = false; erlc.config.fetch = mockFetch; }); test("Cache disabled by default (no cache hits)", async () => { const res1 = await getPlayers(serverToken); const res2 = await getPlayers(serverToken); expect(Array.isArray(res1)).toBe(true); expect(Array.isArray(res2)).toBe(true); expect(lastUrl).toBe("https://api.erlc.gg/v2/server?Players=true"); expect(fetchCalls).toBe(2); }); test("Cache enabled returns cached data on subsequent call", async () => { erlc.config.cache.enabled = true; erlc.config.cache.ttlMs.players = 5000; const res1 = await getPlayers(serverToken); const res2 = await getPlayers(serverToken); expect(Array.isArray(res1)).toBe(true); expect(Array.isArray(res2)).toBe(true); expect(fetchCalls).toBe(1); }); test("Client validates server token on init", async () => { let lastHeaders = {}; const logger = { info: jest.fn(), error: jest.fn(), }; erlc.config.fetch = async (url, opts) => { fetchCalls += 1; lastUrl = url; lastHeaders = opts.headers; return { ok: true, status: 200, json: async () => ({ Name: "Test Server" }), }; }; const client = new erlc.Client({ serverToken, fetch: erlc.config.fetch, logger, }); expect(client.connected).toBe(false); await client.ready; expect(client.connected).toBe(true); expect(client.connectionError).toBe(null); expect(lastUrl).toBe("https://api.erlc.gg/v2/server"); expect(lastHeaders["Server-Key"]).toBe(serverToken); expect(logger.info).toHaveBeenCalledWith("ER:LC client connected to server."); expect(fetchCalls).toBe(1); }); test("Client stores server token for instance methods and global fallback", async () => { const client = new erlc.Client({ serverToken, fetch: mockFetch, validateServerToken: false, }); const clientPlayers = await client.getPlayers(); const fallbackPlayers = await erlc.getPlayers(); expect(Array.isArray(clientPlayers)).toBe(true); expect(Array.isArray(fallbackPlayers)).toBe(true); expect(fetchCalls).toBe(2); expect(lastUrl).toBe("https://api.erlc.gg/v2/server?Players=true"); }); });