Skip to content

Commit 7fa5b12

Browse files
committed
test(protect): assert encrypted fields in searchableJson tests
Add v:2, toHaveProperty('s') for selectors and toHaveProperty('sv') for terms across all searchableJson test sections. Replaces weak toBeDefined() assertions with type-specific encrypted field checks to ensure end-to-end correctness per PR #283 review feedback.
1 parent fc04190 commit 7fa5b12

File tree

1 file changed

+57
-6
lines changed

1 file changed

+57
-6
lines changed

packages/protect/__tests__/encrypt-query-searchable-json.test.ts

Lines changed: 57 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ describe('encryptQuery with searchableJson queryType', () => {
4141
expect(data).toBeDefined()
4242
expect(data).toMatchObject({
4343
i: { t: 'documents', c: 'metadata' },
44+
v: 2,
4445
})
46+
expect(data).toHaveProperty('s')
4547
}, 30000)
4648

4749
it('auto-infers ste_vec_term for object plaintext (containment)', async () => {
@@ -55,7 +57,9 @@ describe('encryptQuery with searchableJson queryType', () => {
5557
expect(data).toBeDefined()
5658
expect(data).toMatchObject({
5759
i: { t: 'documents', c: 'metadata' },
60+
v: 2,
5861
})
62+
expect(data).toHaveProperty('sv')
5963
}, 30000)
6064

6165
it('auto-infers ste_vec_term for nested object', async () => {
@@ -72,7 +76,9 @@ describe('encryptQuery with searchableJson queryType', () => {
7276
expect(data).toBeDefined()
7377
expect(data).toMatchObject({
7478
i: { t: 'documents', c: 'metadata' },
79+
v: 2,
7580
})
81+
expect(data).toHaveProperty('sv')
7682
}, 30000)
7783

7884
it('auto-infers ste_vec_term for array plaintext', async () => {
@@ -86,7 +92,9 @@ describe('encryptQuery with searchableJson queryType', () => {
8692
expect(data).toBeDefined()
8793
expect(data).toMatchObject({
8894
i: { t: 'documents', c: 'metadata' },
95+
v: 2,
8996
})
97+
expect(data).toHaveProperty('sv')
9098
}, 30000)
9199

92100
it('returns null for null plaintext', async () => {
@@ -140,7 +148,9 @@ describe('encryptQuery with searchableJson column and omitted queryType', () =>
140148
expect(data).toBeDefined()
141149
expect(data).toMatchObject({
142150
i: { t: 'documents', c: 'metadata' },
151+
v: 2,
143152
})
153+
expect(data).toHaveProperty('s')
144154
}, 30000)
145155

146156
it('auto-infers ste_vec_term for object plaintext (containment)', async () => {
@@ -153,7 +163,9 @@ describe('encryptQuery with searchableJson column and omitted queryType', () =>
153163
expect(data).toBeDefined()
154164
expect(data).toMatchObject({
155165
i: { t: 'documents', c: 'metadata' },
166+
v: 2,
156167
})
168+
expect(data).toHaveProperty('sv')
157169
}, 30000)
158170

159171
it('returns null for null plaintext', async () => {
@@ -235,8 +247,11 @@ describe('searchableJson batch operations', () => {
235247
const data = unwrapResult(result)
236248
expect(data).toHaveLength(3)
237249
expect(data[0]).toMatchObject({ i: { t: 'documents', c: 'metadata' } })
250+
expect(data[0]).toHaveProperty('s')
238251
expect(data[1]).toMatchObject({ i: { t: 'documents', c: 'metadata' } })
252+
expect(data[1]).toHaveProperty('sv')
239253
expect(data[2]).toMatchObject({ i: { t: 'documents', c: 'metadata' } })
254+
expect(data[2]).toHaveProperty('sv')
240255
}, 30000)
241256

242257
it('handles null values in batch', async () => {
@@ -265,6 +280,7 @@ describe('searchableJson batch operations', () => {
265280
expect(data).toHaveLength(3)
266281
expect(data[0]).toBeNull()
267282
expect(data[1]).not.toBeNull()
283+
expect(data[1]).toHaveProperty('s')
268284
expect(data[2]).toBeNull()
269285
}, 30000)
270286

@@ -292,9 +308,9 @@ describe('searchableJson batch operations', () => {
292308

293309
const data = unwrapResult(result)
294310
expect(data).toHaveLength(3)
295-
expect(data[0]).toBeDefined()
296-
expect(data[1]).toBeDefined()
297-
expect(data[2]).toBeDefined()
311+
expect(data[0]).toHaveProperty('s')
312+
expect(data[1]).toHaveProperty('s')
313+
expect(data[2]).toHaveProperty('sv')
298314
}, 30000)
299315

300316
it('can omit queryType for searchableJson in batch', async () => {
@@ -318,8 +334,8 @@ describe('searchableJson batch operations', () => {
318334

319335
const data = unwrapResult(result)
320336
expect(data).toHaveLength(3)
321-
expect(data[0]).toBeDefined()
322-
expect(data[1]).toBeDefined()
337+
expect(data[0]).toHaveProperty('s')
338+
expect(data[1]).toHaveProperty('sv')
323339
expect(data[2]).toBeNull()
324340
}, 30000)
325341
})
@@ -403,7 +419,9 @@ describe('searchableJson with LockContext', () => {
403419
const data = unwrapResult(result)
404420
expect(data).toMatchObject({
405421
i: { t: 'documents', c: 'metadata' },
422+
v: 2,
406423
})
424+
expect(data).toHaveProperty('s')
407425
}, 30000)
408426

409427
it('executes object plaintext with LockContext mock', async () => {
@@ -429,7 +447,9 @@ describe('searchableJson with LockContext', () => {
429447
if (result.data) {
430448
expect(result.data).toMatchObject({
431449
i: { t: 'documents', c: 'metadata' },
450+
v: 2,
432451
})
452+
expect(result.data).toHaveProperty('sv')
433453
}
434454
}, 30000)
435455

@@ -520,6 +540,7 @@ describe('searchableJson with LockContext', () => {
520540
const data = unwrapResult(result)
521541
expect(data).toHaveLength(1)
522542
expect(data[0]).toMatchObject({ i: { t: 'documents', c: 'metadata' } })
543+
expect(data[0]).toHaveProperty('s')
523544
}, 30000)
524545
})
525546

@@ -548,6 +569,8 @@ describe('searchableJson equivalence', () => {
548569

549570
expect(explicitData.i).toEqual(implicitData.i)
550571
expect(explicitData.v).toEqual(implicitData.v)
572+
expect(explicitData).toHaveProperty('s')
573+
expect(implicitData).toHaveProperty('s')
551574
}, 30000)
552575

553576
it('produces identical metadata to omitting queryType for object', async () => {
@@ -567,6 +590,8 @@ describe('searchableJson equivalence', () => {
567590

568591
expect(explicitData.i).toEqual(implicitData.i)
569592
expect(explicitData.v).toEqual(implicitData.v)
593+
expect(explicitData).toHaveProperty('sv')
594+
expect(implicitData).toHaveProperty('sv')
570595
}, 30000)
571596

572597
it('produces identical metadata to explicit steVecSelector for string', async () => {
@@ -587,6 +612,8 @@ describe('searchableJson equivalence', () => {
587612

588613
expect(searchableJsonData.i).toEqual(steVecSelectorData.i)
589614
expect(searchableJsonData.v).toEqual(steVecSelectorData.v)
615+
expect(searchableJsonData).toHaveProperty('s')
616+
expect(steVecSelectorData).toHaveProperty('s')
590617
}, 30000)
591618

592619
it('produces identical metadata to explicit steVecTerm for object', async () => {
@@ -607,6 +634,8 @@ describe('searchableJson equivalence', () => {
607634

608635
expect(searchableJsonData.i).toEqual(steVecTermData.i)
609636
expect(searchableJsonData.v).toEqual(steVecTermData.v)
637+
expect(searchableJsonData).toHaveProperty('sv')
638+
expect(steVecTermData).toHaveProperty('sv')
610639
}, 30000)
611640
})
612641

@@ -629,7 +658,9 @@ describe('searchableJson edge cases', () => {
629658
const data = unwrapResult(result)
630659
expect(data).toMatchObject({
631660
i: { t: 'documents', c: 'metadata' },
661+
v: 2,
632662
})
663+
expect(data).toHaveProperty('sv')
633664
}, 30000)
634665

635666
it('succeeds for empty array', async () => {
@@ -642,7 +673,9 @@ describe('searchableJson edge cases', () => {
642673
const data = unwrapResult(result)
643674
expect(data).toMatchObject({
644675
i: { t: 'documents', c: 'metadata' },
676+
v: 2,
645677
})
678+
expect(data).toHaveProperty('sv')
646679
}, 30000)
647680

648681
it('succeeds for object with wrapped number', async () => {
@@ -655,7 +688,9 @@ describe('searchableJson edge cases', () => {
655688
const data = unwrapResult(result)
656689
expect(data).toMatchObject({
657690
i: { t: 'documents', c: 'metadata' },
691+
v: 2,
658692
})
693+
expect(data).toHaveProperty('sv')
659694
}, 30000)
660695

661696
it('succeeds for object with wrapped boolean', async () => {
@@ -668,7 +703,9 @@ describe('searchableJson edge cases', () => {
668703
const data = unwrapResult(result)
669704
expect(data).toMatchObject({
670705
i: { t: 'documents', c: 'metadata' },
706+
v: 2,
671707
})
708+
expect(data).toHaveProperty('sv')
672709
}, 30000)
673710

674711
it('succeeds for object with null value', async () => {
@@ -681,7 +718,9 @@ describe('searchableJson edge cases', () => {
681718
const data = unwrapResult(result)
682719
expect(data).toMatchObject({
683720
i: { t: 'documents', c: 'metadata' },
721+
v: 2,
684722
})
723+
expect(data).toHaveProperty('sv')
685724
}, 30000)
686725

687726
it('succeeds for deeply nested object (3+ levels)', async () => {
@@ -704,7 +743,9 @@ describe('searchableJson edge cases', () => {
704743
const data = unwrapResult(result)
705744
expect(data).toMatchObject({
706745
i: { t: 'documents', c: 'metadata' },
746+
v: 2,
707747
})
748+
expect(data).toHaveProperty('sv')
708749
}, 30000)
709750

710751
// String edge cases for JSONPath selectors
@@ -719,7 +760,9 @@ describe('searchableJson edge cases', () => {
719760
const data = unwrapResult(result)
720761
expect(data).toMatchObject({
721762
i: { t: 'documents', c: 'metadata' },
763+
v: 2,
722764
})
765+
expect(data).toHaveProperty('s')
723766
}, 30000)
724767

725768
it('succeeds for JSONPath with wildcard', async () => {
@@ -732,7 +775,9 @@ describe('searchableJson edge cases', () => {
732775
const data = unwrapResult(result)
733776
expect(data).toMatchObject({
734777
i: { t: 'documents', c: 'metadata' },
778+
v: 2,
735779
})
780+
expect(data).toHaveProperty('s')
736781
}, 30000)
737782
})
738783

@@ -765,6 +810,8 @@ describe('searchableJson batch edge cases', () => {
765810
expect(batchData).toHaveLength(1)
766811
expect(batchData[0].i).toEqual(scalarData.i)
767812
expect(batchData[0].v).toEqual(scalarData.v)
813+
expect(scalarData).toHaveProperty('s')
814+
expect(batchData[0]).toHaveProperty('s')
768815
}, 30000)
769816

770817
it('handles all-null batch', async () => {
@@ -815,10 +862,12 @@ describe('searchableJson batch edge cases', () => {
815862

816863
const data = unwrapResult(result)
817864
expect(data).toHaveLength(12)
818-
data.forEach((item: any) => {
865+
data.forEach((item: any, idx: number) => {
819866
expect(item).toMatchObject({
820867
i: { t: 'documents', c: 'metadata' },
868+
v: 2,
821869
})
870+
expect(item).toHaveProperty(idx % 2 === 0 ? 's' : 'sv')
822871
})
823872
}, 30000)
824873

@@ -860,8 +909,10 @@ describe('searchableJson batch edge cases', () => {
860909
expect(data).toHaveLength(5)
861910
expect(data[0]).toBeNull()
862911
expect(data[1]).not.toBeNull()
912+
expect(data[1]).toHaveProperty('s')
863913
expect(data[2]).toBeNull()
864914
expect(data[3]).not.toBeNull()
915+
expect(data[3]).toHaveProperty('sv')
865916
expect(data[4]).toBeNull()
866917
}, 30000)
867918
})

0 commit comments

Comments
 (0)