fix(add): empty string is real data, not a missing field
validateAddParams() treated '' as falsy and rejected it with "Missing
required field 'data'" — so a legitimate empty file's first write always
failed. Only null/undefined data (with no vector either) is genuinely
absent; '' is real content. Fixed the check, plus the identical bug in
validateUpdateParams() (truncating a file to empty via overwrite hit the
same falsy check) and in update()/transact()'s update planner, where a
plain `Boolean(params.data)`/truthy check on the resolved vector would have
silently skipped both the deferred-embed marker and the eager re-embed for
an emptied value — a stale vector with no path to ever correct itself.
Verified end-to-end: vfs.writeFile('/empty.txt', '') now succeeds,
readFile() returns '', the file lists, and stat() reports size 0; the
existing "should reject empty string as data" tests (unit + integration)
asserted the old buggy behavior and are updated to assert the fixed
contract instead.
This commit is contained in:
parent
fc516da6eb
commit
258e9042af
6 changed files with 128 additions and 20 deletions
|
|
@ -335,15 +335,24 @@ describe('Brainy.add()', () => {
|
|||
})
|
||||
|
||||
describe('edge cases', () => {
|
||||
it('should reject empty string as data', async () => {
|
||||
// Arrange
|
||||
it('should accept an empty string as real (empty) data', async () => {
|
||||
// Arrange — '' is legitimate content (e.g. an empty file's first
|
||||
// write), not a missing field. Only null/undefined data (with no
|
||||
// vector either) is "missing" — see the separate
|
||||
// 'data and vector are both missing' test above.
|
||||
const params = createAddParams({
|
||||
data: '',
|
||||
type: 'thing'
|
||||
})
|
||||
|
||||
// Act & Assert - Empty string is not valid data
|
||||
await expect(brain.add(params)).rejects.toThrow('Invalid add() parameters: Missing required field \'data\'')
|
||||
|
||||
// Act
|
||||
const id = await brain.add(params)
|
||||
|
||||
// Assert — stored and readable back as empty, not rejected
|
||||
expect(id).toBeDefined()
|
||||
const entity = await brain.get(id)
|
||||
expect(entity).not.toBeNull()
|
||||
expect(entity!.data).toBe('')
|
||||
})
|
||||
|
||||
it('should handle very long text content', async () => {
|
||||
|
|
|
|||
Reference in a new issue