conductor

CI task system
git clone git://git.finwo.net/app/conductor
Log | Files | Refs | README | LICENSE

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:
Mtest/helpers/harness.js | 3+++
Mtest/provider.test.js | 32++++++++++++++++++++++++++++++++
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' });