import { describe, expect, it } from 'vitest';
import { House } from '../src/lucide-icons';
import { getOriginalSvg, removeKeys } from './helpers';
import buildLucideIconElement from '../src/buildLucideIconElement';

describe('buildLucideIconElement', () => {
  it('should create SVG Element', () => {
    const HomeSVG = buildLucideIconElement(document, House);

    expect(HomeSVG.tagName).toBe('svg');
  });

  it('should match the snapshot', () => {
    const HomeSVG = buildLucideIconElement(document, House);

    expect(HomeSVG.outerHTML).toMatchSnapshot();
  });

  it('should create SVG Element with attributes', () => {
    const HomeSVG = buildLucideIconElement(document, House, { attributes: { fill: 'red' } });

    expect(HomeSVG.getAttribute('fill')).toBe('red');
  });

  it('should create SVG Element with class name', () => {
    const HomeSVG = buildLucideIconElement(document, House, { attributes: { class: 'icon' } });

    expect(HomeSVG.getAttribute('class')).toBe('icon');
  });

  it('should add backwards-compatible classes', () => {
    const HomeSVG = buildLucideIconElement(document, House);

    expect(HomeSVG.getAttribute('class')).toBe('lucide lucide-house lucide-home');
  });

  it('should merge classes', () => {
    const HomeSVG = buildLucideIconElement(document, House, { className: 'icon' });

    expect(HomeSVG.getAttribute('class')).toBe('lucide lucide-house lucide-home icon');
  });

  it('should create the correct svg element', () => {
    const HomeSVG = buildLucideIconElement(document, House);

    const svg = getOriginalSvg('house', ['home']);

    expect(removeKeys(HomeSVG.outerHTML)).toBe(svg);
  });
});
