import { 
    getInstanceProps,
    getComponentInfo 
} from "../src/userInterface/pagesParsing/createProps";
import {
    keys, some
} from "lodash/fp";
import { allComponents } from "./testData";



describe("getComponentInfo", () => {

    it("should return default props for root component", () => {
        const result = getComponentInfo(
            allComponents(), 
            "budibase-components/TextBox");

        expect(result.errors).toEqual([]);
        expect(result.fullProps).toEqual({
            _component: "budibase-components/TextBox",
            size: "",
            isPassword: false,
            placeholder: "",
            label:""
        });
    });

    it("should return no inherited for root component", () => {
        const result = getComponentInfo(
            allComponents(), 
            "budibase-components/TextBox");

        expect(result.inheritedProps).toEqual([]);
        
    });

    it("getInstanceProps should set supplied props on top of default props", () => {
        const result = getInstanceProps(
            getComponentInfo(
                allComponents(), 
                "budibase-components/TextBox"),
            {size:"small"});

        expect(result).toEqual({
            _component: "budibase-components/TextBox",
            size: "small",
            isPassword: false,
            placeholder: "",
            label:""
        });
        
    });

    it("should return correct props for derived component", () => {
        const result = getComponentInfo(
            allComponents(), 
            "common/SmallTextbox");

        expect(result.errors).toEqual([]);
        expect(result.fullProps).toEqual({
            _component: "common/SmallTextbox",
            size: "small",
            isPassword: false,
            placeholder: "",
            label:""
        });
    });

    it("should return correct props for twice derived component", () => {
        const result = getComponentInfo(
            allComponents(), 
            "common/PasswordBox");

        expect(result.errors).toEqual([]);
        expect(result.fullProps).toEqual({
            _component: "common/PasswordBox",
            size: "small",
            isPassword: true,
            placeholder: "",
            label:""
        });
    });

    it("should list inheirted props as those that are defined in ancestor, derived components", () => {
        const result = getComponentInfo(
            allComponents(), 
            "common/PasswordBox");

        // size is inherited from SmallTextbox
        expect(result.inheritedProps).toEqual(["size"]);
    });

    it("should list unset props as those that are only defined in root", () => {
        const result = getComponentInfo(
            allComponents(), 
            "common/PasswordBox");

        expect(result.unsetProps).toEqual([
            "placeholder", "label"]);
    });

})