mengw15 opened a new pull request, #7908:
URL: https://github.com/apache/texera/pull/7908

   ### What changes were proposed in this PR?
   
   Extends `agent.service.spec.ts` over the two gaps the issue lists — the state
   accessors' untracked side, and the HTTP failure paths — with 24 tests. 
Measured
   locally with `--coverage --coverage-reporters=lcovonly`:
   
   | `agent.service.ts` | Before | After |
   | --- | --- | --- |
   | lines | 301/329 (91.49 %) | **324/329 (98.48 %)** |
   | branches | 147/186 | **168/186** |
   | functions | 90/103 | **102/103** |
   
   **Accessors — both arms of each `tracking ? … : …`**, by calling each for a
   tracked agent and for an unknown id: `getAgentState` / `isAgentConnected`,
   `getHeadId` (+ observable), `getVisibleSteps`, `getWorkflowObservable`,
   `getAgentWorkflowId`'s `agent?.delegate?.workflowId` chain (missing agent, no
   delegate, full), and `getAgentCount`. `setHoveredMessage` gets a non-null 
step
   that carries no operator access (the else-branch, distinct from the 
already-covered
   null case) and a no-tracking no-op; `getReActStepsByOperatorAccess` gets a 
step
   with no `operatorAccess`. `mapStateToAgentState` is fed `STOPPING`, 
`UNAVAILABLE`
   and an unrecognised value through `getAllAgents`.
   
   **Failure paths:**
   
   - `createAgent` and `updateAgentSettings` — the `err.error?.error || 
err.message
     || "…"` fallback chains. The nested and message arms use a real 
`HttpTestingController`
     flush; the default-label arm is only reachable for an error that is *not* 
an
     `HttpErrorResponse` (which always carries a `message`), so that one case 
throws a
     bare object through a `throwError` stub, noted in a comment.
   - `getReActSteps` — `catchError(() => of([]))` emits `[]` rather than 
propagating.
   - `syncAgentsWithBackend` — the `catchError` (a failed sync is treated as an 
empty
     backend), the `if (existingAgent)` false side (a backend agent not cached 
locally
     is not merged in), and the `if (tracking)` false side (an existing agent 
with no
     tracking entry still has its state updated).
   - `getAllAgents` — the non-pruning branch: a local agent the backend still 
reports
     is kept.
   - `stopGeneration` — both error handlers (a throwing websocket `send`, and 
the REST
     fallback failing).
   - `getOrCreateStateTracking` — the workflow-id back-fill arm, reached by 
re-entering
     through `ensureWorkflowPolling` after tracking was created without an id.
   
   Determinism: every request is flushed synchronously through 
`HttpTestingController`
   and `httpMock.verify()` runs in `afterEach`; errors are raised with 
`flush`/`throwError`
   rather than a live host; `console.error` spies are restored per test; each 
test gets
   a fresh service from `TestBed`, so the internal agent/tracking maps never 
leak. The
   remaining uncovered lines are the websocket transport paths, which the issue 
scoped
   out. No production code was changed.
   
   ### Any related issues, documentation, discussions?
   
   Closes #7889.
   
   ### How was this PR tested?
   
   `ng test --watch=false --include 
src/app/workspace/service/agent/agent.service.spec.ts`
   — 71 passed (47 before, 24 new), repeated 3× for stability; the whole
   `workspace/service/agent/**` folder stays green. `yarn format:ci` clean. 
Failure
   path verified by breaking one assertion in each of the 24 new tests: 24 
failed / 47
   passed, non-zero exit, then restored to green.
   
   ### Was this PR authored or co-authored using generative AI tooling?
   
   Generated-by: Claude Code (Opus 4.8 [1M context])
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to