import { Rose } from '../../../../src';
import { DEFAULT_OPTIONS } from '../../../../src/plots/rose/constant';
import { salesByArea, subSalesByArea } from '../../../data/sales';
import { createDiv } from '../../../utils/dom';

describe('rose', () => {
  it('x*y', () => {
    const rose = new Rose(createDiv('x*y'), {
      width: 400,
      height: 300,
      data: salesByArea,
      xField: 'area',
      yField: 'sales',
    });

    rose.render();

    const geometry = rose.chart.geometries[0];
    const positionFields = geometry.getAttribute('position').getFields();

    // 类型
    expect(geometry.type).toBe('interval');
    // 图形元素个数
    expect(rose.chart.geometries[0].elements.length).toBe(salesByArea.length);
    // x & y
    expect(positionFields).toHaveLength(2);
    expect(positionFields[0]).toBe('area');
    expect(positionFields[1]).toBe('sales');

    rose.destroy();
  });

  it('grouped rose', () => {
    const rose = new Rose(createDiv('grouped rose'), {
      width: 400,
      height: 300,
      data: subSalesByArea,
      xField: 'area',
      yField: 'sales',
      seriesField: 'series',
      isGroup: true,
    });

    rose.render();

    const geometry = rose.chart.geometries[0];
    expect(geometry.getAdjust('dodge')).toMatchObject({
      xField: 'area',
      yField: 'sales',
    });
    expect(geometry.getAdjust('stack')).toBeUndefined();
    expect(geometry.getAttribute('color')?.getFields()).toEqual(['series']);

    // legend 默认不进行 offset
    // @ts-ignore
    expect(rose.chart.getController('legend').components[0].component.get('offsetX')).not.toBeGreaterThan(0);

    rose.destroy();
  });

  it('stacked rose', () => {
    const rose = new Rose(createDiv('stacked rose'), {
      width: 400,
      height: 300,
      data: subSalesByArea,
      xField: 'area',
      yField: 'sales',
      seriesField: 'series',
      isStack: true,
    });

    rose.render();

    const geometry = rose.chart.geometries[0];
    expect(geometry.getAdjust('dodge')).toBeUndefined();
    expect(geometry.getAdjust('stack')).toMatchObject({
      xField: 'area',
      yField: 'sales',
    });
    expect(geometry.getAttribute('color')?.getFields()).toEqual(['series']);

    rose.destroy();
  });

  it('defaultOptions 保持从 constants 中获取', () => {
    expect(Rose.getDefaultOptions()).toEqual(DEFAULT_OPTIONS);
  });
});
