Files
server/tests/php/shared/People/Entity/Individual/IndividualObjectTest.php
2026-02-10 18:46:11 -05:00

109 lines
3.8 KiB
PHP

<?php
declare(strict_types=1);
namespace KTXF\People\Entity\Individual;
use PHPUnit\Framework\TestCase;
/**
* Test for IndividualObject JsonSerializable functionality
*/
class IndividualObjectTest extends TestCase
{
public function testJsonSerialization(): void
{
// Create an IndividualObject instance
$individual = new IndividualObject();
// Set some basic properties
$individual->urid = 'test-urid-123';
$individual->label = 'Test Individual';
$individual->language = 'en';
// Set name
$individual->names->First = 'John';
$individual->names->Last = 'Doe';
$individual->names->Prefix = 'Mr.';
// Add an alias
$alias = new IndividualAliasObject();
$alias->label = 'Johnny';
$individual->names->Aliases[] = $alias;
// Serialize to JSON
$json = json_encode($individual);
// Verify JSON structure
$this->assertJson($json);
$data = json_decode($json, true);
$this->assertEquals('individual', $data['type']);
$this->assertEquals(1, $data['version']);
$this->assertEquals('test-urid-123', $data['urid']);
$this->assertEquals('Test Individual', $data['label']);
$this->assertEquals('en', $data['language']);
$this->assertEquals('John', $data['names']['First']);
$this->assertEquals('Doe', $data['names']['Last']);
$this->assertEquals('Mr.', $data['names']['Prefix']);
$this->assertCount(1, $data['names']['Aliases']);
$this->assertEquals('Johnny', $data['names']['Aliases'][0]['label']);
}
public function testJsonDeserialization(): void
{
$jsonData = [
'type' => 'individual',
'version' => 1,
'urid' => 'test-urid-456',
'label' => 'Deserialized Individual',
'language' => 'fr',
'names' => [
'First' => 'Jane',
'Last' => 'Smith',
'Prefix' => 'Ms.',
'Aliases' => [
['label' => 'Janie']
]
]
];
$individual = new IndividualObject();
$individual->jsonDeserialize($jsonData);
$this->assertEquals('test-urid-456', $individual->urid);
$this->assertEquals('Deserialized Individual', $individual->label);
$this->assertEquals('fr', $individual->language);
$this->assertEquals('Jane', $individual->names->First);
$this->assertEquals('Smith', $individual->names->Last);
$this->assertEquals('Ms.', $individual->names->Prefix);
$this->assertCount(1, $individual->names->Aliases);
$this->assertEquals('Janie', $individual->names->Aliases[0]->label);
}
public function testJsonRoundTrip(): void
{
// Create original object
$original = new IndividualObject();
$original->urid = 'round-trip-urid';
$original->label = 'Round Trip Test';
$original->names->First = 'Alice';
$original->names->Last = 'Wonderland';
// Serialize and deserialize
$json = json_encode($original);
$deserialized = new IndividualObject();
$deserialized->jsonDeserialize($json);
// Verify round-trip integrity
$this->assertEquals($original->urid, $deserialized->urid);
$this->assertEquals($original->label, $deserialized->label);
$this->assertEquals($original->names->First, $deserialized->names->First);
$this->assertEquals($original->names->Last, $deserialized->names->Last);
// Verify JSON representations are identical
$originalJson = json_encode($original);
$deserializedJson = json_encode($deserialized);
$this->assertJsonStringEqualsJsonString($originalJson, $deserializedJson);
}
}