test: add unit tests for rerankerService.rerank() - #2257
Merged
Conversation
felladrin
marked this pull request as ready for review
July 30, 2026 10:03
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.
Description
Fixes #2167.
rerank()had no unit test in the default suite.sanitizeUnicodeSurrogateswas covered, and there's arerankerService.integration.test.tsthat runsrerank()against the real model, but that one downloads ~130MB and is excluded fromnpm run test. So the everyday suite exercised none ofrerank()'s own logic: index mapping, batching, the empty/not-ready guards, and the sanitization step.This adds fast, boundary-mocked tests for it.
One note on the boundary: the issue points at
webSearchService.test.tsas the pattern, but that file mocksfetch. The reranker's boundary is the ONNXInferenceSession(plus the tokenizer), so these tests mockInferenceSession.createand spy onTokenizer.prototype.encodeinstead. Same idea (mock at the boundary, assert real behavior), different seam.What the tests check:
null/undefineddocuments[]early, without calling the modelReranker service is not readyrerank()does not sort; that lives inrankSearchResults)BATCH_SIZEU+FFFD, never raw, proving sanitization runs on the real path and not just that the model was hitThe warm-up call
startRerankerService()makes is cleared before each test, so the call-count assertions start from zero.Type of Change
How to test
npm ci.npx vitest run server/rerankerService.test.ts(or the whole suite withnpm run test).npm run lint.Checklist
npm run lintpassesnpm run test)Security, performance, or breaking changes
None. Tests only, no production code touched.