Save default container selection on setup. (#8440)

This commit is contained in:
Pablo Zmdl
2026-07-17 21:32:46 +02:00
committed by GitHub
6 changed files with 55 additions and 3 deletions
+3
View File
@@ -30,6 +30,9 @@ jobs:
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Run Playwright test for persisted defaults
run: ./php/tests/run.sh ./php/tests/tests/persist-default-config.spec.js
- name: Run Playwright tests for initial setup
run: ./php/tests/run.sh ./php/tests/tests/initial-setup.spec.js
env:
@@ -19,6 +19,11 @@ jobs:
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Run Playwright test for persisted defaults
env:
TEST_CODE_FROM_IMAGE: yes
run: ./php/tests/run.sh ./php/tests/tests/persist-default-config.spec.js
- name: Run Playwright tests for initial setup
env:
TEST_CODE_FROM_IMAGE: yes
+16
View File
@@ -18,7 +18,23 @@ readonly class Setup {
}
$password = $this->passwordGenerator->GeneratePassword(8);
// Save the password and the default container selection to the config, so it gets persisted even if
// people don't change anything in the UI. Without this any change to the defaults would be applied to
// existing instances.
$this->configurationManager->startTransaction();
$this->configurationManager->password = $password;
// Get the defaults for these config options from their own getters to avoid duplication of defaults.
// Makes the code look funny but works.
$this->configurationManager->officeSuite = $this->configurationManager->officeSuite;
$this->configurationManager->isClamavEnabled = $this->configurationManager->isClamavEnabled;
$this->configurationManager->isFulltextsearchEnabled = $this->configurationManager->isFulltextsearchEnabled;
$this->configurationManager->isImaginaryEnabled = $this->configurationManager->isImaginaryEnabled;
$this->configurationManager->isTalkEnabled = $this->configurationManager->isTalkEnabled;
$this->configurationManager->isTalkRecordingEnabled = $this->configurationManager->isTalkRecordingEnabled;
$this->configurationManager->isDockerSocketProxyEnabled = $this->configurationManager->isDockerSocketProxyEnabled;
$this->configurationManager->isHarpEnabled = $this->configurationManager->isHarpEnabled;
$this->configurationManager->isWhiteboardEnabled = $this->configurationManager->isWhiteboardEnabled;
$this->configurationManager->commitTransaction();
return $password;
}
+1 -1
View File
@@ -76,6 +76,7 @@ services:
image: mcr.microsoft.com/playwright:v1.56.1@sha256:f1e7e01021efd65dd1a2c56064be399f3e4de00fd021ac561325f2bfbb2b837a
volumes:
- ..:/app
- nextcloud_aio_mastercontainer:/mnt/docker-aio-config:ro
working_dir: /app/tests
ports:
- '9323:9323' # to view test reports
@@ -114,4 +115,3 @@ services:
volumes:
nextcloud_aio_mastercontainer:
name: nextcloud_aio_mastercontainer
+4 -2
View File
@@ -27,10 +27,9 @@ run_tests() {
fi
# Clean up old containers and volumes
$DOCO --profile $profile down -v --remove-orphans
docker container rm --force nextcloud-aio-{mastercontainer,apache,notify-push,nextcloud,redis,database,domaincheck,whiteboard,imaginary,talk,collabora,borgbackup} > /dev/null 2>&1
docker volume rm nextcloud_aio_{mastercontainer,apache,database,database_dump,nextcloud,nextcloud_data,redis,backup_cache,elasticsearch} > /dev/null 2>&1
$DOCO --profile $profile down -v
sleep 1
echo -e "\n 📣 Running playwright tests for ${TESTS_FILE} with SKIP_DOMAIN_VALIDATION=$SKIP_DOMAIN_VALIDATION and profile '$profile'\n"
$DOCO --profile $profile run --remove-orphans test-runner-$profile
@@ -63,6 +62,9 @@ if [[ -n "$1" ]]; then
fi
run_tests "$relpath"
else
SKIP_DOMAIN_VALIDATION=false
run_tests tests/persist-default-config.spec.js
sleep 1
SKIP_DOMAIN_VALIDATION=true
run_tests tests/initial-setup.spec.js
sleep 1
@@ -0,0 +1,26 @@
import { test, expect } from '@playwright/test';
import { readFileSync } from 'node:fs';
test('Initial setup persists default container selections', async ({ page: setupPage }) => {
test.setTimeout(10 * 60 * 1000);
await setupPage.goto('./setup');
await expect.poll(() => {
try {
return JSON.parse(readFileSync('/mnt/docker-aio-config/data/configuration.json', 'utf8'));
} catch {
return null;
}
}, { timeout: 30_000 }).toMatchObject({
officeSuite: 'eurooffice',
isClamavEnabled: false,
isTalkEnabled: true,
isTalkRecordingEnabled: false,
isImaginaryEnabled: true,
isFulltextsearchEnabled: false,
isDockerSocketProxyEnabled: false,
isHarpEnabled: false,
isWhiteboardEnabled: true,
});
});