import { findParent } from "../ZappPipesEntryContext";

describe("findParent", () => {
  it("returns null when calling from a root screen", () => {
    const route = "/river/A1234";

    const result = findParent({}, route);
    expect(result).toEqual(null);
  });

  it("returns the parent of a connected screen", () => {
    const route = "/river/A1234/river/B5678";

    const homeRiverEntry = {
      data: { id: "entry_id_1" },
      route: "/river/A1234",
      id: "A1234",
    };

    const context = {
      "/river/A1234": homeRiverEntry,
    };

    const result = findParent(context, route);

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

  it("returns the correct parent when the previous screen is a screen picker", () => {
    const route = "/river/A1234/river/B5678/yarn";

    const homeRiverEntry = {
      data: { id: "entry_id_1" },
      route: "/river/A1234",
      id: "A1234",
    };

    const pickerEntry = {
      data: { id: "picker_entry_1", parent: homeRiverEntry.data },
      route: "/river/A1234/river/B5678",
      id: "B5678",
      parentId: homeRiverEntry.id,
    };

    const pickerContainerEntry = {
      data: { id: "picker_container_entry_1", parent: pickerEntry.data },
      route: "/river/A1234/river/B5678/picker/ABC",
      id: "picker_ABC",
      parentId: pickerEntry.id,
    };

    const context = {
      [homeRiverEntry.route]: homeRiverEntry,
      [pickerEntry.route]: pickerEntry,
      [pickerContainerEntry.route]: pickerContainerEntry,
    };

    const result = findParent(context, route, true);

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

  it("returns the correct parent when coming back from a previous screen", () => {
    const route = "/river/A1234/river/B5678";

    const homeRiverEntry = {
      data: { id: "show_1" },
      route: "/river/A1234",
      id: "A1234",
    };

    const show = {
      data: { id: "episode_1", parent: homeRiverEntry.data },
      route: "/river/A1234/river/B5678",
      id: "B5678",
      parentId: homeRiverEntry.id,
    };

    const context = {
      [homeRiverEntry.route]: homeRiverEntry,
      [show.route]: show,
    };

    const result = findParent(context, route, false);

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