Automated test status

Every change to this site must pass an automated test suite before it is allowed to deploy. The results below are from the most recent recorded run — this page shows that snapshot, it does not run the tests when you open it.

63 passed 63 tests · 0.86s · last run 2026-07-08 21:26 · commit 30190aa

Registration flow (12)

Test Status What it checks
Registration form renders Passed
Details

The registration form loads for an event, showing its name and key fields.

Successful registration is stored and confirmed Passed
Details

A valid submission stores a row and redirects to the confirmation.

Confirmation page shows reference and details Passed
Details

After registering, the confirmation page shows a reference number and the attendee's details.

Missing required fields shows errors and keeps input Passed
Details

Bad input re-renders the form with messages, keeping what was typed.

Invalid email is rejected Passed
Details

A malformed email address is rejected with a clear message.

Duplicate email for same event is rejected Passed
Details

The partial unique index blocks a second confirmed registration.

Duplicate email check ignores letter case Passed
Details

Registering with the same email in a different case is still a duplicate.

The email column uses COLLATE NOCASE, so the database treats Orla.Nolan@Example.com and orla.nolan@example.com as the same person.

Same email can register for a different event Passed
Details

The uniqueness rule is per event, not site-wide.

Full event rejects new registrations Passed
Details

Filling the last two workshop places makes a third attempt fail.

Register form for a full event redirects Passed
Details

Opening the form for a full event redirects instead of showing it.

Register form for unknown event returns 404 Passed
Details

Opening the registration form for an event that does not exist returns 404.

Confirmation page is hidden for a cancelled registration Passed
Details

A cancelled registration must not show a "You're registered!" page.

Registration 19 is seeded as cancelled, so its confirmation URL 404s rather than reassuring someone whose place was cancelled.

Organiser pages (24)

Test Status What it checks
Registration list shows all registrations Passed
Details

The organiser list shows every registration, including a known attendee from each seeded event.

Admin root redirects to registration list Passed
Details

The bare /admin URL should redirect to the organiser list, not 404.

Registration list can filter by event Passed
Details

?event=2 narrows the table to the careers evening only.

Registration list shows cancelled status Passed
Details

Sarah Lydon's seeded workshop registration is cancelled.

Registration list shows summary stats Passed
Details

The stat panel below the title reports the headline figures, all of them describing the seeded dataset as a whole.

Registration list shows the venue for each event Passed
Details

Each row lists the event's venue under the event name.

Table can be sorted by a column Passed
Details

A column header sorts the whole table on the server, and the direction flips between ascending and descending.

Invalid sort parameters fall back to newest first Passed
Details

A hand-edited (or malicious) sort value is never trusted: an unknown column is ignored and the table falls back to its default newest-first order, with no error and no SQL reaching the database.

Sort links preserve the event filter Passed
Details

Sorting while filtered to one event keeps that filter in the links.

Registration detail shows all stored information Passed
Details

A registration's detail page shows every stored field: reference, name, email, organisation, dietary needs and event.

Unknown registration returns 404 Passed
Details

Opening a registration that does not exist returns a 404.

Edit form is prefilled with current values Passed
Details

The edit form arrives pre-filled with the registration's current details.

Edit saves changes Passed
Details

Editing updates the stored row and reports success.

Edit rejects invalid input Passed
Details

Validation applies to edits exactly as it does to new registrations.

Edit rejects email belonging to another registration Passed
Details

Changing the email cannot collide with someone else on the event.

Cancel frees a place and keeps the row Passed
Details

Cancelling flips the status and the workshop gains a free place.

Cancelling twice is reported not repeated Passed
Details

Cancelling an already-cancelled registration is reported, not repeated.

Cancelled place can be taken by someone new Passed
Details

After a cancellation the freed workshop place is usable again.

Registration rows link to manage Passed
Details

The per-row action on the list reads 'Manage', not 'View'.

Cancelled registration detail offers reinstate Passed
Details

A cancelled registration (Sarah Lydon, id 19) shows a reinstate button and not the cancel button.

Reinstate restores a cancelled registration Passed
Details

Un-cancelling flips the status back and the place is taken again.

Reinstating an active registration is rejected Passed
Details

Reinstate only applies to cancelled rows.

Reinstate is blocked when the event is full Passed
Details

If the freed place was taken meanwhile, the row cannot be reinstated.

Reinstate is blocked when the attendee re registered Passed
Details

If the attendee signed up again after cancelling, the cancelled row cannot also be reinstated — that would duplicate an active registration.

Public pages & assets (13)

Test Status What it checks
Home page lists all events Passed
Details

The home page shows every seeded event with its key details.

Home page shows places left Passed
Details

Capacity maths on the cards: the workshop has 12 - 10 = 2 places.

Home page shows a fully booked event Passed
Details

Event 5 (the bootcamp) is seeded to capacity, so the home page shows the 'Fully booked' badge and the availability API reports no places left.

Event detail page shows event information Passed
Details

The event page carries the full description and practical details.

Event detail page shows remaining places Passed
Details

The event page shows how many places are left (2 of 12 for the workshop).

Unknown event returns 404 Passed
Details

Visiting an event that does not exist shows a friendly 404 page.

Availability api returns correct numbers Passed
Details

The JSON endpoint used by the JavaScript availability widget.

Availability api unknown event returns 404 Passed
Details

The availability API returns 404 for an event that does not exist.

Static assets carry a cache busting version Passed
Details

Every static URL gets a ?v=<hash> marker so a redeploy never serves a returning visitor a stale stylesheet or script. A cached old stylesheet against new HTML was what once made the events view show the cards and the table at the same time.

Cache busting version matches file contents Passed
Details

The version is a content hash: it changes only when the file's bytes change, so an edited asset is re-fetched while unchanged ones stay cached.

Footer links to the database viewer Passed
Details

The footer offers a 'DB' link to the read-only database viewer at /db (served by nginx in production, alongside the 'Test status' link).

Home page shows an at a glance stat panel Passed
Details

The home page opens with a stat panel: 9 events across 3 venues, 3 of them free to attend, plus the total places still available.

Events table has sortable headers Passed
Details

The table view's headers carry the sort keys the JavaScript uses, and each row carries the values those sorts read (client-side sorting).

Data model & venues (9)

Test Status What it checks
Three venues are seeded Passed
Details

The seed data creates the three Galway venues, in order.

Every event references a real venue Passed
Details

Each event's venue_id points at an existing venue (the foreign key).

Event capacity never exceeds its venue Passed
Details

The join lets us check an event never books beyond its venue's size.

Event page shows venue name and address Passed
Details

Venue name and address both reach the event page through the join.

Venue page shows its details Passed
Details

The venue page shows the venue's name, address, capacity, description and its list of facilities.

Venue page offers directions to the address Passed
Details

The venue page links to Google Maps directions for the venue address.

Venue page lists the events held there Passed
Details

The venue page lists events held at that venue, and not events held elsewhere.

Unknown venue returns 404 Passed
Details

Requesting a venue that does not exist returns a 404 page.

Home page links each venue to its page Passed
Details

Venue names on the home page are links to that venue's detail page.

This test-status page (5)

Test Status What it checks
Status page shows the summary Passed
Details

The /tests page shows the headline totals, the run time and the commit.

Status page lists tests in plain english Passed
Details

Test names are humanised and grouped under friendly headings.

Status page flags failures in red Passed
Details

A failing test is shown with a red 'Failed' badge on the page.

Status page handles a missing report Passed
Details

With no report file, the page still loads and says so, not a 500.

Footer links to the test status page Passed
Details

Every page's footer links to the /tests status page.