diff --git a/src/Credentials/Credentials.php b/src/Credentials/Credentials.php index bd2bdc90b9..4690f6d9c5 100644 --- a/src/Credentials/Credentials.php +++ b/src/Credentials/Credentials.php @@ -76,13 +76,23 @@ public function toArray() public function serialize() { - return json_encode($this->toArray()); + return json_encode($this->__serialize()); } public function unserialize($serialized) { $data = json_decode($serialized, true); + $this->__unserialize($data); + } + + public function __serialize() + { + return $this->toArray(); + } + + public function __unserialize($data) + { $this->key = $data['key']; $this->secret = $data['secret']; $this->token = $data['token']; diff --git a/tests/Credentials/CredentialsTest.php b/tests/Credentials/CredentialsTest.php index 3bc320ae15..3637448ceb 100644 --- a/tests/Credentials/CredentialsTest.php +++ b/tests/Credentials/CredentialsTest.php @@ -35,4 +35,26 @@ public function testDeterminesIfExpired() (new Credentials('foo', 'baz', 'tok', time() - 1000))->isExpired() ); } + + public function testSerialization() + { + $credentials = new Credentials('key-value', 'secret-value'); + $actual = unserialize(serialize($credentials))->toArray(); + $this->assertEquals([ + 'key' => 'key-value', + 'secret' => 'secret-value', + 'token' => null, + 'expires' => null, + ], $actual); + + $credentials = new Credentials('key-value', 'secret-value', 'token-value', 10); + $actual = unserialize(serialize($credentials))->toArray(); + + $this->assertEquals([ + 'key' => 'key-value', + 'secret' => 'secret-value', + 'token' => 'token-value', + 'expires' => 10, + ], $actual); + } }