mengw15 opened a new issue, #7700:
URL: https://github.com/apache/texera/issues/7700

   ### Task Summary
   
   Four frontend files each have a handful of uncovered lines and untaken 
branches — 11 partial branches and 13 unhit lines between them, worth roughly 
**+13.3pp / +6.3pp / +5.9pp / +4.5pp** on the respective files. Codecov 
computes `coverage = hits / lines` and does not count a partially-covered line 
as a hit, so both kinds cost percentage points.
   
   **Goal: cover the listed lines and take the missing side of each branch so 
these files reach full coverage.** All four already have a spec; extend it and 
re-run the coverage report to catch anything left. Vitest/jsdom; see 
`frontend/TESTING.md`.
   
   Every case below is reached by **passing a different input value or toggling 
a component flag** — none of them needs a timer, a clock, a specific OS, or 
concurrency, so there is no determinism hazard here. Assert on rendered text / 
bound attributes / component state, never on layout or geometry (zeros under 
jsdom).
   
   ### Behavior to add
   
   **CoeditorUserIconComponent template** 
(`frontend/src/app/workspace/component/coeditor-user-icon/coeditor-user-icon.component.html`,
 53.3%, 2 partials + 5 unhit — the lowest-covered of the four)
   - The shadowing menu is gated on 
`*ngIf="!(coeditorPresenceService.shadowingModeEnabled && …)"` and its negation 
on the next block. Drive the presence-service double with shadowing **off** and 
**on** (and, for the compound condition, with each half flipped) so both menu 
variants render.
   - With each variant rendered, click through the DOM: 
`(click)="shadowCoeditor()"` in the off state and `(click)="stopShadowing()"` 
(plus its "Stop Shadowing" label) in the on state, asserting the service double 
received each call.
   
   **UserVenvComponent** 
(`frontend/src/app/dashboard/component/user/user-venv/user-venv.component.ts`, 
93.7%, 5 partials)
   - `target.name || "(unnamed)"` (two sites) — a package/environment whose 
`name` is empty so the `"(unnamed)"` fallback runs, plus one with a name.
   - `Object.entries(record.packages ?? …)` — a record with `packages` present 
and one where it is null/undefined.
   - `version: match ? match[2] : raw ?? ""` — a requirement line that matches 
the version regex, one that does not (falls back to `raw`), and one where `raw` 
is itself nullish (falls back to `""`).
   - `(row.version ?? "").trim()` — a row with a version and one with `null`.
   
   **FilesUploaderComponent template** 
(`frontend/src/app/dashboard/component/user/files-uploader/files-uploader.component.html`,
 70.6%, 1 partial + 4 unhit)
   - `*ngIf="showUploadAlert && fileUploadingFinished"` — set each flag 
independently (neither, one, both) so the alert block renders only in the 
both-true case and the partial resolves.
   - With the alert rendered, assert its 
`nzMessage="{{fileUploadBannerMessage}}"` text and fire 
`(nzOnClose)="hideBanner()"`, asserting the banner state clears.
   - `(click)="openFileSelector()"` — click the selector trigger and assert the 
delegated call.
   
   **PresetWrapperComponent** 
(`frontend/src/app/workspace/component/preset-wrapper/preset-wrapper.component.ts`,
 89.5%, 3 partials + 4 unhit)
   - `this.searchTerm = this.formControl.value !== null ? … : …` — a form 
control holding a value and one holding `null`.
   - `this.searchTerm = (value ?? "").toString()` — call with a value and with 
`null`/`undefined`.
   - `if (this.presetMenuVisible)` — with the menu open and closed.
   - The unhit lines: the `filter(presets => presets.type === this.presetType 
&& presets.target === …)` callback (emit presets that match and that do not, so 
the predicate runs both ways), the apply handler's `this.basePreset = 
applyEvent.preset` assignment, and the `FormlyFieldConfig` builder (call the 
method that constructs it).
   
   ### Task Type
   
   - [ ] Refactor / Cleanup
   - [ ] DevOps / Deployment / CI
   - [x] Testing / QA
   - [ ] Documentation
   - [ ] Performance
   - [ ] Other
   


-- 
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