mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-07-17 16:37:43 +00:00
WebDAV and SuperSync E2E tests require dedicated server infrastructure and should only run in the scheduled E2E workflow or manually. This prevents build failures when the required servers are not available. - Added @webdav tag to all WebDAV test files for consistent filtering - Updated build.yml to exclude @webdav and @supersync tagged tests
101 lines
3.3 KiB
TypeScript
101 lines
3.3 KiB
TypeScript
import { test, expect } from '../../fixtures/webdav.fixture';
|
|
import { SyncPage } from '../../pages/sync.page';
|
|
import { WorkViewPage } from '../../pages/work-view.page';
|
|
import {
|
|
WEBDAV_CONFIG_TEMPLATE,
|
|
createUniqueSyncFolder,
|
|
createWebDavFolder,
|
|
setupClient,
|
|
waitForSync,
|
|
} from '../../utils/sync-helpers';
|
|
|
|
test.describe('@webdav WebDAV Sync Task Order', () => {
|
|
// Run sync tests serially to avoid WebDAV server contention
|
|
test.describe.configure({ mode: 'serial' });
|
|
|
|
test('should preserve task order after sync', async ({ browser, baseURL, request }) => {
|
|
test.slow();
|
|
const SYNC_FOLDER_NAME = createUniqueSyncFolder('task-order');
|
|
await createWebDavFolder(request, SYNC_FOLDER_NAME);
|
|
const WEBDAV_CONFIG = {
|
|
...WEBDAV_CONFIG_TEMPLATE,
|
|
syncFolderPath: `/${SYNC_FOLDER_NAME}`,
|
|
};
|
|
|
|
const url = baseURL || 'http://localhost:4242';
|
|
|
|
// --- Client A ---
|
|
const { context: contextA, page: pageA } = await setupClient(browser, url);
|
|
const syncPageA = new SyncPage(pageA);
|
|
const workViewPageA = new WorkViewPage(pageA);
|
|
await workViewPageA.waitForTaskList();
|
|
|
|
// Configure Sync on Client A
|
|
await syncPageA.setupWebdavSync(WEBDAV_CONFIG);
|
|
await expect(syncPageA.syncBtn).toBeVisible();
|
|
|
|
// Create 3 tasks in specific order
|
|
const timestamp = Date.now();
|
|
const task1 = `First Task ${timestamp}`;
|
|
const task2 = `Second Task ${timestamp}`;
|
|
const task3 = `Third Task ${timestamp}`;
|
|
|
|
await workViewPageA.addTask(task1);
|
|
await workViewPageA.addTask(task2);
|
|
await workViewPageA.addTask(task3);
|
|
|
|
// Verify all 3 tasks exist on Client A
|
|
const tasksA = pageA.locator('task');
|
|
await expect(tasksA).toHaveCount(3);
|
|
|
|
// Capture the order on Client A (get task titles in order)
|
|
const taskTitlesA: string[] = [];
|
|
for (let i = 0; i < 3; i++) {
|
|
const title = await tasksA.nth(i).locator('.task-title').textContent();
|
|
taskTitlesA.push(title?.trim() || '');
|
|
}
|
|
console.log('Task order on Client A:', taskTitlesA);
|
|
|
|
// Wait for state to settle
|
|
await pageA.waitForTimeout(500);
|
|
|
|
// Sync Client A (Upload)
|
|
await syncPageA.triggerSync();
|
|
await waitForSync(pageA, syncPageA);
|
|
|
|
// --- Client B ---
|
|
const { context: contextB, page: pageB } = await setupClient(browser, url);
|
|
const syncPageB = new SyncPage(pageB);
|
|
const workViewPageB = new WorkViewPage(pageB);
|
|
await workViewPageB.waitForTaskList();
|
|
|
|
// Configure Sync on Client B
|
|
await syncPageB.setupWebdavSync(WEBDAV_CONFIG);
|
|
await expect(syncPageB.syncBtn).toBeVisible();
|
|
|
|
// Sync Client B (Download)
|
|
await syncPageB.triggerSync();
|
|
await waitForSync(pageB, syncPageB);
|
|
|
|
// Verify all 3 tasks appear on Client B
|
|
const tasksB = pageB.locator('task');
|
|
await expect(tasksB).toHaveCount(3);
|
|
|
|
// Verify order matches Client A
|
|
const taskTitlesB: string[] = [];
|
|
for (let i = 0; i < 3; i++) {
|
|
const title = await tasksB.nth(i).locator('.task-title').textContent();
|
|
taskTitlesB.push(title?.trim() || '');
|
|
}
|
|
console.log('Task order on Client B:', taskTitlesB);
|
|
|
|
// Assert order is preserved
|
|
for (let i = 0; i < 3; i++) {
|
|
expect(taskTitlesB[i]).toBe(taskTitlesA[i]);
|
|
}
|
|
|
|
// Cleanup
|
|
await contextA.close();
|
|
await contextB.close();
|
|
});
|
|
});
|