feat(signup): Angular version of signup page using existing backend.#1827
Open
gtandersen wants to merge 39 commits into
Open
feat(signup): Angular version of signup page using existing backend.#1827gtandersen wants to merge 39 commits into
gtandersen wants to merge 39 commits into
Conversation
… based on timezone calendar etc. now
Add Cypress E2E tests covering floating time, UTC, TZID, all-day, recurring, and citadel-path TZID event imports. Add mockserver endpoint for ICS calendar import and event reset for test isolation.
ICS properties use semicolons before parameters (DTSTART;TZID=Europe/Oslo:...) not colons. The previous DTSTART:TZID=... format caused the parser to treat the entire TZID string as the property value, breaking TZID, VALUE=DATE, and citadel-path tests.
…ezone flakiness moment.toISOString() produces strings with milliseconds (e.g. "2026-04-02T14:30:00.000Z"), which causes ICAL.js to miss the 'Z' UTC designator at index 19 (it finds '.' instead). This makes ICAL.js treat the time as floating/local rather than UTC, leading to different code paths in convertIcalTimeToDate on UTC CI systems versus local machines. Introduce toIcalISOString() helper that formats without milliseconds and apply it to simpleEvents and recurringEvents test data.
…wser tz Fix event times displaying incorrectly when account timezone differs from browser timezone. The root cause was momentToIcalTime assigning account tz to browser-local hours then converting, causing double-conversion when browser tz != account tz. Now constructs ICAL.Time from UTC fields and converts to target zone, avoiding the double-conversion. - Rewrite momentToIcalTime to go through UTC instead of browser-local - Fix month view template to use Angular date pipe instead of getHours() - Add null safety for timezone lookups and ICAL.Recur access - Extract getRecur() and getAccountTimezone() helpers to reduce duplication - Add E2E tests for London TZID, floating time, and timezone change bugs - Add unit tests for round-trip time, exception storage, and tz change - Extract ICS test helpers into shared support module - Add mockserver timezone fixture endpoints for E2E testing
Tests were hardcoding expected display times (12:00, 14:00) that only matched BST (UTC+1) browsers. CI runs in UTC causing failures. Added expectedDisplayTime() helper that computes what the Angular date pipe would display for a given UTC time in the browser's actual timezone.
… write path Three timezone-related bugs fixed in runbox-calendar-event.ts: 1. All-day events displayed one day earlier because toJSDate() shifted midnight UTC+offset to previous-day UTC. Fix: return noon UTC date in convertIcalTimeToDate() for isDate=true. 2. Citadel-path TZIDs (/citadel.org/.../Europe/Oslo) caused wrong display hour because moment-timezone couldn't resolve them. Fix: extract IANA name from path-style TZIDs in resolveTimezoneName() helper. 3. Multi-day all-day events stored wrong end date because momentToIcalTime() used UTC date parts for new events. Fix: use local date parts for all-day events and set zone to account timezone. Also consolidates e2e timezone tests into calendar-timezone.ts, fixes fragile getHours mock and day-cell selector ambiguity.
- Add navigateToEventMonth to prevent E2E flakiness at month boundaries - Fix ensureTimezone helper indentation in spec file - Add cross-reference comment on all-day end getter duplication - Replace undefined with typed values in test calls - Add negative-offset timezone unit test (America/New_York) - Add dateStrDay helper for consistent date string parsing - Override CSS visibility for add-event button in E2E dialog test - Use input[matInput] selector for dialog title field
…matting - Remove unused win parameter from navigateToEventMonth - Reuse dateStrYear/Month/Day in expectedDisplayTime - Fix ensureTimezone negative offset formatting (-0500 not +-500) - Remove redundant narrating comments in E2E tests
The PUT handler assigned bare IDs like "mock-event-1" while the import
handler uses "calendarId/eventId". When RunboxCalendarEvent re-parses
a fetched event it extracts _calendar from id.split('/')[0], getting
"mock-event-1" instead of "mock cal". This caused filterEvents() to
drop the event because calendarVisibility["mock-event-1"] is undefined.
The dialog-based event creation test was racing with the initial sync's reloadEvents() GET: if the (stale, pre-PUT) response arrived after addEvent() pushed the local event, it replaced this.events with an empty list, causing the event to disappear. Waiting for the initial events load in beforeEach eliminates the race.
Use invoke('val')+trigger('input') instead of type() in the dialog
test to prevent XHR-triggered Angular change detection from
overwriting the input value mid-typing. Also preserve locally-pushed
events in updateEventList() so they aren't dropped if the view
refreshes before the next sync.
…ix' into geir/signup-screen
b951f95 to
6a6e049
Compare
Contributor
Author
|
Possible improvements:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is an AI assisted attempt at upgrading the Runbox 6 signup screen to Runbox 7 in Angular without modifying the backend except for Apache rewriting. Fixes #1354.
Summary
Runbox 7 signup has been implemented as a new Angular route and is now functionally working against the existing signup backend. The page is live in the test environment, visually modernized, responsive, and compatible with the current Apache/nginx routing setup.
What Has Been Delivered
How It Works
The Angular page does not yet use a dedicated signup metadata API. Instead, it fetches the existing legacy signup page and parses it to obtain:
Form submission is then handed off to the existing backend signup flow using the same field names and POST behavior expected by the legacy system.
Backend Impact
No new signup backend business logic was required.
However, this implementation does depend on the existing backend providing:
So this is not purely frontend-only in operational terms, even though no new signup processing code was added.
Testing Status
Implemented:
Unit test coverage now includes:
What has been validated:
What is still environment-dependent:
Current Risks / Technical Debt
Main technical debt:
Risks:
This is acceptable for staging, but not ideal as the long-term architecture.
Recommendation
Proceed with staging now.
Reason:
Recommended next phase after staging:
Suggested Staging Validation