mirror of
https://github.com/PeWu/topola-viewer.git
synced 2026-07-17 17:21:48 +00:00
49 lines
1.8 KiB
TypeScript
49 lines
1.8 KiB
TypeScript
import {test} from '@playwright/test';
|
|
|
|
import {runProber} from './helpers';
|
|
|
|
/**
|
|
* Prober: Docker container
|
|
*
|
|
* Pulls the Docker image published to GHCR, runs it locally with the test
|
|
* GEDCOM file mounted via STATIC_URL, and verifies that the containerized
|
|
* application starts and renders data. This exercises the Docker build path
|
|
* (multi-stage Dockerfile, Caddy server configuration, static URL template
|
|
* injection) and confirms the published container image is functional.
|
|
*
|
|
* The workflow starts the container externally (via `docker run`) before
|
|
* this test runs, so Playwright connects to localhost:8080 directly.
|
|
*
|
|
* If the Docker container is not running (e.g., when running probers locally
|
|
* without Docker), this test is skipped with a clear message rather than
|
|
* failing with a confusing connection error.
|
|
*/
|
|
test('Docker container prober', async ({page}) => {
|
|
// Guard: verify the Docker container is reachable before running the
|
|
// prober. When running locally without Docker, this produces a clear
|
|
// skip message instead of a confusing ECONNREFUSED failure.
|
|
// page.request.get throws on connection refused (rather than returning a
|
|
// non-OK response), so we catch the error and skip.
|
|
let containerReachable = false;
|
|
try {
|
|
const response = await page.request.get('http://localhost:8080/', {
|
|
timeout: 5_000,
|
|
});
|
|
containerReachable = response.ok();
|
|
} catch {
|
|
containerReachable = false;
|
|
}
|
|
test.skip(
|
|
!containerReachable,
|
|
'Docker container is not reachable on localhost:8080 — start it with: ' +
|
|
'docker run -d -p 8080:8080 -e STATIC_URL=test.ged ' +
|
|
'-v $(pwd)/src/datasource/testdata/test.ged:/app/public/test.ged ' +
|
|
'ghcr.io/pewu/topola-viewer:latest',
|
|
);
|
|
|
|
await runProber(page, {
|
|
url: 'http://localhost:8080/',
|
|
expectedName: 'Bonifacy',
|
|
});
|
|
});
|