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); } }