aglinxinyuan opened a new pull request, #7919:
URL: https://github.com/apache/texera/pull/7919
### What changes were proposed in this PR?
Two small, unrelated things that share one property: the behaviour is
exercised today but asserted nowhere.
**1. `frontend/src/app/common/util/email.ts` had no spec.** It is the only
un-spec'd file in its `util` directory, and it is on the sign-in path —
`AuthService` reads `email` out of the email-request modal's `getValues()`. New
`email.spec.ts`, 7 tests, taking the file to 100% lines and branches.
**2. `UnauthorizedExceptionMapperSpec` was in the wrong module.** It tests
`common/auth`'s `UnauthorizedException`, but lived in `access-control-service`.
JaCoCo reports per module, so it credited that file with nothing. Moved to
`common/auth/src/test`, which takes `UnauthorizedException.scala` from 66.7% to
100%.
| File | Codecov | How |
|---|---|---|
| `email.ts` | 5/8 = 62.5% → **8/8 = 100%** | new spec |
| `UnauthorizedException.scala` | 6/9 = 66.7% → **9/9 = 100%** | spec
relocation |
Both baselines reproduce Codecov's published figures digit-for-digit,
measured whole-module with no filter on either side.
### The honest yield is smaller than those percentages suggest
**+5 fully-covered lines and +1 branch arm — of which +3 lines are
re-attribution, not new testing.** The Scala half moves already-tested,
already-CI-running behaviour into the module where it counts; it adds one new
assertion and nothing else. And on the frontend half, one of the three lines is
promoted only by an unreachable null-guard arm, so that half is +2 lines and +1
arm rather than +3 and +2.
So the genuinely new coverage here is **2 lines**. I would rather lead with
that than with two 100%s.
### What actually earns the PR
The email validator could be gutted and nothing in the repository would
notice. Five mutants survived the first draft, three of them on `email.ts`:
| Mutation | Now killed by |
|---|---|
| drop the trailing anchor from the regex | rejects an address with trailing
text after the TLD |
| replace the whole regex with `/@/` | rejects strings that merely contain
an at-sign |
| narrow the TLD to `\.com$` | accepts a non-`.com` TLD |
| `UnauthorizedException`'s reason-phrase overload | the 401 test's new
reason-phrase assertion |
| `UnauthorizedException`'s status constant | existing status assertion |
That is the point of the frontend spec: the file's *coverage* was largely
duplicated by indirect drivers, but its *behaviour* was duplicated nowhere. The
indirect drivers are `auth.service.spec.ts` and
`texera-login.component.spec.ts` — the latter reaching it through a static
call, which the first draft got wrong when it inventoried them.
### Verification
16 mutations, **15 killed, 1 survivor.**
**The survivor, stated plainly and not dressed up as equivalent:** flipping
`UnauthorizedException.scala:43`'s `enableSuppression = false` to `true` leaves
the whole 108-test module green. It *is* observable in principle through
`getSuppressed`, but nothing in the repository calls it, so there is no honest
assertion to make. Recorded rather than papered over.
### Deliberately not included
`LargeBinaryManager` was the third file in scope and is dropped at **+0
lines**. Reaching it needs a `build.sbt` change with LICENSE-binary fallout,
which the test-only constraint forbids.
Three tests added in the repair pass move zero counters — the lcov is
byte-identical with and without them — and they are kept only for the mutants
they kill.
No production file is touched. `access-control-service` was re-compiled
after the move to confirm nothing there depended on the relocated spec.
### Any related issues, documentation, discussions?
Closes #7918
### How was this PR tested?
```
sbt "Auth/test"
```
```
[info] Total number of tests run: 108
[info] Tests: succeeded 108, failed 0, canceled 0, ignored 0, pending 0
```
```
npx ng test --watch=false --include="**/email.spec.ts"
```
```
Test Files 1 passed (1)
```
`Auth/Test/scalafmtCheck` passes, `AccessControlService/Test/compile`
succeeds after the move, and `yarn format:ci` passes. The new frontend spec
carries the Apache licence header.
### 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]