mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-01-31 06:42:03 +00:00
177 lines
5.1 KiB
TypeScript
177 lines
5.1 KiB
TypeScript
/**
|
|
* Settings Marketing Content Toggle Tests
|
|
*
|
|
* Tests for the "Hide marketing content" setting in the Appearance section.
|
|
*/
|
|
|
|
import { test, expect } from "@playwright/test";
|
|
import * as fs from "fs";
|
|
|
|
import {
|
|
waitForNetworkIdle,
|
|
createTestGitRepo,
|
|
cleanupTempDir,
|
|
createTempDirPath,
|
|
setupProjectWithPathNoWorktrees,
|
|
navigateToSettings,
|
|
} from "./utils";
|
|
|
|
// Create unique temp dir for this test run
|
|
const TEST_TEMP_DIR = createTempDirPath("settings-marketing-tests");
|
|
|
|
interface TestRepo {
|
|
path: string;
|
|
cleanup: () => Promise<void>;
|
|
}
|
|
|
|
// Configure all tests to run serially
|
|
test.describe.configure({ mode: "serial" });
|
|
|
|
test.describe("Settings Marketing Content Tests", () => {
|
|
let testRepo: TestRepo;
|
|
|
|
test.beforeAll(async () => {
|
|
// Create test temp directory
|
|
if (!fs.existsSync(TEST_TEMP_DIR)) {
|
|
fs.mkdirSync(TEST_TEMP_DIR, { recursive: true });
|
|
}
|
|
});
|
|
|
|
test.beforeEach(async () => {
|
|
// Create a fresh test repo for each test
|
|
testRepo = await createTestGitRepo(TEST_TEMP_DIR);
|
|
});
|
|
|
|
test.afterEach(async () => {
|
|
// Cleanup test repo after each test
|
|
if (testRepo) {
|
|
await testRepo.cleanup();
|
|
}
|
|
});
|
|
|
|
test.afterAll(async () => {
|
|
// Cleanup temp directory
|
|
cleanupTempDir(TEST_TEMP_DIR);
|
|
});
|
|
|
|
test("should show course promo badge by default", async ({ page }) => {
|
|
// Setup project without worktrees for simpler testing
|
|
await setupProjectWithPathNoWorktrees(page, testRepo.path);
|
|
await page.goto("/");
|
|
await waitForNetworkIdle(page);
|
|
|
|
// Wait for sidebar to load
|
|
await expect(page.locator('[data-testid="sidebar"]')).toBeVisible({
|
|
timeout: 10000,
|
|
});
|
|
|
|
// Course promo badge should be visible by default
|
|
const promoBadge = page.locator('[data-testid="course-promo-badge"]');
|
|
await expect(promoBadge).toBeVisible({ timeout: 5000 });
|
|
});
|
|
|
|
test("should hide course promo badge when setting is enabled", async ({
|
|
page,
|
|
}) => {
|
|
// Setup project
|
|
await setupProjectWithPathNoWorktrees(page, testRepo.path);
|
|
await page.goto("/");
|
|
await waitForNetworkIdle(page);
|
|
|
|
// Navigate to settings
|
|
await navigateToSettings(page);
|
|
|
|
// Click on Appearance tab in settings navigation
|
|
const appearanceTab = page.getByRole("button", { name: /appearance/i });
|
|
await appearanceTab.click();
|
|
|
|
// Find and click the hide marketing content checkbox
|
|
const hideMarketingCheckbox = page.locator(
|
|
'[data-testid="hide-marketing-content-checkbox"]'
|
|
);
|
|
await expect(hideMarketingCheckbox).toBeVisible({ timeout: 5000 });
|
|
await hideMarketingCheckbox.click();
|
|
|
|
// Navigate back to board to see the sidebar
|
|
await page.goto("/board");
|
|
await waitForNetworkIdle(page);
|
|
|
|
// Course promo badge should now be hidden
|
|
const promoBadge = page.locator('[data-testid="course-promo-badge"]');
|
|
await expect(promoBadge).not.toBeVisible({ timeout: 5000 });
|
|
});
|
|
|
|
test("should persist hide marketing setting across page reloads", async ({
|
|
page,
|
|
}) => {
|
|
// Setup project
|
|
await setupProjectWithPathNoWorktrees(page, testRepo.path);
|
|
await page.goto("/");
|
|
await waitForNetworkIdle(page);
|
|
|
|
// Navigate to settings and enable hide marketing
|
|
await navigateToSettings(page);
|
|
|
|
const appearanceTab = page.getByRole("button", { name: /appearance/i });
|
|
await appearanceTab.click();
|
|
|
|
const hideMarketingCheckbox = page.locator(
|
|
'[data-testid="hide-marketing-content-checkbox"]'
|
|
);
|
|
await hideMarketingCheckbox.click();
|
|
|
|
// Reload the page
|
|
await page.reload();
|
|
await waitForNetworkIdle(page);
|
|
|
|
// Course promo badge should still be hidden after reload
|
|
const promoBadge = page.locator('[data-testid="course-promo-badge"]');
|
|
await expect(promoBadge).not.toBeVisible({ timeout: 5000 });
|
|
});
|
|
|
|
test("should show course promo badge again when setting is disabled", async ({
|
|
page,
|
|
}) => {
|
|
// Setup project with hide marketing already enabled via localStorage
|
|
await page.addInitScript(() => {
|
|
const state = {
|
|
state: {
|
|
hideMarketingContent: true,
|
|
projects: [],
|
|
currentProject: null,
|
|
theme: "dark",
|
|
sidebarOpen: true,
|
|
},
|
|
version: 2,
|
|
};
|
|
localStorage.setItem("automaker-storage", JSON.stringify(state));
|
|
});
|
|
|
|
await setupProjectWithPathNoWorktrees(page, testRepo.path);
|
|
await page.goto("/");
|
|
await waitForNetworkIdle(page);
|
|
|
|
// Verify promo is hidden initially
|
|
const promoBadge = page.locator('[data-testid="course-promo-badge"]');
|
|
await expect(promoBadge).not.toBeVisible({ timeout: 5000 });
|
|
|
|
// Navigate to settings and disable hide marketing
|
|
await navigateToSettings(page);
|
|
|
|
const appearanceTab = page.getByRole("button", { name: /appearance/i });
|
|
await appearanceTab.click();
|
|
|
|
const hideMarketingCheckbox = page.locator(
|
|
'[data-testid="hide-marketing-content-checkbox"]'
|
|
);
|
|
await hideMarketingCheckbox.click(); // Uncheck
|
|
|
|
// Navigate back to board
|
|
await page.goto("/board");
|
|
await waitForNetworkIdle(page);
|
|
|
|
// Course promo badge should now be visible again
|
|
await expect(promoBadge).toBeVisible({ timeout: 5000 });
|
|
});
|
|
});
|