/** * @test */ public function it_can_send_a_payload() { $self = $this; $token = 'fake-token'; $mockRequestData = ['fruit' => 'apple', 'token' => $token]; $mockResponseData = ['ok' => true, 'fruit' => 'apple']; $handler = HandlerStack::create(new MockHandler([new Response(200, [], json_encode($mockResponseData))])); $historyContainer = []; $history = Middleware::history($historyContainer); $handler->push($history); $apiClient = new ApiClient($token, new Client(['handler' => $handler])); $apiClient->addRequestListener(function (RequestEvent $event) use(&$eventsDispatched, $mockRequestData, $self) { $eventsDispatched[ApiClient::EVENT_REQUEST] = true; $self->assertEquals($mockRequestData, $event->getRawPayload()); }); $apiClient->addResponseListener(function (ResponseEvent $event) use(&$eventsDispatched, $mockResponseData, $self) { $eventsDispatched[ApiClient::EVENT_RESPONSE] = true; $self->assertEquals($mockResponseData, $event->getRawPayloadResponse()); }); $payload = new PayloadMock(); $payload->setFruit($mockRequestData['fruit']); $apiClient->send($payload); $transaction = $historyContainer[0]; $requestUrl = (string) $transaction['request']->getUri(); $requestContentType = $transaction['request']->getHeader('content-type')[0]; parse_str($transaction['request']->getBody(), $requestBody); $responseBody = json_decode($transaction['response']->getBody(), true); $this->assertEquals(ApiClient::API_BASE_URL . 'mock', $requestUrl); $this->assertEquals('application/x-www-form-urlencoded', $requestContentType); $this->assertEquals($mockRequestData, $requestBody); $this->assertEquals($mockResponseData, $responseBody); $this->assertArrayHasKey(ApiClient::EVENT_REQUEST, $eventsDispatched); $this->assertArrayHasKey(ApiClient::EVENT_RESPONSE, $eventsDispatched); }
/** * @test */ public function it_can_be_serialized() { $payload = new PayloadMock(); $payload->setFruit('apple'); $serializedPayload = $this->payloadSerializer->serialize($payload); $this->assertInternalType('array', $serializedPayload); $this->assertArrayHasKey('fruit', $serializedPayload); $this->assertEquals($payload->getFruit(), $serializedPayload['fruit']); }