factory = Mockery::mock(PaymentTokenFactory::class); $this->endpoint = Mockery::mock(PaymentTokenEndpoint::class); $this->sut = new PaymentTokenRepository($this->factory, $this->endpoint); } public function testForUserIdFromArray() { $id = 1; $token = ['id' => 'foo']; $paymentToken = new PaymentToken('foo', 'PAYMENT_METHOD_TOKEN'); expect('get_user_meta')->with($id, $this->sut::USER_META, true) ->andReturn($token); $this->factory->shouldReceive('from_array')->with($token) ->andReturn($paymentToken); $result = $this->sut->for_user_id($id); $this->assertInstanceOf(PaymentToken::class, $result); } public function testFetchForUserId() { $id = 1; $paymentToken = new PaymentToken('foo', 'PAYMENT_METHOD_TOKEN'); when('get_user_meta')->justReturn([]); $this->endpoint->shouldReceive('for_user') ->with($id) ->andReturn([$paymentToken]); expect('update_user_meta')->with($id, $this->sut::USER_META, $paymentToken->to_array()); $result = $this->sut->for_user_id($id); $this->assertInstanceOf(PaymentToken::class, $result); } public function testForUserIdFails() { $id = 1; when('get_user_meta')->justReturn([]); $this->endpoint ->expects('for_user') ->with($id) ->andThrow(RuntimeException::class); $result = $this->sut->for_user_id($id); $this->assertNull($result); } public function testDeleteToken() { $id = 1; $paymentToken = new PaymentToken('foo', 'PAYMENT_METHOD_TOKEN'); expect('delete_user_meta')->with($id, $this->sut::USER_META); $this->endpoint->shouldReceive('delete_token') ->with($paymentToken); $this->sut->delete_token($id, $paymentToken); } }