+12








fcd7c979df
Co-authored-by: Artur <145776561+arturict@users.noreply.github.com> Co-authored-by: arturict <arturict@users.noreply.github.com> Co-authored-by: Thomas <thomas@ajnart.fr> Co-authored-by: Afonso Jorge Ramos <afonsojorgeramos@gmail.com> Co-authored-by: Danura30082 <danura30082+github@gmail.com> Co-authored-by: Kushie <122986913+kushiemoon-dev@users.noreply.github.com> Co-authored-by: ajnart <thomas@ajnart.fr> Co-authored-by: ajnart <thomas@ajnart.dev> Co-authored-by: chenjun <chenjun@foxmail.com> Co-authored-by: Wikibear <wikibear@users.noreply.github.com> Co-authored-by: Bergasha <bergasha@gmail.com> Co-authored-by: leafyelin <43306196+leafyelin@users.noreply.github.com> Co-authored-by: Lucas Araujo <lucas.lra@gmail.com> Co-authored-by: GreenMonito <86085570+GreenMonito@users.noreply.github.com> Co-authored-by: Nerdy-Technician <roffo@nerdy-technician.social> Co-authored-by: Jun <34545896+jcstrong@users.noreply.github.com> Co-authored-by: Edmond Abraham <54119952+gitedmond@users.noreply.github.com> Co-authored-by: thrawnx <tight.bulb9384@fastmail.com> Co-authored-by: Chris <58918656+nordada@users.noreply.github.com> Co-authored-by: yi111 <153097222+Yi-111-a@users.noreply.github.com> Co-authored-by: Yanis <naamaneyanis@gmail.com> Co-authored-by: Wikibear <me@sej.de> Co-authored-by: alessiottavo <93441886+alessiottavo@users.noreply.github.com>
66 lines
2.9 KiB
TypeScript
66 lines
2.9 KiB
TypeScript
import { parse } from "superjson";
|
|
import { expect } from "vitest";
|
|
|
|
import { BUNDLED_CUSTOM_WIDGETS, customWidgetDefinitionSchema } from "@homarr/custom-widgets/core";
|
|
|
|
import type { Database } from "..";
|
|
import { eq } from "..";
|
|
import { seedDataAsync } from "../migrations/seed";
|
|
import { customWidgetDefinitions, customWidgetSecrets } from "../schema";
|
|
|
|
const expectedSeedIds = BUNDLED_CUSTOM_WIDGETS.map(({ id }) => id).toSorted();
|
|
|
|
const reconstructWidget = (definition: typeof customWidgetDefinitions.$inferSelect) =>
|
|
customWidgetDefinitionSchema.parse({
|
|
$schema: "homarr-custom-widget-v2",
|
|
name: definition.name,
|
|
...(definition.description === null ? {} : { description: definition.description }),
|
|
...(definition.iconUrl === null ? {} : { iconUrl: definition.iconUrl }),
|
|
sources: parse(definition.sources),
|
|
requests: parse(definition.requests),
|
|
options: parse(definition.options),
|
|
template: definition.template,
|
|
});
|
|
|
|
export const expectBundledCustomWidgetsSeeded = async (db: Database) => {
|
|
const definitions = await db.query.customWidgetDefinitions.findMany({
|
|
where: (table, { like }) => like(table.id, "seed-%"),
|
|
});
|
|
|
|
expect(definitions.map(({ id }) => id).toSorted()).toEqual(expectedSeedIds);
|
|
expect(definitions.every(({ enabled }) => !enabled)).toBe(true);
|
|
expect(definitions.every(({ creatorId }) => creatorId === null)).toBe(true);
|
|
expect(await db.$count(customWidgetSecrets)).toBe(0);
|
|
|
|
for (const definition of definitions) {
|
|
const expected = BUNDLED_CUSTOM_WIDGETS.find(({ id }) => id === definition.id);
|
|
expect(expected).toBeDefined();
|
|
expect(reconstructWidget(definition)).toEqual(customWidgetDefinitionSchema.parse(expected?.widget));
|
|
}
|
|
|
|
await db
|
|
.update(customWidgetDefinitions)
|
|
.set({ name: "User-edited dog facts", enabled: true })
|
|
.where(eq(customWidgetDefinitions.id, "seed-dog-facts"));
|
|
await db.delete(customWidgetDefinitions).where(eq(customWidgetDefinitions.id, "seed-currency-exchange"));
|
|
|
|
await seedDataAsync(db);
|
|
|
|
const reseededDefinitions = await db.query.customWidgetDefinitions.findMany({
|
|
where: (table, { like }) => like(table.id, "seed-%"),
|
|
});
|
|
const editedDefinition = reseededDefinitions.find(({ id }) => id === "seed-dog-facts");
|
|
const reseededCurrency = reseededDefinitions.find(({ id }) => id === "seed-currency-exchange");
|
|
|
|
expect(reseededDefinitions.map(({ id }) => id).toSorted()).toEqual(expectedSeedIds);
|
|
expect(editedDefinition).toMatchObject({ name: "User-edited dog facts", enabled: true, creatorId: null });
|
|
expect(reseededDefinitions.filter(({ id }) => id !== "seed-dog-facts").every(({ enabled }) => !enabled)).toBe(true);
|
|
if (!reseededCurrency) throw new Error("Currency Exchange seed was not restored");
|
|
expect(reconstructWidget(reseededCurrency)).toEqual(
|
|
customWidgetDefinitionSchema.parse(
|
|
BUNDLED_CUSTOM_WIDGETS.find(({ id }) => id === "seed-currency-exchange")?.widget,
|
|
),
|
|
);
|
|
expect(await db.$count(customWidgetSecrets)).toBe(0);
|
|
};
|