Add test coverage for error mapping and tsjs helpers#648
Open
ChristianPavilonis wants to merge 2 commits intomainfrom
Open
Add test coverage for error mapping and tsjs helpers#648ChristianPavilonis wants to merge 2 commits intomainfrom
ChristianPavilonis wants to merge 2 commits intomainfrom
Conversation
aram356
requested changes
Apr 30, 2026
Collaborator
aram356
left a comment
There was a problem hiding this comment.
Summary
Pure test additions/consolidation — no production code changes. Tests pass on wasm32-wasip1, clippy is clean, and CI is fully green. The substantive concerns below are about test design — what these tests would catch on regression — rather than correctness of what was added. Requesting changes primarily on the exhaustiveness and tautology issues; the rest are non-blocking.
Blocking
♻️ refactor
- Status code mapping test is not exhaustive at compile time —
error.rs:144-247. Hand-maintainedcasesarray means a new variant added toTrustedServerErrorwon't fail this test. A non-exhaustivematchguard would force exhaustive coverage. See inline comment. - tsjs hash assertions are tautological —
tsjs.rs:75-116.expected_hashis derived by calling the sameconcatenated_hashthe production code calls. Ifconcatenated_hashregressed, both sides would change in lockstep. Suggest asserting hash structure (64 hex chars) and that different module sets yield different URLs. See inline comment. - Redundant import in tsjs test module —
tsjs.rs:70. Duplicates the top-of-file import;use super::*at line 72 is sufficient (verified locally).
Non-blocking
🤔 thinking
tsjs_deferred_script_src_uses_empty_hash_for_unknown_modulelocks in silent failure —tsjs.rs:137-143. Empty hash produces a 404-bound URL with no logging. Capturing this as "expected" makes future improvements look like regressions.
🌱 seedling
- Production
unwrap_or_default()for unknown deferred modules is invisible —tsjs.rs:44(unchanged in this PR, so noted in the body).single_module_hash(module_id).unwrap_or_default()silently produces a 404-bound URL with no logging when the module isn't registered. Worth a follow-up issue to addlog::warn!for unregistered module IDs.
📝 note
- Issue #454 wording vs implementation —
cookies.rs:353-372. Issue says "returningNone" but production returnsErr. Test correctly verifies current implementation; issue text is stale.
⛏ nitpick
["core", "creative"]redundantly includescore—tsjs.rs:76, 88.concatenate_modulesalways prepends core; could be simplified to["creative"].HeaderValue::from_bytesexpect message is slightly misleading —cookies.rs:358. Reads like a property ofhandle_request_cookiesbut is aboutHeaderValue::from_bytes.
CI Status
- fmt: PASS
- clippy: PASS
- rust tests: PASS (verified locally on
wasm32-wasip1) - vitest: PASS
- format-typescript / format-docs: PASS
- browser & integration tests: PASS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
TrustedServerError::status_code()so each public variant is pinned to its expected HTTP responsetsjsformatting tests for unified and deferred script URL/tag helpers using computed hashesChanges
crates/trusted-server-core/src/error.rsTrustedServerErrorvariant.crates/trusted-server-core/src/tsjs.rscrates/trusted-server-core/src/cookies.rsCookieheader handling inhandle_request_cookies().crates/trusted-server-core/src/models.rsCloses
Closes #448
Closes #450
Closes #454
Closes #456
Test plan
cargo test --workspacecargo clippy --workspace --all-targets --all-features -- -D warningscargo fmt --all -- --checkcd crates/js/lib && npx vitest runcd crates/js/lib && npm run formatcd docs && npm run formatcargo build --package trusted-server-adapter-fastly --release --target wasm32-wasip1fastly compute serveChecklist
unwrap()in production code — useexpect("should ...")tracingmacros (notprintln!)