aglinxinyuan opened a new pull request, #7727:
URL: https://github.com/apache/texera/pull/7727
### What changes were proposed in this PR?
Two frontend files, bundled because one needed a proven remedy and the other
was a plain gap.
| File | Before | After |
|---|---|---|
| `search-results.component.html` | **0/33 lines, 0/6 branches, 0/6
functions** | **33/33, 6/6, 6/6** |
| `workflow-compiling.service.ts` | 140/157 lines, 90/105 branches, 32/36
functions | **157/157, 103/105, 36/36** |
Tests **50 -> 73**. `search-results.component.ts` also rises to 42/42 lines
as a side effect.
Both files reach 100% of their lines, which necessarily covers all 19 of the
lines Codecov reports missed (11 + 8).
### The template was not undertested — it was unattributed
This is #7458, and this instance is worth recording because it presents as
the opposite. The existing `describe` uses `TestBed.overrideComponent` and
**does render and assert on the DOM**: it checks `texera-list-item` counts,
`.card-entry` nodes, and load-more visibility. The template still measured **0
of 33 lines**. Rendering happened; nothing was attributed. Second fingerprint:
under the override the whole template function was attributed to the `.ts` as
one uncovered span `(55,35)-(79)`.
The appended `describe` keeps its own `TestBed` with no override and the
real `ListItemComponent`, so the existing tests and the `StubListItemComponent`
are untouched.
### Verification
23 mutations, **23 killed, no survivors** — each applied one at a time with
the production file byte-compared after every revert, and the failing test read
by name.
Two mutations had to be reformulated, which is the part worth flagging:
- Exchanging the compile response's success/failure legs is a **TypeScript
narrowing error**, not a behaviour change. A mutation that only fails to
compile proves nothing, so it was discarded and replaced with three semantic
mutants: the success leg additionally requiring zero operator errors, the state
stream being notified only from the failed leg, and the failed leg reusing the
previous errors.
- Dropping the `&& cardTemplate` guard breaks `strictTemplates` narrowing,
so that mutant carries a companion `[ngTemplateOutlet]="cardTemplate!"` purely
to keep it compiling. The behaviour change — card view rendering with no
template — is the mutation, and it died on a DOM assertion.
One survivor was found and closed during the build rather than reported:
`[currentUid]="this.currentUid"` replaced by `entry.ownerId` passed, because
every fixture entry shared an owner. The new test gives two entries
distinguishable owners (7 and 99), asserts on the rendered `.owner-badge`, then
re-points `currentUid` to 99 and asserts the badge moves — so a constant
replacement dies too.
### Deliberately not included
Two branches in `workflow-compiling.service.ts` are structurally
unreachable, so it cannot exceed 103/105:
- `if (!dynamicSchema) return undefined` (line 241) is dead:
`DynamicSchemaService.getDynamicSchema()` returns a non-nullable
`OperatorSchema` and **throws** on a miss. This is also the file's only
uncovered statement.
- `if (schemas.length > 0)` (line 285) sits inside `if
(linksToThisPort.length > 0)`, where `schemas` is precisely that array mapped,
so the false leg cannot occur.
A production bug is reported rather than pinned: `getAttrNames` (line 362)
tests required-ness against the **root** schema via
`operatorSchema.jsonSchema.required?.includes(attrName)`, while
`DynamicSchemaService.mutateProperty` recurses into nested
`properties`/`definitions`/`items`. So a nested property that is required in
its own sub-schema still gets `""` appended to its enum, and a nested optional
property whose name collides with a root-level required one loses that escape
hatch. The new tests exercise only root-level properties, so neither behaviour
is cemented.
Also noted, not cemented: `getOperatorInputSchemaMap` is a getter that
mutates `currentCompilationStateInfo`, flipping the whole compilation to
`Failed` when two links disagree on a port schema.
No production file is touched.
### Any related issues, documentation, discussions?
Closes #7726
### How was this PR tested?
```
npx ng test --watch=false --include="**/workflow-compiling.service.spec.ts"
--include="**/search-results.component.spec.ts"
```
```
Test Files 2 passed (2)
Tests 73 passed (73)
```
Coverage measured with `--coverage` on the same run. `yarn format:ci`
passes, and was checked non-vacuously with a positive control: a deliberately
misformatted throwaway file made it exit 1 and name the file, then was removed.
### 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]