diff --git a/.gitignore b/.gitignore index 336391b0..4b84d1b4 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ public/Users/Public/** !public/Users/**/desktop.ini !public/Users/Public/Desktop !public/Users/Public/Desktop/My PC.url +!public/Users/Public/Desktop/Public.url !public/Users/Public/Documents !public/Users/Public/Music !public/Users/Public/Pictures diff --git a/e2e/components/apps/FileExplorer.spec.ts b/e2e/components/apps/FileExplorer.spec.ts index 9805a5c9..7ab900c6 100644 --- a/e2e/components/apps/FileExplorer.spec.ts +++ b/e2e/components/apps/FileExplorer.spec.ts @@ -14,6 +14,7 @@ import { TEST_APP_ICON, TEST_APP_TITLE, TEST_APP_TITLE_TEXT, + TEST_DESKTOP_FILE, TEST_ROOT_ARCHIVE, TEST_ROOT_FILE, TEST_ROOT_FILE_2, @@ -44,6 +45,7 @@ import { desktopEntryIsVisible, didCaptureConsoleLogs, disableWallpaper, + dragDesktopEntryToFileExplorer, dragFileExplorerEntryToDesktop, fileExplorerAddressBarHasValue, fileExplorerEntriesAreVisible, @@ -292,7 +294,7 @@ test.describe("has files & folders", () => { }); }); - test("can drag to desktop", async ({ browserName, headless, page }) => { + test("can drop on desktop", async ({ browserName, headless, page }) => { test.skip( headless && DRAG_HEADLESS_NOT_SUPPORTED_BROWSERS.has(browserName), "no headless drag support" @@ -301,6 +303,7 @@ test.describe("has files & folders", () => { await desktopEntryIsHidden(TEST_ROOT_FILE, { page }); await fileExplorerEntryIsVisible(TEST_ROOT_FILE, { page }); await dragFileExplorerEntryToDesktop(TEST_ROOT_FILE, { page }); + await fileExplorerEntryIsHidden(TEST_ROOT_FILE, { page }); await desktopEntryIsVisible(TEST_ROOT_FILE, { page }); }); @@ -325,7 +328,18 @@ test.describe("has files & folders", () => { await expect(page.locator(".focus-within")).toHaveCount(2); }); - // TEST: can drop (from Desktop) + test("can drop from desktop", async ({ browserName, headless, page }) => { + test.skip( + headless && DRAG_HEADLESS_NOT_SUPPORTED_BROWSERS.has(browserName), + "no headless drag support" + ); + + await fileExplorerEntryIsHidden(TEST_DESKTOP_FILE, { page }); + await desktopEntryIsVisible(TEST_DESKTOP_FILE, { page }); + await dragDesktopEntryToFileExplorer(TEST_DESKTOP_FILE, { page }); + await desktopEntryIsHidden(TEST_DESKTOP_FILE, { page }); + await fileExplorerEntryIsVisible(TEST_DESKTOP_FILE, { page }); + }); }); test("can change page title", async ({ page }) => { diff --git a/e2e/components/system/Metadata.spec.ts b/e2e/components/system/Metadata.spec.ts index 28708b8f..048c04e3 100644 --- a/e2e/components/system/Metadata.spec.ts +++ b/e2e/components/system/Metadata.spec.ts @@ -12,27 +12,26 @@ test.describe("has correct tags", () => { await expect(preloadElements).toHaveCount(desktopIcons.length); - const preloadHrefs = await Promise.all( - (await preloadElements.elementHandles()).map( - async (preloadElement) => - basename( - (await preloadElement.getAttribute("href")) || - (await preloadElement.getAttribute("imagesrcset")) || - "" - ).split(" ")[0] - ) - ); const fileNames = desktopIcons.map((filePath) => basename(filePath)); - preloadHrefs.forEach((preloadHref) => - expect(fileNames).toContain(preloadHref) - ); + ( + await Promise.all( + (await preloadElements.elementHandles()).map( + async (preloadElement) => + basename( + (await preloadElement.getAttribute("href")) || + (await preloadElement.getAttribute("imagesrcset")) || + "" + ).split(" ")[0] + ) + ) + ).forEach((preloadHref) => expect(fileNames).toContain(preloadHref)); }); test("has open graphs", async ({ page }) => { - const openGraphElements = page.locator("meta[property^='og:']"); - - await expect(openGraphElements).toHaveCount(OG_TAGS.length); + await expect(page.locator("meta[property^='og:']")).toHaveCount( + OG_TAGS.length + ); OG_TAGS.forEach((tag) => expect(() => diff --git a/e2e/constants.ts b/e2e/constants.ts index 91771524..38896bc6 100644 --- a/e2e/constants.ts +++ b/e2e/constants.ts @@ -220,6 +220,7 @@ export const TEST_APP_TITLE = /^My PC$/; export const TEST_APP_TITLE_TEXT = "My PC"; export const TEST_APP_ICON = /\/pc\.(webp|png)$/; +export const TEST_DESKTOP_FILE = /^Public$/; export const TEST_ROOT_ARCHIVE = /^archive.zip$/; export const TEST_ROOT_FILE = /^CREDITS.md$/; export const TEST_ROOT_FILE_2 = /^favicon.ico$/; diff --git a/e2e/functions.ts b/e2e/functions.ts index b0e37b70..27fa3233 100644 --- a/e2e/functions.ts +++ b/e2e/functions.ts @@ -213,6 +213,24 @@ export const dragFileExplorerEntryToDesktop = async ( targetPosition: { x: 1, y: 1 }, }); +export const dragDesktopEntryToFileExplorer = async ( + label: RegExp | string, + { page }: TestProps +): Promise => { + const { height = 0, width = 0 } = + (await page.locator(FILE_EXPLORER_SELECTOR).boundingBox()) || {}; + + page + .locator(DESKTOP_ENTRIES_SELECTOR) + .getByLabel(label) + .dragTo(page.locator(FILE_EXPLORER_SELECTOR), { + targetPosition: { + x: width - 5, + y: height - 5, + }, + }); +}; + export const dragWindowToDesktop = async ({ page, }: TestProps): Promise => { diff --git a/public/Users/Public/Desktop/Public.url b/public/Users/Public/Desktop/Public.url new file mode 100644 index 00000000..b39ec83a --- /dev/null +++ b/public/Users/Public/Desktop/Public.url @@ -0,0 +1,5 @@ +[InternetShortcut] +BaseURL=FileExplorer +IconFile=/System/Icons/user.webp +Type=System +URL=/Users/Public