import { getExactComponent } from "../src/userInterface/pagesParsing/searchComponents"
import { rename } from "../src/userInterface/pagesParsing/renameScreen"
import { componentsAndScreens } from "./testData"

describe("rename component", () => {
  it("should change the name of the component, duh", () => {
    const { screens } = componentsAndScreens()

    const result = rename({}, screens, "PrimaryButton", "MainButton")

    const newComponent = getExactComponent(result.screens, "MainButton")
    const oldComponent = getExactComponent(result.screens, "Primary")
    expect(oldComponent).toBeUndefined()
    expect(newComponent).toBeDefined()
    expect(newComponent.name).toBe("MainButton")
  })

  /* this may be usefull if we have user defined components
    it("should change name of nested _components", () => {
        const {screens} = componentsAndScreens();
        const result = rename({}, screens, "PrimaryButton", "MainButton");

        const buttonGroup = getExactComponent(result.screens, "ButtonGroup");
        expect(buttonGroup.props.header[0]._component).toBe("MainButton");

    });
    */

  it("should change name of page appBody", () => {
    const { screens } = componentsAndScreens()
    const pages = {
      main: {
        appBody: "PrimaryButton",
      },
    }

    const result = rename(pages, screens, "PrimaryButton", "MainButton")
    expect(result.pages.main.appBody).toBe("MainButton")
  })

  /* this may be usefull if we have user defined components
    it("should return a list of changed components", () => {
        const {screens} = componentsAndScreens();
        const result = rename({}, screens, "PrimaryButton", "MainButton");

        expect(result.changedScreens).toEqual(["ButtonGroup"]);

        const result2 = rename({}, screens, "common/SmallTextbox", "common/TinyTextBox");
        expect(result2.changedScreens).toEqual(["Field"]);

    });
    */
})