import { knex } from "../../db";
import SkinModel from "../SkinModel";
import UserContext from "../UserContext";

beforeEach(async () => {
  await knex.migrate.latest();
  await knex.seed.run();
});

afterAll(async () => {
  await knex.destroy();
});

test("fromMd5", async () => {
  const ctx = new UserContext();
  const skin = await SkinModel.fromMd5(ctx, "a_fake_md5");
  expect(skin?.getMd5()).toBe("a_fake_md5");
});

describe("fromAnything", () => {
  test("md5", async () => {
    const ctx = new UserContext();
    const skin = await SkinModel.fromAnything(
      ctx,
      "48bbdbbeb03d347e59b1eebda4d352d0"
    );
    expect(skin?.getMd5()).toBe("48bbdbbeb03d347e59b1eebda4d352d0");
  });
  test("Skin Museuem URL", async () => {
    const ctx = new UserContext();
    const skin = await SkinModel.fromAnything(
      ctx,
      "https://skins.webamp.org/skin/48bbdbbeb03d347e59b1eebda4d352d0/MountainDew.wsz/"
    );
    expect(skin?.getMd5()).toBe("48bbdbbeb03d347e59b1eebda4d352d0");
  });
  test("Webamp URL", async () => {
    const ctx = new UserContext();
    const skin = await SkinModel.fromAnything(
      ctx,
      "https://webamp.org/?skinUrl=https://cdn.webampskins.org/skins/48bbdbbeb03d347e59b1eebda4d352d0.wsz"
    );
    expect(skin?.getMd5()).toBe("48bbdbbeb03d347e59b1eebda4d352d0");
  });
  test("Internet Archive Item identifier", async () => {
    const ctx = new UserContext();
    const skin = await SkinModel.fromAnything(ctx, "a_fake_ia_identifier");
    expect(skin?.getMd5()).toBe("a_fake_md5");
  });
  test("Internet Archive Item identifier", async () => {
    const ctx = new UserContext();
    const skin = await SkinModel.fromAnything(
      ctx,
      "https://archive.org/details/a_fake_ia_identifier"
    );
    expect(skin?.getMd5()).toBe("a_fake_md5");
  });
  test("Tweet URL", async () => {
    const ctx = new UserContext();
    const skin = await SkinModel.fromAnything(
      ctx,
      "https://twitter.com/winampskins/status/1333893671326871552"
    );
    expect(skin?.getMd5()).toBe("a_tweeted_md5");
  });
});
