"use strict"; const test = require("node:test"); const assert = require("node:assert/strict"); const { createTokenRefresher } = require("../lib/tokenRefresher"); test("初回getToken呼び出しでgetUserAccessTokenを呼びトークンを返す", async () => { let calls = 0; const refresher = createTokenRefresher({ getUserAccessToken: async () => { calls += 1; return `token-${calls}`; }, thresholdMs: 50 * 60 * 1000, now: () => 0, }); const token = await refresher.getToken(); assert.equal(token, "token-1"); assert.equal(calls, 1); }); test("閾値未経過なら再取得せずキャッシュ済トークンを返す", async () => { let calls = 0; let currentTime = 0; const refresher = createTokenRefresher({ getUserAccessToken: async () => { calls += 1; return `token-${calls}`; }, thresholdMs: 50 * 60 * 1000, now: () => currentTime, }); const first = await refresher.getToken(); currentTime = 30 * 60 * 1000; // 30分経過(閾値50分未満) const second = await refresher.getToken(); assert.equal(first, "token-1"); assert.equal(second, "token-1"); assert.equal(calls, 1); }); test("閾値を超えて経過したら再取得する", async () => { let calls = 0; let currentTime = 0; const refresher = createTokenRefresher({ getUserAccessToken: async () => { calls += 1; return `token-${calls}`; }, thresholdMs: 50 * 60 * 1000, now: () => currentTime, }); const first = await refresher.getToken(); currentTime = 51 * 60 * 1000; // 51分経過(閾値50分超過) const second = await refresher.getToken(); assert.equal(first, "token-1"); assert.equal(second, "token-2"); assert.equal(calls, 2); });