commit 750c0f9231576c846255bdc8b87e4cf865c92d7e
parent d67119ee8275283a621c55d599faf4e253c0c496
Author: finwo <finwo@pm.me>
Date: Sun, 27 Sep 2026 18:42:22 +0200
Cover both settings of refresh_sliding through the token endpoint
Diffstat:
2 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/test/helpers/harness.js b/test/helpers/harness.js
@@ -108,6 +108,9 @@ export async function startHarness(options = {}) {
: []),
'auth:',
' session_secret: test-session-secret-not-for-real-use',
+ ...(options.accessTtl ? [` access_ttl: ${options.accessTtl}`] : []),
+ ...(options.refreshTtl ? [` refresh_ttl: ${options.refreshTtl}`] : []),
+ ...(options.refreshSliding === undefined ? [] : [` refresh_sliding: ${options.refreshSliding}`]),
...(options.redirectUris
? [' local:', ` redirect_uris: ${JSON.stringify(options.redirectUris)}`]
: []),
diff --git a/test/provider.test.js b/test/provider.test.js
@@ -274,6 +274,38 @@ test('refreshing returns a new access token and keeps the refresh token', async
});
});
+async function refreshedDeadline(sliding) {
+ const c = await startHarness({
+ bootstrap: true,
+ publicUrl: PUBLIC_URL,
+ refreshSliding: sliding,
+ refreshTtl: 3600,
+ });
+ try {
+ const grant = await c.login();
+ const before = await c.services.refreshTokens.claim(grant.refresh_token);
+
+ await new Promise((resolve) => setTimeout(resolve, 5));
+ const res = await c.token({ grant_type: 'refresh_token', refresh_token: grant.refresh_token });
+ assert.equal(res.statusCode, 200, res.body);
+
+ const after = await c.services.refreshTokens.claim(grant.refresh_token);
+ return { before: before.expires_at, after: after.expires_at };
+ } finally {
+ await c.stop();
+ }
+}
+
+test('a sliding session has its deadline extended by refreshing', async () => {
+ const { before, after } = await refreshedDeadline(true);
+ assert.ok(after > before, `${after} should be past ${before}`);
+});
+
+test('an absolute session keeps its deadline when refreshed', async () => {
+ const { before, after } = await refreshedDeadline(false);
+ assert.equal(after, before);
+});
+
test('an unknown grant type or refresh token is refused', async () => {
await withConductor(async (c) => {
const bad = await c.token({ grant_type: 'password', username: 'admin', password: 'bootstrap-password' });