feat(apollo-vertex): add Solution Tests data layer (collection-backed hooks) [AGVSOL-3355]#790
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Dependency License Review
License distribution
Excluded packages
|
The UI + registry wiring for the Solution Tests component. Stacked on the data layer PR (#790) — the view consumes the adapter/context/config/hooks from there. - SolutionTestsView + KPI bar, tabs, expandable rows, run-details dialog, evaluator results, JSON viewer, delete confirm, user-message popover - index.ts barrel; registry.json entry (installable as @uipath/solution-tests); tsconfig path alias - SolutionTestsTemplate demo (in-memory mock) + Templates docs page and nav Merge after #790. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Introduces the initial data-layer foundation for the Solution Tests registry item in Apollo Vertex (adapter contract, DataFabric-backed default adapter, context/config wiring, and TanStack Query hook), plus supporting types/utilities and new English i18n keys needed by the upcoming UI.
Changes:
- Added
SolutionTestsAdaptercontract and a default DataFabric/Orchestrator-backed adapter factory (createDataFabricAdapter). - Added provider/context + resolved presentation config, and a TanStack Query-based hook for reads/mutations with polling support.
- Added shared view-model types, status-to-badge maps, user-message parsing helpers, and new
en.jsontranslation keys.
Reviewed changes
Copilot reviewed 11 out of 11 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| apps/apollo-vertex/registry/solution-tests/adapter.ts | Defines the adapter interface + mutation/attachment types used by the Solution Tests view. |
| apps/apollo-vertex/registry/solution-tests/config.ts | Defines per-vertical presentation configuration and default resolution. |
| apps/apollo-vertex/registry/solution-tests/context.tsx | Provides adapter/config via React context for deep component access. |
| apps/apollo-vertex/registry/solution-tests/data-fabric-adapter.ts | Implements a default adapter over a minimal “data port” for DataFabric queries + triggers/functions. |
| apps/apollo-vertex/registry/solution-tests/hooks.ts | Documents a future vs-core collection-backed hook API (stubbed, not wired). |
| apps/apollo-vertex/registry/solution-tests/status-maps.ts | Maps numeric statuses to badge variants / classes for display. |
| apps/apollo-vertex/registry/solution-tests/types.ts | Declares domain-neutral Solution Tests view model types + default label maps. |
| apps/apollo-vertex/registry/solution-tests/use-solution-tests-data.ts | Adds TanStack Query reads/mutations and run polling behavior for the view. |
| apps/apollo-vertex/registry/solution-tests/user-messages.ts | Adds parsing + severity helpers for user-messages payloads. |
| apps/apollo-vertex/registry/solution-tests/utils.ts | Adds formatting helpers and small run/result utilities. |
| apps/apollo-vertex/locales/en.json | Adds new English translation keys required by the Solution Tests feature. |
1258a4c to
e3b6b1c
Compare
The UI + registry wiring for the Solution Tests component. Stacked on the data layer PR (#790) — the view consumes the adapter/context/config/hooks from there. - SolutionTestsView + KPI bar, tabs, expandable rows, run-details dialog, evaluator results, JSON viewer, delete confirm, user-message popover - index.ts barrel; registry.json entry (installable as @uipath/solution-tests); tsconfig path alias - SolutionTestsTemplate demo (in-memory mock) + Templates docs page and nav Merge after #790. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
e3b6b1c to
b9d2ae2
Compare
The UI + registry wiring for the Solution Tests component. Stacked on the data layer PR (#790) — the view consumes the adapter/context/config/hooks from there. - SolutionTestsView + KPI bar, tabs, expandable rows, run-details dialog, evaluator results, JSON viewer, delete confirm, user-message popover - index.ts barrel; registry.json entry (installable as @uipath/solution-tests); tsconfig path alias - SolutionTestsTemplate demo (in-memory mock) + Templates docs page and nav Merge after #790. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
b9d2ae2 to
cf96c5b
Compare
The UI + registry wiring for the Solution Tests component, stacked on the data layer PR (#790). The view is presentational (dumb): data + handlers arrive via props/render-props from a smart container that calls the collection hooks. The demo renders the dumb view with in-memory mock data (no vs-core), mirroring the GroupMembershipGuard demo.
cf96c5b to
7992e7f
Compare
The UI + registry wiring for the Solution Tests component, stacked on the data layer PR (#790). The view is presentational (dumb): data + handlers arrive via props/render-props from a smart container that calls the collection hooks. The demo renders the dumb view with in-memory mock data (no vs-core), mirroring the GroupMembershipGuard demo.
7992e7f to
fde61bb
Compare
The UI + registry wiring for the Solution Tests component, stacked on the data layer PR (#790). The view is presentational (dumb): data + handlers arrive via props/render-props from a smart container that calls the collection hooks. The demo renders the dumb view with in-memory mock data (no vs-core), mirroring the GroupMembershipGuard demo.
fde61bb to
d9b3be3
Compare
40cadfb to
ee2e7dd
Compare
The UI + registry wiring for the Solution Tests component, stacked on the data layer PR (#790). The view is presentational (dumb): data + handlers arrive via props/render-props from a smart container that calls the collection hooks. The demo renders the dumb view with in-memory mock data (no vs-core), mirroring the GroupMembershipGuard demo.
The UI + registry wiring for the Solution Tests component, stacked on the data layer PR (#790). The view is presentational (dumb): data + handlers arrive via props/render-props from a smart container that calls the collection hooks. The demo renders the dumb view with in-memory mock data (no vs-core), mirroring the GroupMembershipGuard demo.
ee2e7dd to
32d7322
Compare
32d7322 to
3c9a1e1
Compare
The UI + registry wiring for the Solution Tests component, stacked on the data layer PR (#790). The view is presentational (dumb): data + handlers arrive via props/render-props from a smart container that calls the collection hooks. The demo renders the dumb view with in-memory mock data (no vs-core), mirroring the GroupMembershipGuard demo.
The UI + registry wiring for the Solution Tests component, stacked on the data layer PR (#790). The view is presentational (dumb): data + handlers arrive via props/render-props from a smart container that calls the collection hooks. The demo renders the dumb view with in-memory mock data (no vs-core), mirroring the GroupMembershipGuard demo.
3c9a1e1 to
d72f308
Compare
The UI + registry wiring for the Solution Tests component, stacked on the data layer PR (#790). The view is presentational (dumb): data + handlers arrive via props/render-props from a smart container that calls the collection hooks. The demo renders the dumb view with in-memory mock data (no vs-core), mirroring the GroupMembershipGuard demo.
d72f308 to
9d3e80f
Compare
The UI + registry wiring for the Solution Tests component, stacked on the data layer PR (#790). The view is presentational (dumb): data + handlers arrive via props/render-props from a smart container that calls the collection hooks. The demo renders the dumb view with in-memory mock data (no vs-core), mirroring the GroupMembershipGuard demo.
RobinMennens-UiPath
left a comment
There was a problem hiding this comment.
A few changes requested, focused on configurability and one likely-inert filter. Inline comments below. Overall the move-over is clean and domain-neutral (no FINS-specific coupling found); the main asks are around making per-vertical values configurable and confirming the run-results filter actually works against the raw collection.
📊 Coverage by packageNo JS/TS source changes detected under
"Overall" is each package's own |
RobinMennens-UiPath
left a comment
There was a problem hiding this comment.
Re-reviewed after the rebase. All four requested changes are addressed:
PASS_THRESHOLDis nowpassThreshold?: numberonSolutionTestsConfig(defaults viaDEFAULT_PASS_THRESHOLD).isBaselineJobResultnow joinsUiPathSTJobsto readJobRoleoff the bare id, so the previously inert entry-point filter actually drops rows now.detectFailureunwrapsoutput_dataonce and checksstatus_code/error/messageagainst the same object, covering both contracts.- Constant/variable renames done (
RUN_TESTS_SLUG,AUTOMATION_FUNCTIONS_SLUG,AUTOMATION_FUNCTION_PATH,transaction).
Also sanity-checked the broader restructure (react-query useMutation adoption, removal of the collections.ts boundary helper in favor of typed stubs, entity-id plumbing for attachments). pnpm typecheck and pnpm lint both pass locally. LGTM.
KokoMilev
left a comment
There was a problem hiding this comment.
Copilot woke up 😆 , let me know when you resolve its comments, otherwise it looks good to me.
Summary
The data layer for the Solution Tests component, split out of #782 so it
can land and be reviewed ahead of the UI. The view depends on this, so the
components PR (#782) is stacked on this branch and merges after it.
This layer is collection-backed: reads stream from the vs-core 2.x Solution Test
collections, and writes go through the standard UiPath Solution Test API
triggers. There is no bespoke adapter or local read cache.
Contents (all under
registry/solution-tests/, plusen.jsonkeys):use-solution-tests,use-solution-test-batch-runs,use-solution-test-runs,use-baseline-jobs,use-run-resultsread theUiPathST*collections directly fromsolution.api.collections.solutionTestsviauseLiveQuery. A dev-only typeshim in
types/optional-deps.d.tstypes the name-keyed collection map for thisrepo's own typecheck; consumers rely on their own vs-core typings (nothing is
shipped to override them).
actions.ts(theSolutionTestsActionsinterface; each methodrejects on failure),
create-actions.ts(createSolutionTestActionsbuilds itfrom
triggerBaseUrl+getToken), and the mutation hooks (mutations.ts+use-force-stop.ts) run actions through TanStack Query'suseMutation.Toggle-active is a direct collection
.update()inuse-solution-tests;attachment reads use the uipath-typescript SDK (
attachments.ts).context.tsx(SolutionTestsProvider+ context hooks),config.ts(SolutionTestsConfig),constants.ts(collection names, triggerslugs/paths, labels, thresholds: the single setup file),
hooks.ts(barrel).user-messages.tsvalidates parsed user-message payloadswith
zod.types.ts,status-maps.ts,utils.ts, and theen.jsontranslation keys.New runtime dependencies declared on the registry item:
@tanstack/react-query(mutations) and
zod(validation), alongside the existing@tanstack/react-db,@uipath/vs-core, and@uipath/uipath-typescript.Consumer interface
The smart container has four inputs, all on
SolutionTestsProvider. Reads areimplicit (the
UiPathST*collections on the consumer's vs-core solution); writes,attachment resolution, and presentation are explicit props:
A consumer is responsible for exactly four things:
UiPathST*collections exist on the vs-coresolution (
solution.api.collections.solutionTests). The hooks query themreactively; no further data wiring.
triggerBaseUrl+getToken. The provider builds the wholewrite surface (run, delete, force-stop, adopt / update / remove baseline) from
them. Toggle-active isn't a trigger and needs no wiring. Mutations use
useMutation, so the container must render under aQueryClientProvider(vs-core's solution provider supplies one).
getEntityId. DataFabric addresses entities by GUID,not name, and vs-core doesn't surface the name-to-GUID mapping, so attachment
reads (expected / actual output, evaluator results) need the consumer to
resolve it (typically from its generated entities map).
config.subjectColumns(and optionallygetSubjectHref/subjectNoun/passThreshold) to flavor the table for thevertical.
Everything else (evaluator labels, status labels, the poll interval) is
hard-coded in
constants.ts. The pass threshold defaults to0.9there but isoverridable via
config.passThreshold.Testing
pnpm typecheck,pnpm lint,pnpm format, andpnpm registry:buildpass.👨 Generated with Kluijt Code