66 lines
1.8 KiB
JavaScript
66 lines
1.8 KiB
JavaScript
"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);
|
|
});
|