Fix Summary — User guide — partner portal
Fixed: 2026-03-09
Last updated:
March 10, 2026
Reading time:
3 minutes
File size:
3.49 KB
Changes made
- M1 (
README.md): Corrected the Data Visibility table — “Meetings” row for partners changed from “All upcoming meetings” to “Receive .ics calendar invite via email only”.PartnerMeetingControllerIntegrationTest#should_return403_when_partnerTriesToListMeetingsconfirms partners get 403 onGET /api/v1/partner-meetings; they have no read access to the meeting list. - M2 (
meetings.md): Marked Location field as optional (No) in the meeting creation form table, with note “(shown in .ics invite if provided)”. ThecreateMeeting(eventCode)test helper omits location and expects 201; no test validates that a missing location returns 400. - N1 (
topic-voting.md, For Organisers section): Added thatcompanyNameis required when an organiser suggests a topic on behalf of a partner; omitting it returns 400. Based onTopicControllerIntegrationTest#should_return400_when_organizerSuggestsTopic_withoutCompanyName. - N2 (
meetings.md, Adding Meeting Notes section): Added warning that notes are scoped to their partner company — updating or deleting a note via another partner’s URL returns 404. Based onPartnerNoteControllerIntegrationTest#should_return404_when_updatingNoteFromDifferentPartnerand#should_return404_when_deletingNoteFromDifferentPartner. - N3 (
README.md, new Constraints section): Added that partner company names are limited to 12 characters per ADR-003. Based onPartnerTest#should_enforceMaxLength_when_companyNameTooLong. - N4 (
analytics.md, Time Period Toggle section): Documented thefromYearquery parameter on the dashboard endpoint. Last 5 Years sendsfromYear = currentYear - 5; Full History omits it. Based onPartnerAnalyticsControllerIntegrationTest#should_passFromYearToClient_when_fromYearParamProvided. - N5 (
topic-voting.md, For Organisers section): Added that organisers cannot cast or remove votes — vote endpoints return 403 for the ORGANIZER role. Based onTopicControllerIntegrationTest#should_return403_when_organizerTriesToVote.
Skipped — needs manual decision
- U1: “Data is loaded on demand with a 15-minute cache” — no test validates cache TTL or cache layer presence. May need a unit/integration test or removal of the performance claim if the cache was not implemented.
- U2: “A footer row with column totals and the cost-per-attendee metric” in XLSX —
should_returnXlsx_when_exportRequestedonly checks headers, not file content. Needs an Apache POI-based content assertion or doc should be softened to “may include”. - U3: “If multiple users from the same company vote, only one vote is counted (last action wins)” — all vote tests use different companies. A same-company concurrent-vote scenario is the key edge case but has no test.
- U4: “Description | No | 500 characters” — max-500 constraint may not be enforced server-side; no test validates rejection of a 501-character description.
- U5: “Title | Yes | 255 characters (minimum 5)” — minimum-5 is tested; maximum-255 is not.
- U6: “The calendar file contains exactly two VEVENT blocks” — no test inspects the .ics payload at all. A one-VEVENT implementation would pass all existing tests.
- U7: “.ics follows RFC 5545 with METHOD:REQUEST” — AWS SES attachment format and METHOD value are never verified.
- U8: “The main view is a table sorted by event date (most recent first)” — dashboard test asserts row count and field values but not row ordering.