import { describe, it, expect } from 'vitest';
import { mintAppHarnessToken, verifyAppHarnessToken, revokeAppHarnessToken } from './app-harness-token.js';

describe('app-harness-token', () => {
  it('mints + verifies a scoped token', () => {
    const t = mintAppHarnessToken({ userId: 'u1', spaceId: 's1' });
    expect(verifyAppHarnessToken(t)).toEqual({ userId: 'u1', spaceId: 's1' });
  });
  it('rejects unknown/garbage tokens', () => {
    expect(verifyAppHarnessToken('nope')).toBeNull();
  });
  it('rejects after revoke', () => {
    const t = mintAppHarnessToken({ userId: 'u1', spaceId: 's1' });
    revokeAppHarnessToken(t);
    expect(verifyAppHarnessToken(t)).toBeNull();
  });
  it('rejects after expiry', () => {
    const t = mintAppHarnessToken({ userId: 'u1', spaceId: 's1' }, 1);
    // wait past TTL
    const until = Date.now() + 5;
    while (Date.now() < until) { /* spin briefly */ }
    expect(verifyAppHarnessToken(t)).toBeNull();
  });
});
