webamp/packages/skin-database/data/__tests__/skins.test.ts
2022-12-31 16:21:16 -08:00

255 lines
7.4 KiB
TypeScript

import { knex } from "../../db";
import * as Skins from "../skins";
import TweetModel from "../TweetModel";
import UserContext from "../UserContext";
beforeEach(async () => {
await knex.migrate.latest();
});
test("empty", async () => {
expect(await Skins.getAllClassicSkins()).toEqual([]);
expect(await Skins.getClassicSkinCount()).toBe(0);
expect(await Skins.getTweetableSkinCount()).toBe(0);
expect(await Skins.getAllClassicScreenshotUrls()).toEqual([]);
expect(await Skins.getMuseumPage({ offset: 0, first: 10 })).toEqual([]);
expect(await Skins.getStats()).toEqual({
approved: 0,
rejected: 0,
nsfw: 0,
tweeted: 0,
tweetable: 0,
webUploads: 0,
uploadsAwaitingProcessing: 0,
uploadsErrored: 0,
});
expect(await Skins.getSkinToTweet()).toBe(null);
expect(Skins.getSkinToReview()).rejects.toThrow(
"Could not find any skins to review"
);
expect(await Skins.getReportedUpload()).toBe(null);
expect(await Skins.getSkinsToShoot(1000)).toEqual([]);
expect(await Skins.getUploadStatuses([])).toEqual({});
});
describe("seeded", () => {
beforeEach(async () => {
await knex.seed.run();
});
test("getAllClassicSkins", async () => {
expect(await Skins.getAllClassicSkins()).toMatchInlineSnapshot(`
Array [
Object {
"fileName": "Zelda_Amp_3.wsz",
"md5": "48bbdbbeb03d347e59b1eebda4d352d0",
},
Object {
"fileName": "path.wsz",
"md5": "a_fake_md5",
},
Object {
"fileName": "nsfw.wsz",
"md5": "a_nsfw_md5",
},
Object {
"fileName": "rejected.wsz",
"md5": "a_rejected_md5",
},
Object {
"fileName": "tweeted.wsz",
"md5": "a_tweeted_md5",
},
Object {
"fileName": "approved.wsz",
"md5": "an_approved_md5",
},
]
`);
});
test("getClassicSkinCount", async () => {
expect(await Skins.getClassicSkinCount()).toBe(6);
});
test("getTweetableSkinCount", async () => {
expect(await Skins.getTweetableSkinCount()).toBe(1);
});
test("getAllClassicScreenshotUrls", async () => {
expect(await Skins.getAllClassicScreenshotUrls()).toMatchInlineSnapshot(`
Array [
Object {
"fileName": "Zelda_Amp_3.wsz",
"md5": "48bbdbbeb03d347e59b1eebda4d352d0",
"nsfw": false,
"url": "https://r2.webampskins.org/screenshots/48bbdbbeb03d347e59b1eebda4d352d0.png",
},
Object {
"fileName": "path.wsz",
"md5": "a_fake_md5",
"nsfw": false,
"url": "https://r2.webampskins.org/screenshots/a_fake_md5.png",
},
Object {
"fileName": "nsfw.wsz",
"md5": "a_nsfw_md5",
"nsfw": true,
"url": "https://r2.webampskins.org/screenshots/a_nsfw_md5.png",
},
Object {
"fileName": "rejected.wsz",
"md5": "a_rejected_md5",
"nsfw": false,
"url": "https://r2.webampskins.org/screenshots/a_rejected_md5.png",
},
Object {
"fileName": "tweeted.wsz",
"md5": "a_tweeted_md5",
"nsfw": false,
"url": "https://r2.webampskins.org/screenshots/a_tweeted_md5.png",
},
Object {
"fileName": "approved.wsz",
"md5": "an_approved_md5",
"nsfw": false,
"url": "https://r2.webampskins.org/screenshots/an_approved_md5.png",
},
]
`);
});
test("getMuseumPage", async () => {
expect(await Skins.getMuseumPage({ offset: 0, first: 10 }))
.toMatchInlineSnapshot(`
Array [
Object {
"fileName": "tweeted.wsz",
"md5": "a_tweeted_md5",
"nsfw": false,
},
Object {
"fileName": "Zelda_Amp_3.wsz",
"md5": "48bbdbbeb03d347e59b1eebda4d352d0",
"nsfw": false,
},
Object {
"fileName": "path.wsz",
"md5": "a_fake_md5",
"nsfw": false,
},
Object {
"fileName": "approved.wsz",
"md5": "an_approved_md5",
"nsfw": false,
},
Object {
"fileName": "rejected.wsz",
"md5": "a_rejected_md5",
"nsfw": false,
},
Object {
"fileName": "nsfw.wsz",
"md5": "a_nsfw_md5",
"nsfw": true,
},
]
`);
});
test("getMuseumPage does not include skins with errors", async () => {
await knex("refreshes").insert({
skin_md5: "48bbdbbeb03d347e59b1eebda4d352d0",
error: "Whoops",
});
await Skins.computeMuseumOrder();
const page = await Skins.getMuseumPage({ offset: 0, first: 10 });
const hasZelda = page.some(
(skin) => skin.md5 === "48bbdbbeb03d347e59b1eebda4d352d0"
);
expect(hasZelda).toBe(false);
});
test("getStats", async () => {
expect(await Skins.getStats()).toMatchInlineSnapshot(`
Object {
"approved": 2,
"nsfw": 1,
"rejected": 1,
"tweetable": 1,
"tweeted": 1,
"uploadsAwaitingProcessing": 0,
"uploadsErrored": 0,
"webUploads": 0,
}
`);
});
test("getSkinToTweet", async () => {
expect(await Skins.getSkinToTweet()).toEqual({
canonicalFilename: "approved.wsz",
md5: "an_approved_md5",
});
});
test("getSkinToTweet does not include skins with errors", async () => {
await knex("refreshes").insert({
skin_md5: "an_approved_md5",
error: "Whoops",
});
expect(await Skins.getSkinToTweet()).toBe(null);
});
test("getSkinToReview", async () => {
expect(Skins.getSkinToReview()).resolves.toEqual({
filename: expect.any(String),
md5: expect.any(String),
});
});
test("getReportedUpload", async () => {
expect(await Skins.getReportedUpload()).toBe(null);
});
test("getSkinsToShoot", async () => {
expect(await Skins.getSkinsToShoot(1)).toEqual([
"48bbdbbeb03d347e59b1eebda4d352d0",
]);
});
test("getUploadStatuses", async () => {
expect(await Skins.getUploadStatuses([])).toEqual({});
});
describe("setTweetInfo", () => {
test("update", async () => {
const ctx = new UserContext();
const md5 = "a_tweeted_md5";
const likes = 420;
const retweets = 69;
const tweetId = "1333893671326871552";
expect(await Skins.setTweetInfo(md5, likes, retweets, tweetId)).toBe(
true
);
const tweet = await TweetModel.fromTweetId(ctx, "1333893671326871552");
expect(tweet?.getLikes()).toBe(420);
expect(tweet?.getRetweets()).toBe(69);
});
test("insert", async () => {
const ctx = new UserContext();
const md5 = "a_fake_md5";
const likes = 1;
const retweets = 2;
const tweetId = "12345";
expect(await Skins.setTweetInfo(md5, likes, retweets, tweetId)).toBe(
true
);
const tweet = await TweetModel.fromTweetId(ctx, "12345");
expect(tweet?.getLikes()).toBe(1);
expect(tweet?.getRetweets()).toBe(2);
});
test("insert without an md5 returns false and does not write", async () => {
const ctx = new UserContext();
const md5 = null;
const likes = 1;
const retweets = 2;
const tweetId = "12345";
expect(await Skins.setTweetInfo(md5, likes, retweets, tweetId)).toBe(
false
);
const tweet = await TweetModel.fromTweetId(ctx, "12345");
expect(tweet).toBe(null);
});
});
});