import { insertButtonsBetweenLabelContainers } from "..";

describe("insertButtonsBetweenLabels - depthlevel 1", () => {
  const buttons = "buttons";

  const labels1 = [
    { name: "label_1" },
    { name: "label_2" },
    { name: "label_3" },
  ];

  const labels2 = [
    { name: "label_4" },
    { name: "label_5" },
    { name: "label_6" },
  ];

  const labels = [
    {
      elements: [{ elements: labels1 }],
    },
    {
      elements: [{ elements: labels2 }],
    },
  ];

  it("put buttons on top", () => {
    const configuration = {
      tv_buttons_container_position: "on_top",
    };

    const result = insertButtonsBetweenLabelContainers(
      configuration,
      buttons,
      labels
    );

    expect(result).toEqual([
      {
        elements: [buttons, { elements: labels1 }],
      },
      {
        elements: [{ elements: labels2 }],
      },
    ]);
  });

  it("put buttons on bottom", () => {
    const configuration = {
      tv_buttons_container_position: "unknown_position",
    };

    const result = insertButtonsBetweenLabelContainers(
      configuration,
      buttons,
      labels
    );

    expect(result).toEqual([
      {
        elements: [{ elements: labels1 }],
      },
      {
        elements: [{ elements: labels2 }, buttons],
      },
    ]);
  });

  it("put underneath label_1", () => {
    const configuration = {
      tv_buttons_container_position: "label_1",
    };

    const result = insertButtonsBetweenLabelContainers(
      configuration,
      buttons,
      labels
    );

    expect(result).toEqual([
      {
        elements: [{ elements: [labels1[0], buttons, labels1[1], labels1[2]] }],
      },
      {
        elements: [{ elements: labels2 }],
      },
    ]);
  });

  it("put underneath label_2", () => {
    const configuration = {
      tv_buttons_container_position: "label_2",
    };

    const result = insertButtonsBetweenLabelContainers(
      configuration,
      buttons,
      labels
    );

    expect(result).toEqual([
      {
        elements: [{ elements: [labels1[0], labels1[1], buttons, labels1[2]] }],
      },
      {
        elements: [{ elements: labels2 }],
      },
    ]);
  });

  it("put underneath label_3", () => {
    const configuration = {
      tv_buttons_container_position: "label_3",
    };

    const result = insertButtonsBetweenLabelContainers(
      configuration,
      buttons,
      labels
    );

    expect(result).toEqual([
      {
        elements: [{ elements: [labels1[0], labels1[1], labels1[2], buttons] }],
      },
      {
        elements: [{ elements: labels2 }],
      },
    ]);
  });

  it("put underneath label_4", () => {
    const configuration = {
      tv_buttons_container_position: "label_4",
    };

    const result = insertButtonsBetweenLabelContainers(
      configuration,
      buttons,
      labels
    );

    expect(result).toEqual([
      {
        elements: [{ elements: labels1 }],
      },
      {
        elements: [{ elements: [labels2[0], buttons, labels2[1], labels2[2]] }],
      },
    ]);
  });

  it("put underneath all", () => {
    const configuration = {
      tv_buttons_container_position: "label_X",
    };

    const result = insertButtonsBetweenLabelContainers(
      configuration,
      buttons,
      labels
    );

    expect(result).toEqual([
      {
        elements: [{ elements: labels1 }],
      },
      {
        elements: [{ elements: labels2 }, buttons],
      },
    ]);
  });

  it("put nothing if buttons are nil", () => {
    const configuration = {
      tv_buttons_container_position: "label_X",
    };

    const result = insertButtonsBetweenLabelContainers(
      configuration,
      null,
      labels
    );

    expect(result).toEqual(labels);
  });
});
