fix(advice): the no-token guard must cover all three shapes of "no token"
The guard matches on the absence of a token. `{"$exists": False}` covers
a reading with no token field, but NOT one whose token field is present
and empty.
Verified against the live database, before the fix:
token present but empty -> write matched: 0 <-- missed it
`{"$in": [None, ""]}` covers all three - a missing field, an empty
field, and a null one - because `$in` with null also matches a missing
field.
no token field -> write matched: 1
token present but empty -> write matched: 1
token is null -> write matched: 1
183 tests (up from 182).
This commit is contained in:
@@ -278,7 +278,10 @@ class BeerRepository:
|
||||
# Falling back to the gravity here would re-open the hole
|
||||
# this guard exists to close - a comment-only correction
|
||||
# leaves the gravity unchanged.
|
||||
query["advice_token"] = {"$exists": False}
|
||||
# `$in` with null also matches a MISSING field, so this
|
||||
# covers a reading with no token AND one whose token field
|
||||
# is present but empty.
|
||||
query["advice_token"] = {"$in": [None, ""]}
|
||||
elif expected_sg is not None:
|
||||
# A direct call with a gravity to check against.
|
||||
query["sg"] = str(expected_sg)
|
||||
|
||||
Reference in New Issue
Block a user