import { describe, expect, it } from 'vitest';
import { verifyProjectEntitlement } from './project-entitlement-service';

const PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEA4g9zkTBS58isrp5DIag/tbYE9Frwa+IL8VLJvb6kopQ=
-----END PUBLIC KEY-----
`;

const TOKEN = 'learnitive1.eyJ2ZXJzaW9uIjoxLCJ0aWVyIjoicHJvIiwic291cmNlIjoicHJlZGVmaW5lZCIsImxpY2Vuc2VGaW5nZXJwcmludCI6InRlc3Q6Zml4dHVyZTowMDAxIiwiaXNzdWVkQXQiOjE4MDAwMDAwMDAsInJlZnJlc2hBZnRlciI6MTgwMjU5MjAwMCwidmFsaWRVbnRpbCI6MTgxMDM2ODAwMCwicmVmcmVzaEhhbmRsZSI6ImZpeHR1cmUifQ.TdwaVh9vhJ-0HBUgzjGkvU1Ce1HUvwc4HWTlW9SkPZHM9PzXSTnUFys096k8NOygcV_VeSPtujj6U97bhTuFAg';

describe('verifyProjectEntitlement', () => {
  it('verifies an Ed25519 signed Pro entitlement locally', async () => {
    const payload = await verifyProjectEntitlement(TOKEN, PUBLIC_KEY);
    expect(payload).toMatchObject({
      tier: 'pro',
      source: 'predefined',
      licenseFingerprint: 'test:fixture:0001',
    });
  });

  it('rejects a locally tampered entitlement', async () => {
    const tampered = TOKEN.replace('learnitive1.', 'learnitive1.A');
    await expect(verifyProjectEntitlement(tampered, PUBLIC_KEY)).rejects.toThrow();
  });
});
