11/**
22 * @vitest -environment node
33 */
4+ import { flattenMockConditions , hasMockCondition } from '@sim/testing'
45import { beforeEach , describe , expect , it , vi } from 'vitest'
56import {
67 archiveFolderCascade ,
@@ -81,23 +82,6 @@ function makeConfig(overrides: Partial<FolderResourceConfig> = {}): FolderResour
8182 }
8283}
8384
84- /** Flattens the nested `and(...)` objects the drizzle operator mocks produce. */
85- function flattenConditions ( condition : unknown ) : Array < Record < string , unknown > > {
86- if ( ! condition || typeof condition !== 'object' ) return [ ]
87- const node = condition as Record < string , unknown >
88- if ( node . type === 'and' && Array . isArray ( node . conditions ) ) {
89- return node . conditions . flatMap ( flattenConditions )
90- }
91- return [ node ]
92- }
93-
94- function hasCondition (
95- condition : unknown ,
96- predicate : ( node : Record < string , unknown > ) => boolean
97- ) : boolean {
98- return flattenConditions ( condition ) . some ( predicate )
99- }
100-
10185const TIMESTAMP = new Date ( '2026-01-01T00:00:00.000Z' )
10286const NOW = new Date ( '2026-02-02T00:00:00.000Z' )
10387
@@ -138,7 +122,7 @@ describe('collectCascadeSubtreeIds', () => {
138122
139123 expect ( ids ) . toEqual ( [ 'root' , 'child' , 'grandchild' ] )
140124 // Either still active, or carrying this cascade's own stamp — never another snapshot's.
141- const clause = flattenConditions ( selectCalls [ 0 ] . where ) . find ( ( node ) => node . type === 'or' )
125+ const clause = flattenMockConditions ( selectCalls [ 0 ] . where ) . find ( ( node ) => node . type === 'or' )
142126 expect ( clause ) . toBeDefined ( )
143127 const branches = ( clause ?. conditions ?? [ ] ) as Array < Record < string , unknown > >
144128 expect ( branches . some ( ( node ) => node . type === 'isNull' ) ) . toBe ( true )
@@ -150,8 +134,10 @@ describe('collectCascadeSubtreeIds', () => {
150134
151135 await collectCascadeSubtreeIds ( tx , 'ws-1' , 'knowledge_base' , 'root' , TIMESTAMP )
152136
153- expect ( hasCondition ( selectCalls [ 0 ] . where , ( node ) => node . right === 'knowledge_base' ) ) . toBe ( true )
154- expect ( hasCondition ( selectCalls [ 0 ] . where , ( node ) => node . right === 'ws-1' ) ) . toBe ( true )
137+ expect ( hasMockCondition ( selectCalls [ 0 ] . where , ( node ) => node . right === 'knowledge_base' ) ) . toBe (
138+ true
139+ )
140+ expect ( hasMockCondition ( selectCalls [ 0 ] . where , ( node ) => node . right === 'ws-1' ) ) . toBe ( true )
155141 } )
156142} )
157143
@@ -169,7 +155,7 @@ describe('collectArchivedSubtreeIds', () => {
169155 const ids = await collectArchivedSubtreeIds ( tx , 'ws-1' , 'table' , 'root' , TIMESTAMP )
170156
171157 expect ( ids ) . toEqual ( [ 'root' , 'child' ] )
172- expect ( hasCondition ( selectCalls [ 0 ] . where , ( node ) => node . right === TIMESTAMP ) ) . toBe ( true )
158+ expect ( hasMockCondition ( selectCalls [ 0 ] . where , ( node ) => node . right === TIMESTAMP ) ) . toBe ( true )
173159 } )
174160
175161 it ( 'terminates on a parent cycle instead of recursing forever' , async ( ) => {
@@ -230,7 +216,7 @@ describe('archiveFolderCascade', () => {
230216 await archiveFolderCascade ( tx , makeConfig ( ) , 'ws-1' , [ 'root' ] , TIMESTAMP )
231217
232218 for ( const call of updateCalls ) {
233- expect ( hasCondition ( call . where , ( node ) => node . type === 'isNull' ) ) . toBe ( true )
219+ expect ( hasMockCondition ( call . where , ( node ) => node . type === 'isNull' ) ) . toBe ( true )
234220 }
235221 } )
236222
@@ -299,7 +285,7 @@ describe('restoreFolderCascade', () => {
299285 expect ( updateCalls [ 1 ] . set ) . toEqual ( { archivedAt : null , updatedAt : NOW } )
300286 expect ( updateCalls [ 2 ] . table ) . toBe ( DEPENDENT_TABLE )
301287 expect (
302- hasCondition ( updateCalls [ 2 ] . where , ( node ) => {
288+ hasMockCondition ( updateCalls [ 2 ] . where , ( node ) => {
303289 return node . type === 'inArray' && Array . isArray ( node . values ) && node . values . length === 2
304290 } )
305291 ) . toBe ( true )
@@ -353,7 +339,7 @@ describe('restoreFolderCascade', () => {
353339 )
354340
355341 for ( const call of updateCalls ) {
356- expect ( hasCondition ( call . where , ( node ) => node . right === TIMESTAMP ) ) . toBe ( true )
342+ expect ( hasMockCondition ( call . where , ( node ) => node . right === TIMESTAMP ) ) . toBe ( true )
357343 }
358344 } )
359345} )
@@ -373,7 +359,7 @@ describe('restoreFolderRows', () => {
373359
374360 expect ( folders ) . toBe ( 2 )
375361 expect ( updateCalls ) . toHaveLength ( 1 )
376- expect ( hasCondition ( updateCalls [ 0 ] . where , ( node ) => node . right === TIMESTAMP ) ) . toBe ( true )
362+ expect ( hasMockCondition ( updateCalls [ 0 ] . where , ( node ) => node . right === TIMESTAMP ) ) . toBe ( true )
377363 } )
378364} )
379365
0 commit comments