Skip to content

Commit 37851a1

Browse files
committed
chore(scim): merge main into feat/scim ahead of Phase 8
Brings in SAML hardening (PR #405 SP-initiated, PR #406 IdP-initiated + 2FA enforcement + single-use completion token, PR #407 replay rejection), a11y harness (PR #404 WCAG 2.2 AA + Accessible theme), scheduler/worker fixes, and crowdin sync. Sets a fresh base for Phase 8 (Groups + member-PATCH + Okta E2E) so the final v0.24.0 squash to main lands clean. Resolved conflict in app/[locale]/admin/users/columns.tsx by combining Phase 6 Plan 09's SCIM Provisioner badge + disabled-actions logic with PR #404's aria-label accessibility addition on the actions trigger. Post-merge regen (pnpm generate) + verification: 475/475 unit tests pass across SCIM (Phases 5-7) + SAML PRs + auth-security. Phase 7's JIT-link adapter rewrite and session-callback isActive fresh-read remain green against the new SAML completion flow.
2 parents 00f467c + 012dd5f commit 37851a1

132 files changed

Lines changed: 4605 additions & 183 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/docs/features.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ TestPlanIt is a comprehensive test management platform designed to help teams pl
174174
- **Custom statuses** - Create statuses with custom icons and colors
175175
- **Templates** - Create templates for consistent test case structure
176176
- **User preferences** - Configure theme, locale, timezone, and date/time formats; preference selections are visible from the profile view as well as the editor
177+
- **Accessible theme** - Opt-in high-contrast theme tuned for WCAG 2.2 Level AA (stronger contrast, larger interactive targets, visible focus), selectable per user without affecting other themes
177178
- **Configurations** - Author OS / browser / environment configurations scoped to projects, with an admin UX overhaul covering bulk assign and search
178179

179180
### Security & Compliance

docs/docs/user-guide/user-menu.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,24 @@ Once opened, the menu displays:
1414
1. **Your Name and Email**: Shown at the top for identification.
1515
2. **View Profile**: Navigates you directly to your **[User Profile](./user-profile.md)** page.
1616
3. **Theme**: Opens a sub-menu where you can select your preferred visual theme for the application.
17-
- Options include Light, Dark, System (matches your operating system setting), Green, Orange, and Purple.
17+
- Options include Light, Dark, System (matches your operating system setting), Green, Orange, Purple, and **Accessible**.
18+
- **Accessible** is a high-contrast theme tuned for accessibility (WCAG 2.2 AA): it strengthens text and border contrast, enlarges small interactive targets, and adds a clearly visible keyboard focus ring. Choose it if you rely on these aids — see [Accessibility](#accessibility) below.
1819
- A checkmark indicates the currently active theme.
1920
- Selecting a new theme saves the preference to your profile and reloads the application to apply the change.
2021
4. **Language**: Opens a sub-menu to select the display language for the application interface.
2122
- Available languages are listed (e.g., English, Spanish).
2223
- A checkmark indicates the currently active language.
2324
- Selecting a new language saves the preference to your profile and reloads the application to apply the change.
2425
5. **Sign Out**: Logs you out of your current session and redirects you to the Sign In page.
26+
27+
## Accessibility
28+
29+
TestPlanIt includes an opt-in **Accessible** theme designed to meet the [WCAG 2.2](https://www.w3.org/TR/WCAG22/) Level AA presentation requirements. It is one of the regular theme choices in the **Theme** sub-menu (and on your [User Profile](./user-profile.md) preferences), so you can turn it on or off at any time without affecting other users.
30+
31+
Compared to the default themes, the Accessible theme:
32+
33+
- **Increases contrast** for body text, secondary ("muted") text, and UI borders so content meets the minimum contrast ratio.
34+
- **Enlarges small interactive targets** (such as compact icon buttons and toggles) to at least the recommended minimum size.
35+
- **Adds a high-contrast keyboard focus ring** so the currently focused control is always clearly visible.
36+
37+
Your selection is saved to your profile and persists across sessions and devices. The other themes are left unchanged, so teammates who prefer them are unaffected.

docs/docs/user-guide/user-profile.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ When viewing your own profile, you can view and edit these preferences:
6363

6464
#### Display Preferences
6565

66-
- **Theme**: Choose from Light, Dark, System, Green, Orange, or Purple themes (with color indicators)
66+
- **Theme**: Choose from Light, Dark, System, Green, Orange, Purple, or **Accessible** themes (with color indicators). The Accessible theme is a high-contrast option tuned for [WCAG 2.2](https://www.w3.org/TR/WCAG22/) Level AA — see [Accessibility](./user-menu.md#accessibility)
6767
- **Locale**: Language preference (English, German, Spanish, French, Italian, Dutch, Polish, Portuguese, Turkish, Vietnamese, Russian, Chinese Simplified, Chinese Traditional, Japanese, Korean)
6868
- **Items Per Page**: Number of items to show in paginated tables (10, 25, 50, 100)
6969

pnpm-lock.yaml

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

testplanit/.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ e2e/playwright-report/
6161
e2e/test-results/
6262
.env.e2e
6363

64+
# Accessibility scan (e2e/a11y) — never commit results, seeded fixtures, or reports
65+
e2e/a11y/results/
66+
e2e/a11y/.a11y-fixtures.json
67+
e2e/a11y/playwright-report/
68+
e2e/a11y/test-results/
69+
6470
# DB backups
6571
backups/
6672

testplanit/CHANGELOG.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,39 @@
1+
## [0.35.3](https://github.com/TestPlanIt/testplanit/compare/v0.35.2...v0.35.3) (2026-06-05)
2+
3+
### Bug Fixes
4+
5+
* **auth:** reject replayed SAML assertions ([#407](https://github.com/TestPlanIt/testplanit/issues/407)) ([ab75960](https://github.com/TestPlanIt/testplanit/commit/ab75960f654755b57e68f1110ed4d719e3c0c404)), closes [#406](https://github.com/TestPlanIt/testplanit/issues/406)
6+
7+
## [0.35.2](https://github.com/TestPlanIt/testplanit/compare/v0.35.1...v0.35.2) (2026-06-05)
8+
9+
### Enhancements
10+
11+
* **auth:** support IdP-initiated SAML and harden the SSO completion flow ([#406](https://github.com/TestPlanIt/testplanit/issues/406)) ([7f3a653](https://github.com/TestPlanIt/testplanit/commit/7f3a653cca24427ad2dbfc58e896f8ecc6386eb7)), closes [#405](https://github.com/TestPlanIt/testplanit/issues/405)
12+
13+
## [0.35.1](https://github.com/TestPlanIt/testplanit/compare/v0.35.0...v0.35.1) (2026-06-05)
14+
15+
### Bug Fixes
16+
17+
* **auth:** make SAML SP-initiated login work end-to-end ([#405](https://github.com/TestPlanIt/testplanit/issues/405)) ([e65517c](https://github.com/TestPlanIt/testplanit/commit/e65517c04b71637a1d6b4da82fe860bd79c53df9))
18+
19+
## [0.35.0](https://github.com/TestPlanIt/testplanit/compare/v0.34.12...v0.35.0) (2026-06-05)
20+
21+
### Features
22+
23+
* **a11y:** WCAG 2.2 AA scan harness, Accessible theme, and name/role fixes ([#404](https://github.com/TestPlanIt/testplanit/issues/404)) ([ae18e3e](https://github.com/TestPlanIt/testplanit/commit/ae18e3e47700955d121254c26abe73086aaacfd2))
24+
25+
## [0.34.12](https://github.com/TestPlanIt/testplanit/compare/v0.34.11...v0.34.12) (2026-06-05)
26+
27+
### Bug Fixes
28+
29+
* **scheduler:** skip legacy keyless entries in reconciliation ([#403](https://github.com/TestPlanIt/testplanit/issues/403)) ([0aef3aa](https://github.com/TestPlanIt/testplanit/commit/0aef3aa2c77df27ed88769e4f659e702ea60165b))
30+
31+
## [0.34.11](https://github.com/TestPlanIt/testplanit/compare/v0.34.10...v0.34.11) (2026-06-05)
32+
33+
### Enhancements
34+
35+
* **workers:** BullMQ worker groups via configurable key prefix ([#402](https://github.com/TestPlanIt/testplanit/issues/402)) ([6e677c0](https://github.com/TestPlanIt/testplanit/commit/6e677c0c076a9d498f189960755c6c6b0b1be011))
36+
137
## [0.34.10](https://github.com/TestPlanIt/testplanit/compare/v0.34.9...v0.34.10) (2026-06-04)
238

339
### Enhancements

testplanit/app/[locale]/admin/app-config/columns.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ export function getColumns(
8484
variant="ghost"
8585
className="px-2 py-1 h-auto"
8686
data-testid="edit-config-button"
87+
aria-label={t("actions.edit")}
8788
onClick={() => onEditConfig?.(row.original)}
8889
>
8990
<Edit className="h-4 w-4" />
@@ -92,6 +93,7 @@ export function getColumns(
9293
variant="destructive"
9394
className="px-2 py-1 h-auto"
9495
data-testid="delete-config"
96+
aria-label={t("actions.delete")}
9597
onClick={() => onDeleteConfig?.(row.original)}
9698
>
9799
<Trash2 className="h-4 w-4" />

testplanit/app/[locale]/admin/code-repositories/columns.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ export function getColumns({
168168
size="icon"
169169
className="px-2 py-1 h-auto"
170170
onClick={() => onEdit(row.original)}
171+
aria-label={tCommon("actions.edit")}
171172
>
172173
<Edit className="h-4 w-4" />
173174
</Button>
@@ -176,6 +177,7 @@ export function getColumns({
176177
size="icon"
177178
className="px-2 py-1 h-auto"
178179
onClick={() => onDelete(row.original)}
180+
aria-label={tCommon("actions.delete")}
179181
>
180182
<Trash2 className="h-4 w-4" />
181183
</Button>

testplanit/app/[locale]/admin/configurations/categoryColumns.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,15 @@ export const useColumns = (
135135
variant="ghost"
136136
className="px-2 py-1 h-auto"
137137
onClick={() => onEditCategory?.(row.original)}
138+
aria-label={tCommon("actions.edit")}
138139
>
139140
<SquarePen className="h-5 w-5" />
140141
</Button>
141142
<Button
142143
variant="destructive"
143144
className="px-2 py-1 h-auto"
144145
onClick={() => onDeleteCategory?.(row.original)}
146+
aria-label={tCommon("actions.delete")}
145147
>
146148
<Trash2 className="h-5 w-5" />
147149
</Button>

testplanit/app/[locale]/admin/configurations/configColumns.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,13 +329,15 @@ export const useColumns = (
329329
variant="ghost"
330330
className="px-2 py-1 h-auto"
331331
onClick={() => onEditConfiguration?.(row.original)}
332+
aria-label={t("actions.edit")}
332333
>
333334
<SquarePen className="h-5 w-5" />
334335
</Button>
335336
<Button
336337
variant="destructive"
337338
className="px-2 py-1 h-auto"
338339
onClick={() => onDeleteConfiguration?.(row.original)}
340+
aria-label={t("actions.delete")}
339341
>
340342
<Trash2 className="h-5 w-5" />
341343
</Button>

0 commit comments

Comments
 (0)