@@ -295,129 +295,6 @@ public function testPreserveDatesCreate(): void
295295 $ this ->getDatabase ()->getAuthorization ()->reset ();
296296 }
297297
298- public function testPreserveSequenceUpsert (): void
299- {
300- $ this ->getDatabase ()->getAuthorization ()->disable ();
301-
302- /** @var Database $database */
303- $ database = $ this ->getDatabase ();
304-
305- if (!$ database ->getAdapter ()->getSupportForUpserts ()) {
306- $ this ->expectNotToPerformAssertions ();
307- return ;
308- }
309-
310- if (!$ database ->getAdapter ()->getSupportForAttributes ()) {
311- $ this ->expectNotToPerformAssertions ();
312- return ;
313- }
314-
315- $ collectionName = 'preserve_sequence_upsert ' ;
316-
317- $ database ->createCollection ($ collectionName );
318- $ database ->createAttribute ($ collectionName , 'name ' , Database::VAR_STRING , 128 , true );
319-
320- // Create initial documents
321- $ doc1 = $ database ->createDocument ($ collectionName , new Document ([
322- '$id ' => 'doc1 ' ,
323- '$permissions ' => [
324- Permission::read (Role::any ()),
325- Permission::update (Role::any ()),
326- ],
327- 'name ' => 'Alice ' ,
328- ]));
329-
330- $ doc2 = $ database ->createDocument ($ collectionName , new Document ([
331- '$id ' => 'doc2 ' ,
332- '$permissions ' => [
333- Permission::read (Role::any ()),
334- Permission::update (Role::any ()),
335- ],
336- 'name ' => 'Bob ' ,
337- ]));
338-
339- $ originalSeq1 = $ doc1 ->getSequence ();
340- $ originalSeq2 = $ doc2 ->getSequence ();
341-
342- $ this ->assertNotEmpty ($ originalSeq1 );
343- $ this ->assertNotEmpty ($ originalSeq2 );
344-
345- // Test Without preserveSequence (default), $sequence should be ignored
346- $ database ->setPreserveSequence (false );
347-
348- $ results = [];
349- $ database ->upsertDocuments ($ collectionName , [
350- new Document ([
351- '$id ' => 'doc1 ' ,
352- '$sequence ' => 999 , // Try to set a different sequence
353- '$permissions ' => [
354- Permission::read (Role::any ()),
355- Permission::update (Role::any ()),
356- ],
357- 'name ' => 'Alice Updated ' ,
358- ]),
359- ], onNext: function ($ doc ) use (&$ results ) {
360- $ results [] = $ doc ;
361- });
362-
363- $ doc1Updated = $ database ->getDocument ($ collectionName , 'doc1 ' );
364- $ this ->assertEquals ('Alice Updated ' , $ doc1Updated ->getAttribute ('name ' ));
365- $ this ->assertEquals ($ originalSeq1 , $ doc1Updated ->getSequence ()); // Sequence unchanged
366-
367- // Test With preserveSequence, $sequence should be preserved
368- $ database ->setPreserveSequence (true );
369-
370- $ results = [];
371- $ database ->upsertDocuments ($ collectionName , [
372- new Document ([
373- '$id ' => 'doc2 ' ,
374- '$sequence ' => $ originalSeq2 , // Explicitly set the same sequence
375- '$permissions ' => [
376- Permission::read (Role::any ()),
377- Permission::update (Role::any ()),
378- ],
379- 'name ' => 'Bob Updated ' ,
380- ]),
381- ], onNext: function ($ doc ) use (&$ results ) {
382- $ results [] = $ doc ;
383- });
384-
385- $ doc2Updated = $ database ->getDocument ($ collectionName , 'doc2 ' );
386- $ this ->assertEquals ('Bob Updated ' , $ doc2Updated ->getAttribute ('name ' ));
387- $ this ->assertEquals ($ originalSeq2 , $ doc2Updated ->getSequence ()); // Sequence preserved
388-
389- // Test withPreserveSequence helper
390- $ database ->setPreserveSequence (false );
391-
392- $ doc1 = $ database ->getDocument ($ collectionName , 'doc1 ' );
393- $ currentSeq1 = $ doc1 ->getSequence ();
394-
395- $ database ->withPreserveSequence (function () use ($ database , $ collectionName , $ currentSeq1 ) {
396- $ database ->upsertDocuments ($ collectionName , [
397- new Document ([
398- '$id ' => 'doc1 ' ,
399- '$sequence ' => $ currentSeq1 ,
400- '$permissions ' => [
401- Permission::read (Role::any ()),
402- Permission::update (Role::any ()),
403- ],
404- 'name ' => 'Alice Final ' ,
405- ]),
406- ]);
407- });
408-
409- $ doc1Final = $ database ->getDocument ($ collectionName , 'doc1 ' );
410- $ this ->assertEquals ('Alice Final ' , $ doc1Final ->getAttribute ('name ' ));
411- $ this ->assertEquals ($ currentSeq1 , $ doc1Final ->getSequence ());
412-
413- // Verify flag was reset after withPreserveSequence
414- $ this ->assertFalse ($ database ->getPreserveSequence ());
415-
416- $ database ->deleteCollection ($ collectionName );
417-
418- $ this ->getDatabase ()->getAuthorization ()->reset ();
419- }
420-
421298 public function testGetAttributeLimit (): void
422299 {
423300 $ this ->assertIsInt ($ this ->getDatabase ()->getLimitForAttributes ());
0 commit comments