import { It } from "../test-utils";
import "./join";
import "./async";

It(
  "Performs a basic join",
  (s) =>
    s
      .join(
        [
          { name: "Test Pet 1", owner: "Test1" },
          { name: "Test Pet 2", owner: "Test2" },
          { name: "Test Pet 3", owner: "Paul Popat" },
          { name: "Test Pet 4", owner: "Test1" },
          { name: "Test Pet 5", owner: "Test2" },
          { name: "Test Pet 6", owner: "Paul Popat" },
          { name: "Test Pet 7", owner: "Test1" },
        ].geninq(),
        (i) => i.name,
        (i) => i.owner,
        (owner, pet) => ({
          name: pet.name,
          owner: owner.name,
          type: owner.type,
        })
      )
      .array(),
  [
    { owner: "Test1", type: 2, name: "Test Pet 1" },
    { owner: "Test1", type: 2, name: "Test Pet 4" },
    { owner: "Test1", type: 2, name: "Test Pet 7" },
    { owner: "Test2", type: 1, name: "Test Pet 2" },
    { owner: "Test2", type: 1, name: "Test Pet 5" },
    { owner: "Paul Popat", type: 2, name: "Test Pet 3" },
    { owner: "Paul Popat", type: 2, name: "Test Pet 6" },
  ],
  [
    { name: "Test1", type: 2 },
    { name: "Test2", type: 1 },
    { name: "Paul Popat", type: 2 },
  ]
);

It(
  "Performs a basic join on an array",
  (s) =>
    s
      .join(
        [
          { name: "Test Pet 1", owner: "Test1" },
          { name: "Test Pet 2", owner: "Test2" },
          { name: "Test Pet 3", owner: "Paul Popat" },
          { name: "Test Pet 4", owner: "Test1" },
          { name: "Test Pet 5", owner: "Test2" },
          { name: "Test Pet 6", owner: "Paul Popat" },
          { name: "Test Pet 7", owner: "Test1" },
        ],
        (i) => i.name,
        (i) => i.owner,
        (owner, pet) => ({
          name: pet.name,
          owner: owner.name,
          type: owner.type,
        })
      )
      .array(),
  [
    { owner: "Test1", type: 2, name: "Test Pet 1" },
    { owner: "Test1", type: 2, name: "Test Pet 4" },
    { owner: "Test1", type: 2, name: "Test Pet 7" },
    { owner: "Test2", type: 1, name: "Test Pet 2" },
    { owner: "Test2", type: 1, name: "Test Pet 5" },
    { owner: "Paul Popat", type: 2, name: "Test Pet 3" },
    { owner: "Paul Popat", type: 2, name: "Test Pet 6" },
  ],
  [
    { name: "Test1", type: 2 },
    { name: "Test2", type: 1 },
    { name: "Paul Popat", type: 2 },
  ]
);
