+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>
73 lines
3.1 KiB
TypeScript
73 lines
3.1 KiB
TypeScript
import { chromium, expect } from "@playwright/test";
|
|
import { describe, test } from "vitest";
|
|
|
|
import { createHomarrContainer } from "./shared/create-homarr-container";
|
|
import { createSqliteDbFileAsync } from "./shared/e2e-db";
|
|
import { loginAsync } from "./shared/login";
|
|
import { seedAdminUserAsync } from "./shared/seed-admin-user";
|
|
import * as sqliteSchema from "../packages/db/schema/sqlite";
|
|
|
|
const adminCredentials = {
|
|
username: "admin",
|
|
password: "Comp(exP4sswOrd",
|
|
};
|
|
|
|
describe("Assistant management", () => {
|
|
test("keeps provider actions clear and responsive", async () => {
|
|
const { db, localMountPath } = await createSqliteDbFileAsync();
|
|
await seedAdminUserAsync(db, adminCredentials);
|
|
await db.insert(sqliteSchema.assistantConfigurations).values({
|
|
id: "default",
|
|
enabled: true,
|
|
provider: "openrouter",
|
|
baseUrl: "https://openrouter.ai/api/v1",
|
|
modelDiscoveryPath: null,
|
|
encryptedApiKey: "encrypted.key",
|
|
modelId: "deepseek/deepseek-v4-flash",
|
|
});
|
|
|
|
const homarrContainer = await createHomarrContainer({
|
|
environment: {
|
|
AUTH_PROVIDERS: "credentials",
|
|
},
|
|
mounts: {
|
|
"/appdata": localMountPath,
|
|
},
|
|
}).start();
|
|
|
|
const baseUrl = `http://${homarrContainer.getHost()}:${homarrContainer.getMappedPort(7575)}`;
|
|
const browser = await chromium.launch();
|
|
const context = await browser.newContext({ viewport: { width: 1440, height: 1000 } });
|
|
const page = await context.newPage();
|
|
|
|
try {
|
|
await loginAsync({ page, baseUrl, credentials: adminCredentials, destination: "/manage/assistant" });
|
|
await expect(page.getByRole("heading", { name: "Assistant" })).toBeVisible();
|
|
await expect(page.getByText("Connection ready")).toBeVisible();
|
|
await expect(page.getByText("Encrypted API key saved")).toBeVisible();
|
|
await expect(page.getByRole("button", { name: "Remove saved API key" })).toBeVisible();
|
|
await page.getByRole("button", { name: "Additional request headers" }).click();
|
|
await expect(page.getByRole("button", { name: "Add header" })).toBeVisible();
|
|
|
|
await page.getByRole("button", { name: "Remove saved API key" }).click();
|
|
await expect(page.getByText("Remove the saved API key?")).toBeVisible();
|
|
await expect(page.getByRole("button", { name: "Remove API key" })).toBeVisible();
|
|
await page.getByRole("button", { name: "Keep saved key" }).click();
|
|
await expect(page.getByText("Remove the saved API key?")).toBeHidden();
|
|
|
|
await page.setViewportSize({ width: 390, height: 844 });
|
|
await page.reload();
|
|
await expect(page.getByRole("heading", { name: "Assistant" })).toBeVisible();
|
|
await expect(page.getByRole("button", { name: "Remove saved API key" })).toBeVisible();
|
|
await expect(page.getByRole("button", { name: "Save assistant" })).toBeVisible();
|
|
const hasHorizontalOverflow = await page.evaluate(
|
|
() => document.documentElement.scrollWidth > document.documentElement.clientWidth,
|
|
);
|
|
expect(hasHorizontalOverflow).toBe(false);
|
|
} finally {
|
|
await browser.close();
|
|
await homarrContainer.stop();
|
|
}
|
|
}, 120_000);
|
|
});
|