import plugin from './detector.js';
import { describe, it } from 'vitest';

const { detector } = plugin;

describe('flowchart-elk detector', () => {
  it('should fail for dagre-d3', () => {
    expect(
      detector('flowchart', {
        flowchart: {
          defaultRenderer: 'dagre-d3',
        },
      })
    ).toBe(false);
  });
  it('should fail for dagre-wrapper', () => {
    expect(
      detector('flowchart', {
        flowchart: {
          defaultRenderer: 'dagre-wrapper',
        },
      })
    ).toBe(false);
  });
  it('should succeed for elk', () => {
    expect(
      detector('flowchart', {
        flowchart: {
          defaultRenderer: 'elk',
        },
      })
    ).toBe(true);
    expect(
      detector('graph', {
        flowchart: {
          defaultRenderer: 'elk',
        },
      })
    ).toBe(true);
  });

  // The error from the issue was reproduced with mindmap, so this is just an example
  // what matters is the keyword somewhere inside graph definition
  it('should check only the beginning of the line in search of keywords', () => {
    expect(
      detector('mindmap ["Descendant node in flowchart"]', {
        flowchart: {
          defaultRenderer: 'elk',
        },
      })
    ).toBe(false);

    expect(
      detector('mindmap ["Descendant node in graph"]', {
        flowchart: {
          defaultRenderer: 'elk',
        },
      })
    ).toBe(false);
  });

  it('should detect flowchart-elk', () => {
    expect(detector('flowchart-elk')).toBe(true);
  });

  it('should not detect class with defaultRenderer set to elk', () => {
    expect(
      detector('class', {
        flowchart: {
          defaultRenderer: 'elk',
        },
      })
    ).toBe(false);
  });
});
