test: play with a server starting from scratch
Massimo Melina committed
Sep 26, 2025 at 00:42 UTC
a403af9fb8b2d0929a6bf44648584dcf1dc81e22
4 files changed
+64
-3
.gitignore
+1
@@ -5,6 +5,7 @@ dist
5
.DS_Store
6
#produced by running
7
tests/work
8
+tests/work2
9
tests/config.yaml.bak
10
11
# Playwright
e2e/frontend.spec.ts
+56
@@ -289,3 +289,59 @@ async function screenshot(page: Page, selectorForMask='') {
289
await wait(1000) // this accounts especially for our DataTable component which takes time to set the layout
290
return expect(page).toHaveScreenshot({ fullPage: true, mask: [page.locator(`.maskInTests${selectorForMask}`)] });
291
}
292
+
293
+test('anew', async ({ page, browserName }) => {
294
+ if (page.viewportSize()?.width! < 1000 || browserName !== 'chromium') return // test only for desktop chromium
295
+ await fs.promises.writeFile('tests/work2/config.yaml', "port: 82\nopen_browser_at_start: false"); // reset config
296
+ await wait(500) // ensure new config is aplied
297
+ await page.goto('http://localhost:82/');
298
+ await expect(page.getByText('Nothing here')).toBeVisible();
299
+ await page.getByRole('button', { name: 'Options' }).click();
300
+ const page1Promise = page.waitForEvent('popup');
301
+ await page.getByRole('button', { name: 'Admin-panel' }).click();
302
+ const page1 = await page1Promise;
303
+ await page1.getByRole('link', { name: 'add some' }).click();
304
+ await page1.getByRole('button', { name: 'Add' }).click();
305
+ await page1.getByRole('menuitem', { name: 'from disk' }).click();
306
+ await page1.getByRole('textbox', { name: /Filter results/ }).fill('data');
307
+ await expect(page1.getByText('Filter results (1/')).toBeVisible();
308
+ await page1.getByRole('checkbox').check();
309
+ await page1.getByText('data.kv').click();
310
+ await page1.getByRole('button', { name: 'Add' }).click();
311
+ await page1.getByRole('menuitem', { name: 'from disk' }).click();
312
+ await page1.getByRole('button', { name: 'Select this folder' }).click();
313
+ await page1.getByRole('button', { name: 'Add' }).click();
314
+ await page1.getByRole('menuitem', { name: 'virtual folder' }).click();
315
+ await page1.getByRole('textbox').fill('folder1');
316
+ await page1.getByRole('textbox').press('Enter');
317
+ await page1.getByRole('dialog').locator('div').nth(1).click();
318
+ await page1.locator('.MuiDialog-container').press('Escape')
319
+ await page1.locator('#vfs').click();
320
+ await page1.getByText('folder1', { exact: true }).click();
321
+ await page1.getByRole('treeitem', { name: 'folder1' }).locator('path').first().click();
322
+ await page1.getByText('folder1', { exact: true }).click();
323
+ await page1.getByRole('button', { name: 'Cut' }).click();
324
+ await page1.locator('div').filter({ hasText: 'InfoNow that this is marked' }).nth(1).click();
325
+ await page1.getByRole('button', { name: '(Close)' }).click();
326
+ await page1.getByText('Home folder').click();
327
+ await page1.getByRole('button', { name: '(/work2/folder1/)' }).click();
328
+ await page1.getByText('/Users/rejetto/code/hfs/tests/work2/data.kv').click();
329
+ await page1.getByRole('button', { name: 'Cut' }).click();
330
+ await page1.getByRole('button', { name: '(Close)' }).click();
331
+ await page1.getByText('folder1').click();
332
+ await page1.getByRole('button', { name: '(/data.kv)' }).click();
333
+ await page1.locator('[id="vfs-/"] div').filter({ hasText: /work2\/data\.kv$/ }).nth(4).click();
334
+ await page.getByRole('button', { name: 'Close' }).click();
335
+ await page.getByRole('link', { name: 'home' }).click();
336
+ await page.getByRole('link', { name: 'Reload' }).click();
337
+ await page.getByRole('link', { name: 'folder1, Folder' }).click();
338
+ await page.getByRole('link', { name: 'data.kv' }).click();
339
+ await page.getByRole('button', { name: 'Close' }).click();
340
+ await page.locator('.list-wrapper > div').press('Control+Backspace');
341
+ await page.getByRole('link', { name: 'work2, Folder' }).click();
342
+ await page.getByRole('link', { name: 'config.yaml', exact: true }).click();
343
+ const page2Promise = page.waitForEvent('popup');
344
+ await page.getByRole('link', { name: 'Open' }).click();
345
+ const page2 = await page2Promise;
346
+ await page2.getByText(/folder1/).click();
347
+});
playwright.config.ts
+6
-2
@@ -92,9 +92,13 @@ export default defineConfig({
92
},
93
},
94
/* Run your local dev server before starting the tests */
95
- webServer: {
95
+ webServer: [{
96
command: 'npm run server-for-test',
97
url: 'http://127.0.0.1:81',
98
reuseExistingServer: !process.env.CI,
99
- },
99
+ }, {
100
+ command: 'rm -rf tests/work2 && node dist/src --cwd tests/work2 --debug --port 82 --open_browser_at_start false',
101
+ url: 'http://127.0.0.1:82',
102
+ reuseExistingServer: !process.env.CI,
103
+ }]
104
});
tests/config.yaml
+1
-1
@@ -4,7 +4,7 @@ allowed_referer: x.com
4
localhost_admin: false
5
vfs:
6
masks:
7
- "**/config.yaml*|test.ts|work|*uploaded":
7
+ "**/config.yaml*|test.ts|work|*uploaded|work2":
8
can_see: false
9
tests/page/!*.png:
10
mime: text/plain