aglinxinyuan opened a new pull request, #7590:
URL: https://github.com/apache/texera/pull/7590
### What changes were proposed in this PR?
`workflow-editor.component.ts` sat at **79.9% of lines and 59.0% of
branches**. The branch number was the real gap: almost half its conditions had
only ever been taken one way.
Adds 42 tests as a new appended block — appended rather than interleaved so
the diff stays off the region PR #6927 touches.
| | Before | After |
|---|---|---|
| Lines | 449/562 (79.9%) | **562/562 (100%)** |
| Branches | 138/234 (59.0%) | **203/234 (86.8%)** |
Nothing needs a browser, which is worth saying because it looks like it
should. The component is almost entirely an event-wiring layer, and both seams
were already established in this spec: triggering paper events against a real
`CellView`, and pushing directly onto the services' subjects.
Covered: the magnet and connection validators, the read-only paper lock, the
recovering-state overrides and the transitions out of recovery, region reshape
and recolour, blank-canvas panning and window resize, the repaint streams for
view-result / reuse-cache / renamed operators and ports, shift-multiselect over
links and comment boxes, port highlighting, the link hover tools, cursor
presence, and the agent hover labels.
### Verification
49 mutations applied and reverted, production diff confirmed empty each
time. Two survived during the build and were dealt with before this was raised
— one test was vacuous because the un-guarded path throws inside an rxjs
subscriber (reported asynchronously, so the assertion on the unchanged popover
still held), and it was rewritten; the other is disclosed below.
Three further mutations were then run independently, chosen for failure
modes the build had not targeted rather than repeating its list:
| Mutation | Result |
|---|---|
| the recovering override reports `Paused` instead of `Recovering` | red |
| a highlighted port keeps the unhighlighted radius | red |
| a blank-canvas click no longer clears the selection | red |
One of my own probes was a **bad mutation rather than a finding**: rewriting
`currentOpenedOperatorID = null` as `= null as any` is semantically identical,
so its survival meant nothing. Re-run properly, the handler is pinned.
### Deliberately not included
- **Line 354's `throw`** on an unknown transition out of recovering. It
fires inside a subscriber, so rxjs reports it via `reportUnhandledError`
asynchronously and `expect(...).toThrow()` does not catch it. Chasing one line
with a test that leaves a stray unhandled error in the run is not worth it.
- **The false arms at lines 726 and 1116** are **dead, not untested**: the
stream is pre-filtered to `hasOperator || hasCommentBox`, so inside the
non-shift `else` a false `hasOperator` implies `hasCommentBox`. This is why
branch coverage stops at 86.8% rather than higher.
- **`handleRegionEvents`' position filter** — one mutation on it survives
and is genuinely unpinnable from this spec; the test that would have claimed it
was removed rather than left overclaiming.
No production file is touched.
### Any related issues, documentation, discussions?
Closes #7589
### How was this PR tested?
```
npx ng test --watch=false --include="**/workflow-editor.component.spec.ts"
```
```
Test Files 1 passed (1)
Tests 104 passed (104)
```
42 new on top of the existing 62. The whole workflow-editor folder (5 spec
files, 167 tests) also stays green, so there is no cross-test leakage. `yarn
format:ci` passes.
### Was this PR authored or co-authored using generative AI tooling?
Generated-by: Claude Code (Opus 5)
--
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]