Auto-updater: - updater.ts: GitHub Releases API check, semver comparison, timestamp tracking - AdvancedSettings wired to real updater.check/getVersion RPC E2E testing (45 tests): - wdio.conf.js: WebDriverIO config for Electrobun (port 9761) - fixtures.ts: isolated temp dirs, demo data, git repo init - 4 spec files: smoke (13), settings (13), terminal (10), agent (9) Splash screen: - SplashScreen.svelte: animated gradient AGOR logo, version, loading dots - App.svelte: shows splash until all init promises resolve, 300ms fade-out
134 lines
4.1 KiB
TypeScript
134 lines
4.1 KiB
TypeScript
/**
|
|
* Settings panel tests — drawer opens, categories visible, controls work.
|
|
*/
|
|
|
|
describe("Settings panel", () => {
|
|
it("should open on gear icon click", async () => {
|
|
const gear = await $(".sidebar-icon");
|
|
await gear.click();
|
|
|
|
const drawer = await $(".settings-drawer");
|
|
await drawer.waitForDisplayed({ timeout: 5_000 });
|
|
expect(await drawer.isDisplayed()).toBe(true);
|
|
});
|
|
|
|
it("should show settings category tabs", async () => {
|
|
const tabs = await $$(".settings-tab");
|
|
// Expect at least 4 categories (Appearance, Projects, Agent, Advanced, etc.)
|
|
expect(tabs.length).toBeGreaterThanOrEqual(4);
|
|
});
|
|
|
|
it("should show 8 settings categories", async () => {
|
|
const tabs = await $$(".settings-tab");
|
|
expect(tabs.length).toBe(8);
|
|
});
|
|
|
|
it("should highlight the active category", async () => {
|
|
const activeTabs = await $$(".settings-tab.active");
|
|
expect(activeTabs.length).toBe(1);
|
|
});
|
|
|
|
it("should switch categories on tab click", async () => {
|
|
const tabs = await $$(".settings-tab");
|
|
if (tabs.length >= 2) {
|
|
const secondTab = tabs[1];
|
|
await secondTab.click();
|
|
await browser.pause(300);
|
|
expect(await secondTab.getAttribute("class")).toContain("active");
|
|
}
|
|
});
|
|
|
|
it("should show theme dropdown in Appearance category", async () => {
|
|
// Click Appearance tab (usually first)
|
|
const tabs = await $$(".settings-tab");
|
|
if (tabs.length > 0) {
|
|
await tabs[0].click();
|
|
await browser.pause(300);
|
|
}
|
|
|
|
const themeSection = await $(".theme-section");
|
|
if (await themeSection.isExisting()) {
|
|
expect(await themeSection.isDisplayed()).toBe(true);
|
|
}
|
|
});
|
|
|
|
it("should show font size stepper", async () => {
|
|
const stepper = await $(".font-stepper");
|
|
if (await stepper.isExisting()) {
|
|
expect(await stepper.isDisplayed()).toBe(true);
|
|
}
|
|
});
|
|
|
|
it("should show font family dropdown", async () => {
|
|
const fontDropdown = await $(".font-dropdown");
|
|
if (await fontDropdown.isExisting()) {
|
|
expect(await fontDropdown.isDisplayed()).toBe(true);
|
|
}
|
|
});
|
|
|
|
it("should increment font size on stepper click", async () => {
|
|
const plusBtn = await $(".font-stepper .step-up");
|
|
if (await plusBtn.isExisting()) {
|
|
const sizeDisplay = await $(".font-stepper .size-value");
|
|
const before = await sizeDisplay.getText();
|
|
await plusBtn.click();
|
|
await browser.pause(200);
|
|
const after = await sizeDisplay.getText();
|
|
// Size should change (we don't assert direction, just that it reacted)
|
|
expect(after).toBeDefined();
|
|
}
|
|
});
|
|
|
|
it("should show updates section in Advanced tab", async () => {
|
|
// Navigate to Advanced settings tab
|
|
const tabs = await $$(".settings-tab");
|
|
const advancedTab = tabs.find(async (t) => {
|
|
const text = await t.getText();
|
|
return text.toLowerCase().includes("advanced");
|
|
});
|
|
|
|
if (advancedTab) {
|
|
await advancedTab.click();
|
|
await browser.pause(300);
|
|
}
|
|
|
|
const updateRow = await $(".update-row");
|
|
if (await updateRow.isExisting()) {
|
|
expect(await updateRow.isDisplayed()).toBe(true);
|
|
}
|
|
});
|
|
|
|
it("should show version label", async () => {
|
|
const versionLabel = await $(".version-label");
|
|
if (await versionLabel.isExisting()) {
|
|
const text = await versionLabel.getText();
|
|
expect(text).toMatch(/^v/);
|
|
}
|
|
});
|
|
|
|
it("should close on close button click", async () => {
|
|
const closeBtn = await $(".settings-close");
|
|
if (await closeBtn.isExisting()) {
|
|
await closeBtn.click();
|
|
await browser.pause(300);
|
|
const drawer = await $(".settings-drawer");
|
|
const isVisible = await drawer.isDisplayed();
|
|
expect(isVisible).toBe(false);
|
|
}
|
|
});
|
|
|
|
it("should close on Escape key", async () => {
|
|
// Reopen settings first
|
|
const gear = await $(".sidebar-icon");
|
|
await gear.click();
|
|
await browser.pause(300);
|
|
|
|
await browser.keys("Escape");
|
|
await browser.pause(300);
|
|
|
|
const drawer = await $(".settings-drawer");
|
|
if (await drawer.isExisting()) {
|
|
expect(await drawer.isDisplayed()).toBe(false);
|
|
}
|
|
});
|
|
});
|