The MDL owns the workflow of registering deliverables; this is the
catch-up path for files that already exist in the archive but were never
listed. On the project MDL rollup (<project>/mdl/, addable:false), a new
"+ From archive" toolbar button opens an overlay that walks the project
archive into the shared seltable (per-column autofilter + ctrl-shift
selection), dedupes the selection to one deliverable per tracking number,
and PUTs a deliverable .yaml into each originator's archive/<originator>/
mdl/. Identity fields are split positionally from the tracking number per
the project's own table columns (originator is folder-pinned, so omitted
from the body); the server composes/validates the filename. Existing
deliverables are skipped; created/skipped/failed are reported.
- tables/js/mdl-from-archive.js: walkArchive / dedupe / deliverableFromFile
/ instantiateOne + the overlay UI; setup() shows the button only on an
/mdl/ rollup over http, gated on archive create permission.
- shared/seltable.css: promoted seltable base styles + per-column filter
row + the overlay chrome (bundled into tables; classifier keeps its
inline copy).
- main.js wires setup(ctx); template.html adds the (hidden) button;
build.sh bundles ../shared/seltable.{js,css} + the new module.
- tests/tables-mdl.spec.js (new project): split/dedupe/walk/instantiate
against in-page mock FS handles; 7 green. tables suite still 47 green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
133 lines
3.3 KiB
JavaScript
133 lines
3.3 KiB
JavaScript
import { defineConfig } from '@playwright/test';
|
|
|
|
export default defineConfig({
|
|
testDir: './tests',
|
|
// tokens.spec.js builds the Go binary on first run via podman + waits
|
|
// for the spawned master to listen — both can take longer than the
|
|
// default 30s on a cold cache. Other specs are file:// driven and
|
|
// unaffected by this bump.
|
|
timeout: 60000,
|
|
retries: 0,
|
|
reporter: [['line'], ['html', { open: 'never' }]],
|
|
|
|
use: {
|
|
// Chromium only -- File System Access API requires it,
|
|
// and the ZDDC tools target "any modern Chromium-based browser"
|
|
browserName: 'chromium',
|
|
screenshot: 'only-on-failure',
|
|
trace: 'retain-on-failure',
|
|
},
|
|
|
|
projects: [
|
|
{
|
|
name: 'archive',
|
|
testMatch: 'archive.spec.js',
|
|
},
|
|
{
|
|
name: 'archive-cascade',
|
|
testMatch: 'archive-cascade.spec.js',
|
|
},
|
|
{
|
|
name: 'landing',
|
|
testMatch: 'landing.spec.js',
|
|
},
|
|
{
|
|
name: 'transmittal',
|
|
testMatch: 'transmittal.spec.js',
|
|
},
|
|
{
|
|
name: 'transmittal-init',
|
|
testMatch: 'transmittal-init-check.spec.js',
|
|
},
|
|
{
|
|
name: 'transmittal-drag-drop',
|
|
testMatch: 'transmittal-drag-drop.spec.js',
|
|
},
|
|
{
|
|
name: 'transmittal-validation',
|
|
testMatch: 'transmittal-validation.spec.js',
|
|
},
|
|
{
|
|
name: 'classifier',
|
|
testMatch: 'classifier.spec.js',
|
|
},
|
|
{
|
|
name: 'classify',
|
|
testMatch: 'classify.spec.js',
|
|
},
|
|
{
|
|
name: 'browse',
|
|
testMatch: 'browse.spec.js',
|
|
},
|
|
{
|
|
name: 'conflict',
|
|
testMatch: 'conflict.spec.js',
|
|
},
|
|
{
|
|
name: 'zddc-source',
|
|
testMatch: 'zddc-source.spec.js',
|
|
},
|
|
{
|
|
name: 'toast',
|
|
testMatch: 'toast.spec.js',
|
|
},
|
|
{
|
|
name: 'nav',
|
|
testMatch: 'nav.spec.js',
|
|
},
|
|
{
|
|
name: 'logo',
|
|
testMatch: 'logo.spec.js',
|
|
},
|
|
{
|
|
name: 'zddc',
|
|
testMatch: 'zddc.spec.js',
|
|
},
|
|
{
|
|
name: 'diff',
|
|
testMatch: 'diff.spec.js',
|
|
},
|
|
{
|
|
name: 'form-safety',
|
|
testMatch: 'form-safety.spec.js',
|
|
},
|
|
{
|
|
name: 'tables',
|
|
testMatch: 'tables.spec.js',
|
|
},
|
|
{
|
|
name: 'tables-mdl',
|
|
testMatch: 'tables-mdl.spec.js',
|
|
},
|
|
{
|
|
name: 'zddc-filter',
|
|
testMatch: 'zddc-filter.spec.js',
|
|
},
|
|
{
|
|
name: 'build-label',
|
|
testMatch: 'build-label.spec.js',
|
|
},
|
|
{
|
|
name: 'schema',
|
|
testMatch: 'schema.spec.js',
|
|
},
|
|
{
|
|
// Server-backed: starts a real zddc-server master via
|
|
// tests/lib/server.mjs (which builds the binary on first run
|
|
// through the canonical podman/zddc-go:1.24 invocation), drives
|
|
// Chromium against http://127.0.0.1:<port>/.tokens, exercises
|
|
// create/list/revoke + bearer round-trip + cross-user 404 +
|
|
// XSS-guard. The binary build is cached at zddc/dist/zddc-server-
|
|
// test and invalidated by a hash of cmd/+internal/+go.{mod,sum}
|
|
// so a second run only takes the master-startup time (~1s).
|
|
// First run takes ~30s for the build.
|
|
//
|
|
// The lifecycle is per-spec via beforeAll/afterAll — Playwright's
|
|
// top-level webServer hook would fire for every project, including
|
|
// the file://-driven tool tests that don't need the server.
|
|
name: 'tokens',
|
|
testMatch: 'tokens.spec.js',
|
|
},
|
|
],
|
|
});
|
|
|