import type { RouteRecordStringComponent } from '@easyflow/types';

import { describe, expect, it } from 'vitest';

import { disableUnsafeMenuRouteCaching } from '../route-cache-safety';

function createRoute(
  path: string,
  children?: RouteRecordStringComponent[],
): RouteRecordStringComponent {
  return {
    children,
    component: '/example/Index',
    meta: { keepAlive: true, title: path },
    name: path,
    path,
  };
}

describe('route cache safety', () => {
  it('disables stale keep-alive metadata for affected menus recursively', () => {
    const knowledgeRoute = createRoute('/ai/documentCollection');
    const routes = [
      createRoute('/ai/workflow'),
      createRoute('/ai', [knowledgeRoute]),
    ];

    expect(disableUnsafeMenuRouteCaching(routes)).toBe(routes);
    expect(routes[0]?.meta?.keepAlive).toBe(false);
    expect(knowledgeRoute.meta?.keepAlive).toBe(false);
  });

  it('does not change unrelated route caching', () => {
    const unrelatedRoute = createRoute('/example/cached');

    disableUnsafeMenuRouteCaching([unrelatedRoute]);

    expect(unrelatedRoute.meta?.keepAlive).toBe(true);
  });

  it('disables stale approval menu caching before opening hidden details', () => {
    const approvalRoute = createRoute('/sys/approval');

    disableUnsafeMenuRouteCaching([approvalRoute]);

    expect(approvalRoute.meta?.keepAlive).toBe(false);
  });
});
