import { tap, expect } from '@push.rocks/tapbundle';
import { Dns01Handler } from '../ts/handlers/Dns01Handler.js';

tap.test('Dns01Handler prepare and cleanup calls Cloudflare and DNS functions', async () => {
  let setCalled = false;
  let removeCalled = false;
  // fake Cloudflare API
  const fakeCF: any = {
    convenience: {
      acmeSetDnsChallenge: async (_ch: any) => {
        setCalled = true;
      },
      acmeRemoveDnsChallenge: async (_ch: any) => {
        removeCalled = true;
      },
    },
  };
  // fake DNS checker
  const fakeDNS: any = {
    checkUntilAvailable: async (host: string, rr: string, val: string, count: number, interval: number) => {
      expect(host).toEqual('test.host');
      expect(rr).toEqual('TXT');
      expect(val).toEqual('token');
    },
  };
  const handler = new Dns01Handler(fakeCF, fakeDNS);
  const input = { hostName: 'test.host', challenge: 'token' };
  await handler.prepare(input);
  expect(setCalled).toEqual(true);
  await handler.cleanup(input);
  expect(removeCalled).toEqual(true);
});

export default tap.start();