Skip to content

Commit b091840

Browse files
committed
refactor: Move test to DocumentTests, fix schemaless support
1 parent 33af097 commit b091840

File tree

2 files changed

+112
-123
lines changed

2 files changed

+112
-123
lines changed

tests/e2e/Adapter/Scopes/DocumentTests.php

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1178,6 +1178,118 @@ public function testUpsertMixedPermissionDelta(): void
11781178
], $db->getDocument(__FUNCTION__, 'b')->getPermissions());
11791179
}
11801180

1181+
public function testPreserveSequenceUpsert(): void
1182+
{
1183+
/** @var Database $database */
1184+
$database = $this->getDatabase();
1185+
1186+
if (!$database->getAdapter()->getSupportForUpserts()) {
1187+
$this->expectNotToPerformAssertions();
1188+
return;
1189+
}
1190+
1191+
$collectionName = 'preserve_sequence_upsert';
1192+
1193+
$database->createCollection($collectionName);
1194+
1195+
if ($database->getAdapter()->getSupportForAttributes()) {
1196+
$database->createAttribute($collectionName, 'name', Database::VAR_STRING, 128, true);
1197+
}
1198+
1199+
// Create initial documents
1200+
$doc1 = $database->createDocument($collectionName, new Document([
1201+
'$id' => 'doc1',
1202+
'$permissions' => [
1203+
Permission::read(Role::any()),
1204+
Permission::update(Role::any()),
1205+
],
1206+
'name' => 'Alice',
1207+
]));
1208+
1209+
$doc2 = $database->createDocument($collectionName, new Document([
1210+
'$id' => 'doc2',
1211+
'$permissions' => [
1212+
Permission::read(Role::any()),
1213+
Permission::update(Role::any()),
1214+
],
1215+
'name' => 'Bob',
1216+
]));
1217+
1218+
$originalSeq1 = $doc1->getSequence();
1219+
$originalSeq2 = $doc2->getSequence();
1220+
1221+
$this->assertNotEmpty($originalSeq1);
1222+
$this->assertNotEmpty($originalSeq2);
1223+
1224+
// Test: Without preserveSequence (default), $sequence should be ignored
1225+
$database->setPreserveSequence(false);
1226+
1227+
$database->upsertDocuments($collectionName, [
1228+
new Document([
1229+
'$id' => 'doc1',
1230+
'$sequence' => 999, // Try to set a different sequence
1231+
'$permissions' => [
1232+
Permission::read(Role::any()),
1233+
Permission::update(Role::any()),
1234+
],
1235+
'name' => 'Alice Updated',
1236+
]),
1237+
]);
1238+
1239+
$doc1Updated = $database->getDocument($collectionName, 'doc1');
1240+
$this->assertEquals('Alice Updated', $doc1Updated->getAttribute('name'));
1241+
$this->assertEquals($originalSeq1, $doc1Updated->getSequence()); // Sequence unchanged
1242+
1243+
// Test: With preserveSequence, $sequence should be preserved
1244+
$database->setPreserveSequence(true);
1245+
1246+
$database->upsertDocuments($collectionName, [
1247+
new Document([
1248+
'$id' => 'doc2',
1249+
'$sequence' => $originalSeq2, // Explicitly set the same sequence
1250+
'$permissions' => [
1251+
Permission::read(Role::any()),
1252+
Permission::update(Role::any()),
1253+
],
1254+
'name' => 'Bob Updated',
1255+
]),
1256+
]);
1257+
1258+
$doc2Updated = $database->getDocument($collectionName, 'doc2');
1259+
$this->assertEquals('Bob Updated', $doc2Updated->getAttribute('name'));
1260+
$this->assertEquals($originalSeq2, $doc2Updated->getSequence()); // Sequence preserved
1261+
1262+
// Test: withPreserveSequence helper
1263+
$database->setPreserveSequence(false);
1264+
1265+
$doc1 = $database->getDocument($collectionName, 'doc1');
1266+
$currentSeq1 = $doc1->getSequence();
1267+
1268+
$database->withPreserveSequence(function () use ($database, $collectionName, $currentSeq1) {
1269+
$database->upsertDocuments($collectionName, [
1270+
new Document([
1271+
'$id' => 'doc1',
1272+
'$sequence' => $currentSeq1,
1273+
'$permissions' => [
1274+
Permission::read(Role::any()),
1275+
Permission::update(Role::any()),
1276+
],
1277+
'name' => 'Alice Final',
1278+
]),
1279+
]);
1280+
});
1281+
1282+
$doc1Final = $database->getDocument($collectionName, 'doc1');
1283+
$this->assertEquals('Alice Final', $doc1Final->getAttribute('name'));
1284+
$this->assertEquals($currentSeq1, $doc1Final->getSequence());
1285+
1286+
// Verify flag was reset after withPreserveSequence
1287+
$this->assertFalse($database->getPreserveSequence());
1288+
1289+
$database->setPreserveSequence(false);
1290+
$database->deleteCollection($collectionName);
1291+
}
1292+
11811293
public function testRespectNulls(): Document
11821294
{
11831295
/** @var Database $database */

tests/e2e/Adapter/Scopes/GeneralTests.php

Lines changed: 0 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)