/**
 * Integration Test: Identity Credential Flow
 * Tests the complete flow of credential issuance and verification
 */

import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import { setupTestContext, teardownTestContext, cleanupDatabase, TestContext } from './setup';

describe('Identity Credential Flow - Integration', () => {
  let context: TestContext;

  beforeAll(async () => {
    context = await setupTestContext();
    await cleanupDatabase(context.dbPool);
  });

  afterAll(async () => {
    await cleanupDatabase(context.dbPool);
    await teardownTestContext(context);
  });

  describe('Credential Issuance Flow', () => {
    it('should issue a verifiable credential end-to-end', async () => {
      // 1. Create identity
      const identityResponse = await context.identityService.inject({
        method: 'POST',
        url: '/api/v1/identities',
        payload: {
          did: 'did:example:123',
          eidasLevel: 'substantial',
        },
      });

      expect(identityResponse.statusCode).toBe(201);
      const identity = identityResponse.json();

      // 2. Issue credential
      const credentialResponse = await context.identityService.inject({
        method: 'POST',
        url: '/api/v1/credentials/issue',
        payload: {
          identityId: identity.id,
          credentialType: 'membership',
          claims: {
            name: 'Test User',
            membershipNumber: '12345',
          },
        },
      });

      expect(credentialResponse.statusCode).toBe(201);
      const credential = credentialResponse.json();
      expect(credential).toHaveProperty('id');
      expect(credential).toHaveProperty('credentialType', 'membership');
    });

    it('should verify a credential', async () => {
      // This would test credential verification
      // Implementation depends on verifier-sdk
    });
  });
});

