Add versioning to stored objects

This update introduces a versioning system to the stored objects in the ChillDocStoreBundle. The 'StoredObject' entity now includes several new methods, and maintains a collection of 'StoredObjectVersion' instances. Each time a 'StoredObject' is modified, a new version instance is created and added to the collection, ensuring a history of changes. Migration file for the addition of new database column included. Corresponding tests are also updated.
This commit is contained in:
2024-07-09 22:23:24 +02:00
parent 8a374864fa
commit 2b7ea4178b
4 changed files with 333 additions and 62 deletions

View File

@@ -25,18 +25,22 @@ class StoredObjectTest extends KernelTestCase
{
$storedObject = new StoredObject();
$storedObject
->setFilename('test_0')
->setIv([2, 4, 6, 8])
->setKeyInfos(['key' => ['data0' => 'data0']])
->setType('text/html');
->registerVersion(
[2, 4, 6, 8],
['key' => ['data0' => 'data0']],
'text/html',
'test_0',
);
$storedObject->saveHistory();
$storedObject
->setFilename('test_1')
->setIv([8, 10, 12])
->setKeyInfos(['key' => ['data1' => 'data1']])
->setType('text/text');
->registerVersion(
[8, 10, 12],
['key' => ['data1' => 'data1']],
'text/text',
'test_1',
);
$storedObject->saveHistory();
@@ -50,4 +54,33 @@ class StoredObjectTest extends KernelTestCase
self::assertEquals(['key' => ['data1' => 'data1']], $storedObject->getDatas()['history'][1]['key_infos']);
self::assertEquals('text/text', $storedObject->getDatas()['history'][1]['type']);
}
public function testRegisterVersion(): void
{
$object = new StoredObject();
$firstVersion = $object->registerVersion(
[5, 6, 7, 8],
['key' => ['some key']],
'text/html',
);
$version = $object->registerVersion(
[1, 2, 3, 4],
$k = ['key' => ['data0' => 'data0']],
'text/text',
'abcde',
);
self::assertCount(2, $object->getVersions());
self::assertEquals('abcde', $object->getFilename());
self::assertEquals([1, 2, 3, 4], $object->getIv());
self::assertEqualsCanonicalizing($k, $object->getKeyInfos());
self::assertEquals('text/text', $object->getType());
self::assertEquals('abcde', $version->getFilename());
self::assertEquals([1, 2, 3, 4], $version->getIv());
self::assertEqualsCanonicalizing($k, $version->getKeyInfos());
self::assertEquals('text/text', $version->getType());
self::assertNotSame($firstVersion, $version);
}
}