mirror of
https://github.com/nextcloud/all-in-one.git
synced 2025-12-20 14:36:52 +00:00
test: add e2e tests via playwright
Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
This commit is contained in:
parent
4f68d3ed1c
commit
e37611a759
7 changed files with 392 additions and 0 deletions
79
php/tests/tests/restore-instance.spec.js
Normal file
79
php/tests/tests/restore-instance.spec.js
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
import { test, expect } from '@playwright/test';
|
||||
import { readFileSync } from 'node:fs';
|
||||
|
||||
test('Restore instance', async ({ page: setupPage }) => {
|
||||
test.setTimeout(10 * 60 * 1000)
|
||||
|
||||
// Load passwords from previous test
|
||||
const {
|
||||
initialNextcloudPassword,
|
||||
borgBackupLocation,
|
||||
borgBackupPassword,
|
||||
} = JSON.parse(readFileSync('test_data.json'))
|
||||
|
||||
// Extract initial password
|
||||
await setupPage.goto('./setup');
|
||||
const password = await setupPage.locator('#initial-password').innerText()
|
||||
const containersPagePromise = setupPage.waitForEvent('popup');
|
||||
await setupPage.getByRole('link', { name: 'Open Nextcloud AIO login ↗' }).click();
|
||||
const containersPage = await containersPagePromise;
|
||||
|
||||
// Log in and wait for redirect
|
||||
await containersPage.locator('#master-password').click();
|
||||
await containersPage.locator('#master-password').fill(password);
|
||||
await containersPage.getByRole('button', { name: 'Log in' }).click();
|
||||
await containersPage.waitForURL('./containers');
|
||||
|
||||
// Reject example.com (requires enabled domain validation)
|
||||
await containersPage.locator('#domain').click();
|
||||
await containersPage.locator('#domain').fill('example.com');
|
||||
await containersPage.getByRole('button', { name: 'Submit domain' }).click();
|
||||
await expect(containersPage.locator('body')).toContainText('Domain does not point to this server or the reverse proxy is not configured correctly.');
|
||||
|
||||
// Reject invalid backup location
|
||||
await containersPage.locator('#borg_restore_host_location').click();
|
||||
await containersPage.locator('#borg_restore_host_location').fill('/mnt/foobar');
|
||||
await containersPage.locator('#borg_restore_password').click();
|
||||
await containersPage.locator('#borg_restore_password').fill('foobar');
|
||||
await containersPage.getByRole('button', { name: 'Submit location and encryption password' }).click()
|
||||
await containersPage.getByRole('button', { name: 'Test path and encryption' }).click();
|
||||
await expect(containersPage.getByRole('main')).toContainText('Last test failed!', { timeout: 60 * 1000 });
|
||||
|
||||
// Reject invalid backup password
|
||||
await containersPage.locator('#borg_restore_host_location').click();
|
||||
await containersPage.locator('#borg_restore_host_location').fill('/mnt/backup');
|
||||
await containersPage.locator('#borg_restore_password').click();
|
||||
await containersPage.locator('#borg_restore_password').fill('foobar');
|
||||
await containersPage.getByRole('button', { name: 'Submit location and encryption password' }).click()
|
||||
await containersPage.getByRole('button', { name: 'Test path and encryption' }).click();
|
||||
await expect(containersPage.getByRole('main')).toContainText('Last test failed!', { timeout: 60 * 1000 });
|
||||
|
||||
// Accept correct backup location and password
|
||||
await containersPage.locator('#borg_restore_host_location').click();
|
||||
await containersPage.locator('#borg_restore_host_location').fill(borgBackupLocation);
|
||||
await containersPage.locator('#borg_restore_password').click();
|
||||
await containersPage.locator('#borg_restore_password').fill(borgBackupPassword);
|
||||
await containersPage.getByRole('button', { name: 'Submit location and encryption password' }).click()
|
||||
await containersPage.getByRole('button', { name: 'Test path and encryption' }).click();
|
||||
|
||||
// Check integrity and restore backup
|
||||
await containersPage.getByRole('button', { name: 'Check backup integrity' }).click();
|
||||
await expect(containersPage.getByRole('main')).toContainText('Last check successful!', { timeout: 5 * 60 * 1000 });
|
||||
await containersPage.getByRole('button', { name: 'Restore selected backup' }).click();
|
||||
await expect(containersPage.getByRole('main')).toContainText('Backup container is currently running:');
|
||||
|
||||
// Verify a successful backup restore
|
||||
await expect(containersPage.getByRole('main')).toContainText('Last restore successful!', { timeout: 3 * 60 * 1000 });
|
||||
await expect(containersPage.getByRole('main')).toContainText('⚠️ Container updates are available. Click on Stop containers and Start and update containers to update them. You should consider creating a backup first.');
|
||||
containersPage.once('dialog', dialog => {
|
||||
console.log(`Dialog message: ${dialog.message()}`)
|
||||
dialog.accept()
|
||||
});
|
||||
await containersPage.getByRole('button', { name: 'Start and update containers' }).click();
|
||||
await expect(containersPage.getByRole('link', { name: 'Open your Nextcloud ↗' })).toBeVisible({ timeout: 5 * 60 * 1000 });
|
||||
await expect(containersPage.getByRole('main')).toContainText(initialNextcloudPassword);
|
||||
|
||||
// Verify that containers are all stopped
|
||||
await containersPage.getByRole('button', { name: 'Stop containers' }).click();
|
||||
await expect(containersPage.getByRole('button', { name: 'Start containers' })).toBeVisible({ timeout: 60 * 1000 });
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue