diff --git a/spec/UserDataItemSpec.php b/spec/UserDataItemSpec.php index cbe3477..2b69977 100644 --- a/spec/UserDataItemSpec.php +++ b/spec/UserDataItemSpec.php @@ -3,6 +3,7 @@ namespace spec\Blockvis\Civic\Sip; use Blockvis\Civic\Sip\UserDataItem; +use JsonSerializable; use PhpSpec\ObjectBehavior; class UserDataItemSpec extends ObjectBehavior @@ -17,6 +18,17 @@ function it_is_initializable() $this->shouldHaveType(UserDataItem::class); } + function it_is_json_serializable() + { + $this->shouldImplement(JsonSerializable::class); + assert(json_encode($this->getWrappedObject()) === json_encode([ + 'label' => 'label', + 'value' => 'value', + 'isValid' => true, + 'isOwner' => false, + ]), 'JSON representation'); + } + public function it_is_readable() { $this->label()->shouldBe('label'); diff --git a/spec/UserDataSpec.php b/spec/UserDataSpec.php index 97274df..9cb7591 100644 --- a/spec/UserDataSpec.php +++ b/spec/UserDataSpec.php @@ -3,6 +3,7 @@ namespace spec\Blockvis\Civic\Sip; use Blockvis\Civic\Sip\UserData; +use JsonSerializable; use PhpSpec\ObjectBehavior; class UserDataSpec extends ObjectBehavior @@ -22,6 +23,15 @@ function it_is_initializable() $this->shouldHaveType(UserData::class); } + function it_is_json_serializable() + { + $this->shouldImplement(JsonSerializable::class); + assert(json_encode($this->getWrappedObject()) === json_encode([ + ['label' => 'label1', 'value' => 'value1', 'isValid' => true, 'isOwner' => true], + ['label' => 'label2', 'value' => 'value2', 'isValid' => true, 'isOwner' => false], + ]), 'JSON representation'); + } + function it_returns_data_items() { $items = $this->items(); diff --git a/src/UserData.php b/src/UserData.php index 2d04146..86eb8d3 100644 --- a/src/UserData.php +++ b/src/UserData.php @@ -2,7 +2,9 @@ namespace Blockvis\Civic\Sip; -class UserData +use JsonSerializable; + +class UserData implements JsonSerializable { /** * @var UserDataItem[] @@ -47,6 +49,14 @@ public function items(): array return array_values($this->items); } + /** + * @return array|UserDataItem[] + */ + public function jsonSerialize() + { + return $this->items(); + } + /** * Returns the user id. * @@ -77,4 +87,5 @@ private function createDataItems(array $data): array return $items; } + } diff --git a/src/UserDataItem.php b/src/UserDataItem.php index 77936e9..32adb4f 100644 --- a/src/UserDataItem.php +++ b/src/UserDataItem.php @@ -2,7 +2,9 @@ namespace Blockvis\Civic\Sip; -class UserDataItem +use JsonSerializable; + +class UserDataItem implements JsonSerializable { /** * Civic SIP service challenges the user during scope request approval to ensure @@ -71,6 +73,19 @@ public function isValid(): bool return $this->isValid; } + /** + * @return array + */ + public function jsonSerialize() + { + return [ + 'label' => $this->label, + 'value' => $this->value, + 'isValid' => $this->isValid, + 'isOwner' => $this->isOwner, + ]; + } + /** * Returns the item label. *