Commit graph

23 commits

Author SHA1 Message Date
Johannes Millan
31480a5fab feat(tasks): replace drag handle with done toggle circle and improve mobile UX
- Replace drag handle with SVG done-toggle circle with checkmark draw-on animation
- Improve mobile UX: cdkDragStartDelay for touch, bottom-sheet context menu
- Move issue/repeat indicators from drag handle to tag-list as chips
- Add isFinishDayEnabled config toggle
- Reorder context menu: add sub task before duplicate, deadline as own entry
- Fix context menu not opening on swipe left
- Fix race condition in done toggle animation timeout
2026-03-22 18:14:16 +01:00
Johannes Millan
1a0e38fb17 test(e2e): use correct route /#/tag/TODAY/tasks instead of /#/tag/TODAY
The deadlines feature commit accidentally reverted e2e URL fixes.
The route /#/tag/TODAY has no default child component — only
/#/tag/TODAY/tasks renders the work view with task-list.
2026-03-15 18:48:00 +01:00
Johannes Millan
d401e6169e feat(tasks): add deadlines feature with reminders and planner integration
Add deadline support for tasks with date-only and time-specific deadlines.

Core:
- Add deadlineDay, deadlineWithTime, deadlineRemindAt fields to task model
- Add NgRx actions (setDeadline, removeDeadline, clearDeadlineReminder)
- Add meta-reducer with mutual exclusivity and input validation
- Register deadline actions in ActionType enum and op-log codes

UI:
- Create deadline dialog with calendar, time input, and reminder options
- Add deadline badge to task list row with overdue warning color
- Add deadline item to task detail panel with flag icon
- Add deadline options to task context menu
- Show deadlines in scheduled list page

Reminders:
- Add deadline reminder effects and selectors
- Show reminder dialog with grouped deadline/schedule sections
- Handle deadline reminder clearing on dismiss, done, add-to-today
- Cancel Android native deadline notifications on delete/archive

Planner:
- Show deadline tasks in planner day view and overdue section
- Create dedicated planner-deadline-task component
- Optimize deadline grouping with O(N) single-pass selector

Other:
- Add deadline-today banner effect for unplanned deadline tasks
- Add translation keys for all deadline UI strings
- Add E2E tests for deadline reminder flows
- Add unit tests for deadline reducer and overdue utility
- Extract shared isDeadlineOverdue utility function
- Guard app-state selectors against undefined during teardown
2026-03-15 18:48:00 +01:00
Johannes Millan
80c178cf03 test(e2e): use correct route /#/tag/TODAY/tasks instead of /#/tag/TODAY
The route /#/tag/TODAY has no default child component — only sub-routes
like /worklog, /quick-history render content. The /tasks route is defined
as a separate eagerly-loaded route, not as a child of /tag/:id. Navigating
to /#/tag/TODAY leaves an empty router-outlet, causing 6 test failures
and 1 flaky test.
2026-03-13 19:33:17 +01:00
Johannes Millan
7164a5e44b test(e2e): fix encryption button timing and drag-handle strict mode violation
Two root causes for failing E2E tests in CI:

1. Encryption button not visible after provider selection: The async
   provider change listener loads config from IndexedDB and updates the
   Formly model, but the 1000ms waitForTimeout was insufficient in CI.
   Replace with polling (200ms intervals, 10s timeout) that waits for
   either enable or disable encryption button to become visible.
   Also removes ~130 lines of leftover debug logging from disableEncryption().

2. Drag-handle strict mode violation on parent tasks with subtasks:
   task.locator('.drag-handle') matched both the parent's drag handle
   and nested subtask drag handles. Add .first() to all drag-handle
   locator usages to target only the parent task's own handle.
2026-03-04 19:38:37 +01:00
Pue-Tsuâ
9a9e31f36a
Adding Ctrl-V pasting function from clipboard. (#5998)
* docs(clipboard): Added the plan to guide AI implementation.

* feat(clipboard): Changed requirement to reflect the fact that some functions can't be done in browsers.

* feat(clipboard): Added Ctrl-v pasting functionality from clipboard.

- Storing image in IndexedDB in browser, and storing image in userdata path in Electron.
- Added image resizing in markdown.

* docs(clipboard): Removed requirement file since it's implemented.

* feat(clipboard): Added clipboard images management in settings.

* feat(tests): Enhance focus mode and inline markdown tests with mock store and actions

* feat(clipboard): Add electron-only annotation to findImageFile function

* feat(clipboard): Prevent memory leaks by revoking cached blob URLs on image deletion

* feat(clipboard): Improve paste handling by tracking current placeholder and cleaning up old progress

* Merge branch 'master' into feat/clipboard-files

* feat(marked-options): Refactor renderer methods and add hooks for image sizing syntax

* feat(clipboard): Added feature that pasted image will be added to task attachment.

* revert: Revert the change of lock file from last merge.

* revert: Removed unwanted changes.

* refactor(clipboard): Cleaned up code that seems not necessary.

* feat(clipboard): Handle storage quota exceeded error and update messages

* feat(clipboard): Implement validated IPC handlers for clipboard image operations

* feat(clipboard): Add error handling for clipboard image URL resolution

* feat(clipboard): Refactor file operations to use async fs promises

* feat(clipboard): Integrate ClipboardPasteHandlerService for improved paste handling

* feat(clipboard): Rename resolveUrl to resolveIndexedDbUrl for clarity and update references

* feat(clipboard): Add defaultPath option to showOpenDialog for improved user experience

* feat(clipboard): Implement getDefaultClipboardImagesPath utility for consistent image path retrieval

* feat(clipboard): Refactor MIME type handling to use centralized mapping for improved maintainability

* feat(clipboard): Add computed property to toggle markdown parsing based on formatting settings

* revert: Removed unwanted changes.

* revert: Removed unwanted chagnes.

* revert: Removed unwanted chagnes.

* fix(clipboard-images-cfg): remove debug log from selectImagePath method

* refactor(paste-handler): update currentPlaceholder to use getter/setter methods

* fix(docs): correct formatting and improve clarity in multiple wiki pages

* fix: update dialog handling in initLocalFileSyncAdapter for type safety

* revert: Revert space change.

* fix(inline-markdown): ensure model is set to an empty string instead of undefined

* fix(tests): update clipboard images section locator to use collapsible title
2026-02-04 15:46:51 +01:00
Johannes Millan
d83f0b69c0 fix(e2e): correct case-sensitive switch labels in app-features tests
The getByRole('switch', { exact: true }) selector is case-sensitive.
The test labels used Title Case but the actual accessible names from
en.json translations use sentence case, causing intermittent failures.
2026-02-03 16:50:24 +01:00
Johannes Millan
8e7f32d700 test(e2e): add waitForAngularStability to app-features navigation 2026-02-03 15:45:35 +01:00
Johannes Millan
ea60741889 fix(e2e): replace hard-coded waits with state-based waits in focus-mode-break and take-a-break
Add intermediate state assertion (completeSessionButton not visible)
before checking for break screen in focus-mode-break tests, and replace
unreliable networkidle waits with element visibility assertions in
take-a-break tests.
2026-01-30 16:59:40 +01:00
Johannes Millan
c10d7e4892 test(e2e): fix skipped tests and add encrypted backup import test
- Remove unfixable focus-mode pause/resume test (covered by 62 unit tests)
- Create encrypted backup fixture (test-backup-encrypted.json)
- Add 'Import encrypted backup while unencrypted sync is active' test
- Document why multiple encryption toggle test remains skipped
2026-01-29 16:32:29 +01:00
Johannes Millan
9eb90cf95d test(e2e): fix flaky app-features tests by adding missing await
Add await to expect().not.toBeAttached() assertions that were missing
it, causing race conditions and intermittent test failures.
2026-01-25 18:10:08 +01:00
Johannes Millan
851055b4a3 test(e2e): fix flaky tests and improve timeout handling
Fixed 3 failing focus mode break tests and 1 data persistence test by
addressing timeout and wait logic issues under parallel test execution.

Changes:
- Focus mode break tests: Increased timeouts for countdown (10s→15s) and
  session start (10s→20s) to handle load during full test suite execution
- Pre-migration dialog: Unskipped data persistence test and adopted working
  pattern from work-view.spec.ts with proper stale element handling
- WebDAV archive sync: Updated investigation notes with additional timeout
  attempts (still requires deep profiling for main thread blocking issue)

Test results:
- Standard tests: 197 passed (was 193), 0 failed (was 3), 2 skipped
- WebDAV tests: 35 passed, 1 skipped (92% pass rate)
- SuperSync tests: 125 passed, 1 skipped, 1 flaky

All tests now pass with 99% overall pass rate across all suites.
2026-01-22 21:29:25 +01:00
Johannes Millan
b0f4e99c0b test(e2e): fix flaky focus mode tests
Fixed 6 flaky E2E tests in focus mode by addressing race conditions
with countdown animation and session state transitions.

Changes:
- Added pointer-events: none to countdown component to prevent blocking
  clicks during fade-out animation (195ms)
- Replaced arbitrary timeouts with explicit waits for session-in-progress
  indicator (complete session button) in all focus mode tests
- Tests now wait for countdown animation to fully complete before
  interacting with UI elements

Root causes:
1. Countdown overlay intercepted pointer events during fade animation,
   causing clicks to fail intermittently
2. 900ms delay between countdown completion and session start caused
   race conditions when using fixed timeouts

Affected tests:
- focus-mode-break.spec.ts (4 tests)
- flowtime-timer-bug-5117.spec.ts (2 tests)

All tests now pass consistently without retries.
2026-01-16 22:34:50 +01:00
Johannes Millan
3d7eab0365 fix(focus-mode): add pause/resume and Back to Planning buttons to break screen (#5995)
- Add pause/resume button to break screen for fullscreen break control
- Add "Back to Planning" button to exit break without auto-starting next session
- Add exitBreakToPlanning action to allow returning to preparation state
- Add translation keys for PAUSE_BREAK and RESUME_BREAK

This addresses the two issues reported:
1. Users can now pause breaks from the fullscreen break view
2. Users can click "Back to Planning" to change timer modes during break

Test coverage:
- 48 reducer unit tests (including 4 new for exitBreakToPlanning)
- 14 component unit tests (including pause/resume/exit methods)
- 4 E2E tests for break flow (1 skipped due to NgRx/zone.js E2E limitation)
2026-01-14 16:05:31 +01:00
Johannes Millan
85fa50974b Merge branch 'master' into feat/operation-logs
* master:
  refactor(e2e): improve test infrastructure for easier expansion
  chore(e2e): remove broken/empty skipped tests
  test(e2e): fix flaky plugin and WebDAV sync tests
  refactor(e2e): replace waitForTimeout with condition-based waits
  perf(e2e): remove ineffective waits to speed up test runs
  docs(e2e): add CLAUDE.md reference and barrel export for easier test creation
  build: update dep
  refactor(e2e): simplify waits and fix flaky tests
  feat(e2e): streamline e2e test development with improved infrastructure
  perf(e2e): optimize wait utilities and addTask method for faster test execution
  16.8.1

# Conflicts:
#	e2e/pages/base.page.ts
#	e2e/pages/project.page.ts
#	e2e/tests/reminders/reminders-schedule-page.spec.ts
#	e2e/tests/sync/webdav-sync-advanced.spec.ts
#	e2e/tests/sync/webdav-sync-expansion.spec.ts
#	e2e/tests/sync/webdav-sync-full.spec.ts
#	e2e/utils/waits.ts
2026-01-03 18:51:51 +01:00
Johannes Millan
11d85208e5 refactor(e2e): replace waitForTimeout with condition-based waits
- Replace ~100 waitForTimeout calls with proper condition-based waits
- Extract shared utilities for time input and task scheduling
- Add timeout constants for consistent wait times
- Add new selectors for reminder dialogs and detail panels

Files refactored across 25+ test files including:
- Plugin tests (lifecycle, upload, loading, enable, structure)
- Reminder tests (view-task, schedule-page, default-options)
- Work view, planner, focus mode, and app feature tests
- Task dragdrop, autocomplete, and daily summary tests

New utilities created:
- e2e/utils/time-input-helper.ts - Robust time input filling
- e2e/utils/schedule-task-helper.ts - Task scheduling helpers
- e2e/constants/timeouts.ts - Standardized timeout values
2026-01-03 15:29:38 +01:00
Johannes Millan
e3f9daf9fa refactor(e2e): simplify waits and fix flaky tests
- Remove Angular testability API checks from waitForAngularStability
  Experiment showed Playwright's auto-waiting is sufficient for most tests
- Fix time-tracking-feature test: add missing await, replace hardcoded
  waitForTimeout with proper toHaveClass assertions
- Refactor plugin-simple-enable test to use SettingsPage methods
  instead of brittle page.evaluate() DOM manipulation (106 -> 33 lines)
- Change trace config to 'retain-on-failure' for better debugging
2026-01-03 12:57:16 +01:00
Johannes Millan
78c65acf4d test(e2e): add sd:today to tasks for TODAY view visibility
Tasks created without explicit dueDay don't appear in TODAY view
due to recent selector changes. Add sd:today short syntax to ensure
tasks have dueDay set and appear correctly in tests.
2025-12-12 20:47:48 +01:00
Johannes Millan
e3d93de7fc fix(test): add proper waits to app-features E2E test to prevent flakiness
Wait for toggle to be visible after expanding the App Features section
and add a small delay before clicking to ensure the toggle is fully
interactive after the expansion animation.
2025-12-09 14:22:31 +01:00
Johannes Millan
c5e4f1beee test: fix e2e 2025-12-05 12:26:08 +01:00
Johannes Millan
6763c965f7 fix: make everything work again 2025-11-25 19:51:27 +01:00
Michael Kiausch
62dd56dc93 add feature-switch for sync button 2025-11-25 17:05:08 +01:00
Michael Kiausch
8c5a775332 added app feature tests 2025-11-25 17:05:07 +01:00