SnapOtter
3b181dd1ac
test: expand test coverage across unit, integration, e2e, and e2e-docker suites
Add ~210 new tests filling gaps identified by a comprehensive 14-agent
coverage audit. Unit+integration tests go from 9,388 to 9,484 (all passing).
Unit tests (+36):
- AI bridge: OOM fallback path, custom tier option
- Web lib: api-errors, format date/datetime, tool-i18n coverage
Integration tests (+19):
- Format matrix: ai-canvas-expand and find-duplicates added to cross-format matrix
- Adversarial: SVG XXE attacks, SQL injection in settings, request body size
limits, race conditions with identical filenames
E2E Docker (+3):
- ai-canvas-expand tool coverage with HEIC input and edge cases
E2E GUI (~150+):
- Navigation: login rate limiting, ai-canvas-expand in parameterized list
- Responsive: dropzone visibility, text readability, dialog bounds at all viewports
- Keyboard: shortcuts verified from automate, files, tool, and fullscreen pages
- Tool UI: undo/state-reset for 16 tools, crop canvas drag handles, rotate/border
live preview, linked aspect-ratio inputs for resize
- Batch: per-image undo isolation, batch compress/convert/rotate (not just resize)
- Pipeline: tool palette search, step collapse/expand visibility
- Settings: audit log entry verification, system settings persistence, teams CRUD,
role permission toggling
- RBAC: user/editor 403 on roles/teams endpoints, privilege escalation prevention,
cross-role tab parity documented as intentional
- Accessibility: skip-to-content link (WCAG 2.4.1), comprehensive color contrast
for all headings/body/buttons in both themes with DOM-walking background detection
- Resilience: auth expiry 401 redirect, rate limit 429 handling
- Performance: JS heap memory stability for tool navigation, dialog cycling,
upload/clear cycles, rapid page navigation
2026-05-15 21:35:02 +08:00
..
2026-05-12 23:19:20 +08:00
2026-05-09 18:02:58 +08:00
2026-05-12 23:19:20 +08:00
2026-05-12 23:19:20 +08:00
2026-05-15 21:35:02 +08:00
2026-04-24 23:50:47 +08:00
2026-05-13 15:47:28 +08:00
2026-04-29 23:47:19 +08:00
2026-04-22 18:10:04 +08:00
2026-05-07 19:41:30 +08:00
2026-05-14 17:42:07 +08:00
2026-04-22 18:10:04 +08:00
2026-04-22 18:10:04 +08:00
2026-04-22 18:10:04 +08:00
2026-05-09 09:02:29 +08:00
2026-05-13 10:05:42 +08:00
2026-05-08 21:10:39 +08:00
2026-05-01 19:51:47 +08:00
2026-05-09 18:02:58 +08:00
2026-05-09 18:02:58 +08:00
2026-05-09 09:02:29 +08:00
2026-05-09 18:02:58 +08:00
2026-05-08 15:18:38 +08:00
2026-05-14 17:42:07 +08:00
2026-05-01 19:51:47 +08:00
2026-05-14 17:42:07 +08:00
2026-05-09 09:02:29 +08:00
2026-05-11 17:33:51 +08:00
2026-04-26 12:03:08 +08:00
2026-05-01 19:51:47 +08:00
2026-05-11 21:57:40 +08:00
2026-05-01 19:51:47 +08:00
2026-04-22 18:10:04 +08:00
2026-04-22 18:10:04 +08:00
2026-04-24 18:06:29 +08:00
2026-05-14 16:59:40 +08:00
2026-05-01 19:51:47 +08:00
2026-05-01 19:51:47 +08:00
2026-05-13 13:45:08 +08:00
2026-04-22 18:10:04 +08:00
2026-05-09 18:02:58 +08:00
2026-05-12 03:58:42 +08:00
2026-05-13 11:35:33 +08:00
2026-05-15 21:35:02 +08:00
2026-05-09 19:52:11 +08:00
2026-05-15 21:35:02 +08:00
2026-05-14 17:53:40 +08:00
2026-04-26 12:03:08 +08:00
2026-05-09 19:52:11 +08:00
2026-05-09 18:02:58 +08:00
2026-05-11 22:47:10 +08:00
2026-05-09 18:02:58 +08:00
2026-05-08 16:13:34 +08:00
2026-05-08 15:17:18 +08:00
2026-05-01 19:51:47 +08:00
2026-05-01 19:51:47 +08:00
2026-05-13 19:30:37 +08:00
2026-05-09 18:02:58 +08:00
2026-04-22 18:10:04 +08:00
2026-05-01 19:51:47 +08:00
2026-04-26 12:03:08 +08:00
2026-04-22 18:10:04 +08:00
2026-05-13 10:05:42 +08:00
2026-05-09 09:02:29 +08:00
2026-05-09 18:02:58 +08:00
2026-05-07 19:41:30 +08:00
2026-04-22 18:10:04 +08:00
2026-05-01 19:51:47 +08:00
2026-05-01 19:51:47 +08:00
2026-05-09 18:02:58 +08:00
2026-05-01 19:51:47 +08:00
2026-05-13 16:59:13 +08:00
2026-05-01 19:51:47 +08:00
2026-05-13 21:33:50 +08:00
2026-05-13 21:33:50 +08:00
2026-05-09 09:02:29 +08:00
2026-05-09 18:02:58 +08:00
2026-05-09 09:02:29 +08:00
2026-05-09 18:02:58 +08:00
2026-05-09 09:02:29 +08:00
2026-05-09 09:02:29 +08:00
2026-05-12 23:19:20 +08:00
2026-03-26 01:10:51 +08:00
2026-05-14 10:46:24 +08:00
2026-05-09 18:02:58 +08:00
2026-05-13 16:18:28 +08:00
2026-05-01 19:51:47 +08:00
2026-05-09 09:02:29 +08:00
2026-05-09 18:02:58 +08:00
2026-05-14 17:42:07 +08:00
2026-05-09 18:02:58 +08:00