import { describe, it, expect, vi } from 'vitest';
import { Lifecycle } from './lifecycle.js';

describe('Lifecycle', () => {
  it('registers and calls shutdown handlers in reverse order', async () => {
    const lifecycle = new Lifecycle();
    const calls: number[] = [];

    lifecycle.onShutdown(async () => { calls.push(1); });
    lifecycle.onShutdown(async () => { calls.push(2); });
    lifecycle.onShutdown(async () => { calls.push(3); });

    await lifecycle.shutdown();

    expect(calls).toEqual([3, 2, 1]);
  });

  it('only shuts down once', async () => {
    const lifecycle = new Lifecycle();
    let count = 0;

    lifecycle.onShutdown(async () => { count++; });

    await lifecycle.shutdown();
    await lifecycle.shutdown();

    expect(count).toBe(1);
  });

  it('reports running state', async () => {
    const lifecycle = new Lifecycle();

    expect(lifecycle.isRunning).toBe(true);

    await lifecycle.shutdown();

    expect(lifecycle.isRunning).toBe(false);
  });
});
