v0.9.16 — Builder Screen-Test Suite, Two Real Cascade Bugs Fixed, Dialog UX
Highlights
- New full AssertJ-Swing screen-test coverage for
builder: every menu item, every CRUD screen's New/Edit/Delete/Refresh round trip, and the Contest → Candidates → Regions dialog cascade — closing the coverage gap noted inREADME-testing.md(builderpreviously had no GUI-click-through test at all). - Fixed a real
ClassCastExceptionon "Manage Candidates"/"Assign Regions"/"Translations" for any already-saved Contest reopened by double-click — the dialog owner could be aDialog, not aFrame, and the cast threw every time. Found by the new test suite, not previously caught by anything. - Fixed a real, more serious data-integrity bug: every candidate added to a newly created Contest was silently duplicated in the database on the ordinary create-contest → add-candidates → assign-regions workflow.
contestRepo.save(contest)'s JPAmerge()return value was discarded at each step, so still-transient candidates got re-inserted a second time by the very next save in the same cascade. - New
DesktopElectionBuilder+run_all.sh --desktop: a third way to buildtest-harness's test election — alongsidebuild_election.py(bBuilder's REST API, the full 15-contest election) and the headlessTestElectionBuilderfallback — this one drivesbuilder's real Swing UI with a realjava.awt.Robot, idempotent against the real~/pbss_datadatabase. - Dialog usability improvements in
builder: prose fields (preamble, postamble, instructions, explanatory text) now word-wrap instead of requiring horizontal scrolling to read; the candidate table's display-order column is a spinner instead of free-text entry; the ballot design template's header HTML/CSS field has a "Preview in Browser" button that renders the real substituted markup in the system browser (full CSS support). - Confirmed:
ARROWandNUMBER_FIELDvote-indicator styles remain excluded from the selectable picker across all three apps that expose one (bBuilder,blBuilder,builder) — the enum values themselves stay in the model for already-saved templates, nothing regressed.
Notes
All thirteen module pom.xml files bumped to 0.9.16. builder-core, counter-core, scanner-core, and all ten dependent apps verified to install/compile cleanly at this version. builder's full suite (20 tests across headless + new AssertJ-Swing screen tests) passes cleanly (1 environment-dependent skip — real-screen Robot geometry, same class of flakiness already documented for counter's equivalent GUI test).