import { describe, it, expect } from 'vitest';
import { createSessionToken, verifySessionToken } from './session';

const secret = new TextEncoder().encode('test-secret-at-least-32-bytes-long-ok');

describe('session tokens', () => {
  it('round-trips a valid session', async () => {
    const token = await createSessionToken({ username: 'j47ho', email: 'j47ho@uwaterloo.ca' }, secret);
    const session = await verifySessionToken(token, secret);
    expect(session).toEqual({ username: 'j47ho', email: 'j47ho@uwaterloo.ca' });
  });

  it('rejects a token signed with a different secret', async () => {
    const otherSecret = new TextEncoder().encode('a-completely-different-secret-value');
    const token = await createSessionToken({ username: 'j47ho' }, otherSecret);
    const session = await verifySessionToken(token, secret);
    expect(session).toBeNull();
  });

  it('rejects garbage input', async () => {
    const session = await verifySessionToken('not-a-jwt', secret);
    expect(session).toBeNull();
  });
});
