mengw15 opened a new pull request, #7503:
URL: https://github.com/apache/texera/pull/7503
### What changes were proposed in this PR?
Covers the branches the three specs never reached. 22 new tests; every
function in all
three files is now executed.
| file | statements | branches | functions |
| --- | --- | --- | --- |
| `user-computing-unit.component.ts` | 37/37 | 12/12 | 11/11 |
| `user-dataset-file-renderer.component.ts` | 142/142 | 65/68 | 25/25 |
| `files-uploader.component.ts` | 139/140 | 78/82 | 37/37 |
**UserComputingUnitComponent** — the session subscription updating
`isLogin`/`currentUid`,
the mapping of fetched units into dashboard entries, the 1s poller (it
refreshes on each
tick and stops once the component is destroyed), and both arms of
`terminateComputingUnit`.
The poll test calls `ngOnInit()` directly rather than `detectChanges()`: the
fixture's
NgZone is created outside the `fakeAsync` zone, so a poll scheduled through
it lands on
the real timer queue where `tick()` cannot drive it.
`discardPeriodicTasks()` drops the
unbounded interval, and `fixture.destroy()` in `afterEach` keeps it from
ticking into a
later test.
**UserDatasetFileRendererComponent** — the spreadsheet branch (previously
unhit in full),
the CSV empty-result and read-failure arms, and the guard that stops a fetch
when the
dataset ids are missing.
The spreadsheet tests build a real `.xlsx` with JSZip (already a dependency,
and already
used this way in `user-workflow.component.spec.ts`) and run the real
`read-excel-file`
rather than mocking the module; one workbook leaves a gap in a row so both
arms of the
cell-to-string mapping run. jsdom's `Blob` has no `arrayBuffer()`, which is
how
`read-excel-file` reads its input, so the helper attaches the buffer it just
built to that
one blob instead of patching `Blob.prototype`. For CSV, `FileReader` is
replaced with a
fake that settles on a microtask, which is what makes the empty-result and
error arms
deterministic — `Papa.parse` cannot be spied here (the existing spec
documents why).
**FilesUploaderComponent** — the drop paths that never yield an uploadable
file (oversized
file, dropped directory, unreadable entry, including the singular/plural
failure banner),
the lookup paths (no dataset context, failed lookup, null result, and an
unexpected failure
of the whole drop with and without an error message), the fallback used when
a conflicting
path ends in a separator, the settings-request failure the constructor
swallows, and the
teardown that stops a late setting reaching a destroyed component.
No production code was changed.
### Coverage that is not reachable
Three branches and one statement stay uncovered because no test can reach
them:
- `user-dataset-file-renderer.component.ts:203` and `:223` — the
`?? this.DEFAULT_MAX_SIZE` / `|| this.DEFAULT_MAX_SIZE` fallbacks. Both
are reached only
after `isPreviewSupported` has confirmed via `hasOwnProperty` that the key
exists in
`MIME_TYPE_SIZE_LIMITS_MB`, and every value in that map is a positive
number, so neither
fallback can be taken.
- `user-dataset-file-renderer.component.ts:372` — `if (cell != "")` inside
`for (const cell in row)`. `for...in` yields index strings ("0", "1", …),
which are never
`""`, so the condition is always true and the "filter out all empty row"
step filters
nothing. That is a defect rather than a coverage gap.
- `files-uploader.component.ts:58` — a statement whose source range runs
backwards
(`58:35 -> 50:None`) into the `@Component` decorator: the compiler-emitted
`ngDevMode`
guard on the class declaration, not application code. The one genuinely
reachable gap
attributed near it — the constructor's `error: () => {}` arm — is now
covered, taking
function coverage to 37/37.
### One more defect worth recording
`getMimeType` uppercases a file's extension and looks it up as a **key** of
`MIME_TYPES`.
The Excel key is `MSEXCEL`, so only a file named `*.msexcel` resolves to
`application/vnd.ms-excel`; a real `.xlsx` or `.xls` falls through to
`OCTET_STREAM` and is
rejected as "preview unsupported", which makes the whole spreadsheet branch
dead for real
spreadsheets. `.jpg` has the same problem (the key is `JPEG`). The new tests
use the suffix
the code actually accepts, with a comment saying so, rather than asserting
an intent the
code does not implement.
### Any related issues, documentation, discussions?
Closes #7497.
### How was this PR tested?
`ng test --watch=false` over the three specs — 86 passed (64 existing + 22
new), run 3x for
determinism. Coverage (`--coverage`) gives the table above. The failure path
was verified by
breaking one assertion in each of the three specs (red, non-zero exit) and
restoring them;
eslint and prettier are clean.
### 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]