diff --git a/tests/e2e/rm_dir.test.e2e.ts b/tests/e2e/rm_dir.test.e2e.ts new file mode 100644 index 0000000000..af6ed58874 --- /dev/null +++ b/tests/e2e/rm_dir.test.e2e.ts @@ -0,0 +1,297 @@ +// @watch start +// templates/user/auth/** +// web_src/js/features/user-** +// modules/{user,auth}/** +// @watch end + +import { expect } from '@playwright/test'; +import { test } from './utils_e2e.ts'; + +test('delete directory test', async ({ page }, workerInfo) => { + page.setDefaultTimeout(0); + + // Create user + await expect(async () => { + const response = await page.goto('/user/sign_up'); + expect(response?.status()).toBe(200); + }).toPass(); + + await expect(async () => { + await page.fill('input[name=user_name]', `e2e-test-${workerInfo.workerIndex}`); + await page.fill('input[name=email]', `e2e-test-${workerInfo.workerIndex}@test.com`); + await page.fill('input[name=password]', 'test123test123'); + await page.fill('input[name=retype]', 'test123test123'); + await page.click('form button.ui.primary.button:visible'); + }).toPass(); + + // Remove later because after creating a new account it is logged in + // Log-in into account + await expect(async () => { + const response = await page.goto('/user/login'); + expect(response?.status()).toBe(200); + }).toPass(); + + // await expect(async () => { + await page.fill('input[name=user_name]', `e2e-test-${workerInfo.workerIndex}`); + await page.fill('input[name=password]', 'test123test123'); + await page.getByRole('button', { name: 'Sign in' }).click(); + // }).toPass(); + + // Create a new repos + await expect(async () => { + const response = await page.goto('/repo/create'); + expect(response?.status()).toBe(200); + }).toPass(); + + await expect(async () => { + await page.fill('input[name=repo_name]', 'e2e-test'); + await page.getByRole('button', { name: 'Create repository' }).click(); + }).toPass(); + + // Go into the repo + // Create file1.txt + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/_new/master`); + expect(response?.status()).toBe(200); + }).toPass(); + await expect(async () => { + await page.getByPlaceholder('Name your file…').click(); + await page.getByPlaceholder('Name your file…').fill('file1.txt'); + await page.locator('.view-lines').click(); + await page.getByLabel('Editor content').fill('Test 1'); + await page.getByRole('button', { name: 'Commit changes' }).click(); + }).toPass(); + // Is file there? + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/file1.txt`); + expect(response?.status()).toBe(200); + }).toPass(); + + // Create dir2/file2.txt + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/_new/master`); + expect(response?.status()).toBe(200); + }).toPass(); + await expect(async () => { + await page.getByPlaceholder('Name your file…').click(); + await page.getByPlaceholder('Name your file…').fill('dir2/file2.txt'); + await page.locator('.view-lines').click(); + await page.getByLabel('Editor content').fill('Test 2'); + await page.getByRole('button', { name: 'Commit changes' }).click(); + }).toPass(); + // Is file there? + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/dir2/file2.txt`); + expect(response?.status()).toBe(200); + }).toPass(); + // Create dir2/dir3/file3.txt + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/_new/master`); + expect(response?.status()).toBe(200); + }).toPass(); + await expect(async () => { + await page.getByPlaceholder('Name your file…').click(); + await page.getByPlaceholder('Name your file…').fill('dir2/dir3/file3.txt'); + await page.locator('.view-lines').click(); + await page.getByLabel('Editor content').fill('Test 3'); + await page.getByRole('button', { name: 'Commit changes' }).click(); + }).toPass(); + // Is file there? + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/dir2/dir3/file3.txt`); + expect(response?.status()).toBe(200); + }).toPass(); + + // Create dir2/dir3/file3b.txt + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/_new/master`); + expect(response?.status()).toBe(200); + }).toPass(); + await expect(async () => { + await page.getByPlaceholder('Name your file…').click(); + await page.getByPlaceholder('Name your file…').fill('dir2/dir3/file3b.txt'); + await page.locator('.view-lines').click(); + await page.getByLabel('Editor content').fill('Test 3'); + await page.getByRole('button', { name: 'Commit changes' }).click(); + }).toPass(); + // Is file there? + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/dir2/dir3/file3b.txt`); + expect(response?.status()).toBe(200); + }).toPass(); + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/`); + expect(response?.status()).toBe(200); + }).toPass(); + + await expect(page.getByRole('link', { name: 'Delete file' })).toBeVisible(); + // Now we are ready for the test + + // Logout + await expect(async () => { + await page.locator('div[aria-label="Profile and settings…"]').click(); + await page.getByText('Sign Out').click(); + }).toPass(); + + await expect(async () => { + const response = await page.goto('/'); + expect(response?.status()).toBe(200); + }).toPass(); + + // Delete shouldn't be able for a logged out person + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/`); + expect(response?.status()).toBe(200); + }).toPass(); + await expect(page.getByRole('link', { name: 'Delete file' })).toBeHidden(); + + // Create a different user + await expect(async () => { + const response = await page.goto('/user/sign_up'); + expect(response?.status()).toBe(200); + }).toPass(); + await expect(async () => { + await page.fill('input[name=user_name]', `oe2e-test-${workerInfo.workerIndex}`); + await page.fill('input[name=email]', `oe2e-test-${workerInfo.workerIndex}@test.com`); + await page.fill('input[name=password]', 'test123test123'); + await page.fill('input[name=retype]', 'test123test123'); + await page.click('form button.ui.primary.button:visible'); + }).toPass(); + // Remove later because after creating a new account it is logged in + // Log-in into account + await expect(async () => { + const response = await page.goto('/user/login'); + expect(response?.status()).toBe(200); + }).toPass(); + await expect(async () => { + await page.fill('input[name=user_name]', `oe2e-test-${workerInfo.workerIndex}`); + await page.fill('input[name=password]', 'test123test123'); + await page.getByRole('button', { name: 'Sign in' }).click(); + }).toPass(); + + // Delete shouldn't be able for a different person + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/`); + expect(response?.status()).toBe(200); + }).toPass(); + await expect(page.getByRole('link', { name: 'Delete file' })).toBeHidden(); + + // Logout + await expect(async () => { + await page.locator('div[aria-label="Profile and settings…"]').click(); + await page.getByText('Sign Out').click(); + }).toPass(); + + await expect(async () => { + const response = await page.goto('/'); + expect(response?.status()).toBe(200); + }).toPass(); + + // Log-in of the correct account + await expect(async () => { + const response = await page.goto('/user/login'); + expect(response?.status()).toBe(200); + }).toPass(); + + await expect(async () => { + await page.fill('input[name=user_name]', `e2e-test-${workerInfo.workerIndex}`); + await page.fill('input[name=password]', 'test123test123'); + await page.getByRole('button', { name: 'Sign in' }).click(); + }).toPass(); + + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/`); + expect(response?.status()).toBe(200); + }).toPass(); + + await expect(page.getByRole('link', { name: 'Delete file' })).toBeVisible(); + // Security test done... + + // Still all files there? + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/file1.txt`); + expect(response?.status()).toBe(200); + }).toPass(); + + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/dir2/file2.txt`); + expect(response?.status()).toBe(200); + }).toPass(); + + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/dir2/dir3/file3.txt`); + expect(response?.status()).toBe(200); + }).toPass(); + + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/dir2/dir3/file3b.txt`); + expect(response?.status()).toBe(200); + }).toPass(); + + // remove dir3 and content + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/dir2/dir3`); + expect(response?.status()).toBe(200); + }).toPass(); + + await expect(page.getByRole('link', { name: 'Delete file' })).toBeVisible(); + + await expect(async () => { + await page.getByRole('link', { name: 'Delete file' }).click(); + await page.getByRole('button', { name: 'Commit changes' }).click(); + }).toPass(); + + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/file1.txt`); + expect(response?.status()).toBe(200); + }).toPass(); + + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/dir2/file2.txt`); + expect(response?.status()).toBe(200); + }).toPass(); + + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/dir2/dir3/file3.txt`); + expect(response?.status()).toBe(404); + }).toPass(); + + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/dir2/dir3/file3b.txt`); + expect(response?.status()).toBe(404); + }).toPass(); + + // remove root and content + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/`); + expect(response?.status()).toBe(200); + }).toPass(); + + await expect(page.getByRole('link', { name: 'Delete file' })).toBeVisible(); + + await expect(async () => { + await page.getByRole('link', { name: 'Delete file' }).click(); + await page.getByRole('button', { name: 'Commit changes' }).click(); + }).toPass(); + + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/file1.txt`); + expect(response?.status()).toBe(404); + }).toPass(); + + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/dir2/file2.txt`); + expect(response?.status()).toBe(404); + }).toPass(); + + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/dir2/dir3/file3.txt`); + expect(response?.status()).toBe(404); + }).toPass(); + + await expect(async () => { + const response = await page.goto(`/e2e-test-${workerInfo.workerIndex}/e2e-test/src/branch/master/dir2/dir3/file3b.txt`); + expect(response?.status()).toBe(404); + }).toPass(); + +});