/** * @test * @covers ::result */ public function it_should_error_when_an_invalid_response_is_returned_by_the_eventstore() { $this->setExpectedException(InvalidResponseException::class); $this->thenConnectionIsChecked(); $invalidResponse = ''; $projections = EventStore::forUrl('127.0.0.1', $this->httpClient); $this->httpClient->shouldReceive('send')->once()->with(m::on(function (Request $request) { return $request->getMethod() == 'GET' && (string) $request->getUri() === 'result-url'; }))->andReturn(new Response(200, [], $invalidResponse)); $projections->result(Definition::fromEventStore(['name' => '', 'mode' => '', 'status' => '', 'progress' => '', 'stateUrl' => '', 'resultUrl' => 'result-url', 'queryUrl' => '', 'enableCommandUrl' => '', 'disableCommandUrl' => ''])); }
public function get($name) { $url = $this->projectionUrl($name) . '/statistics'; $request = new Request('GET', $url); $this->sendRequest($request); $this->ensureStatusCodeIsGood($url); $data = current(json_decode($this->lastResponse->getBody()->getContents(), true)['projections']); $definition = Definition::fromEventStore($data); $definition = $definition->withUpdatedQuery($this->query($definition)); return $definition; }
/** * @test * @covers ::fromEventStore * @covers ::name * @covers ::enabled * @covers ::status * @covers ::query * @covers ::urls * @covers ::mode * @covers ::progress * @covers ::mayEmitNewEvents */ public function it_should_create_a_definition_from_data_retrieved_from_the_event_store() { $mode = "Continuous"; $name = "Organisation"; $status = "Running"; $progress = "100.0"; $resultUrl = "http://192.168.99.100:2113/projection/Organisation/result"; $stateUrl = "http://192.168.99.100:2113/projection/Organisation/state"; $statusUrl = "http://192.168.99.100:2113/projection/Organisation"; $queryUrl = "http://192.168.99.100:2113/projection/Organisation/query%3Fconfig=yes"; $enableCommandUrl = "http://192.168.99.100:2113/projection/Organisation/command/enable"; $disableCommandUrl = "http://192.168.99.100:2113/projection/Organisation/command/disable"; $resetCommandUrl = "http://192.168.99.100:2113/projection/Organisation/command/reset"; $json = <<<JSON { "coreProcessingTime": 2, "version": 4, "epoch": 4, "effectiveName": "{$name}", "writesInProgress": 0, "readsInProgress": 0, "partitionsCached": 1, "status": "{$status}", "stateReason": "", "name": "{$name}", "mode": "{$mode}", "position": "C:63821834/P:63821834; Psybizz\\\\Neon\\\\DomainModel\\\\Organisation\\\\OrganisationRegistered: -1; ", "progress": {$progress}, "lastCheckpoint": "C:63821834/P:63821834; Psybizz\\\\Neon\\\\DomainModel\\\\Organisation\\\\OrganisationRegistered: -1; ", "eventsProcessedAfterRestart": 3, "statusUrl": "{$statusUrl}", "stateUrl": "{$stateUrl}", "resultUrl": "{$resultUrl}", "queryUrl": "{$queryUrl}", "enableCommandUrl": "{$enableCommandUrl}", "disableCommandUrl": "{$disableCommandUrl}", "checkpointStatus": "", "bufferedEvents": 0, "writePendingEventsBeforeCheckpoint": 0, "writePendingEventsAfterCheckpoint": 0 } JSON; $eventStoreProjectionData = json_decode($json, true); $expectedUrls = ['state' => urldecode($stateUrl), 'result' => urldecode($resultUrl), 'query' => urldecode($queryUrl), 'commands' => ['enable' => urldecode($enableCommandUrl), 'disable' => urldecode($disableCommandUrl), 'reset' => urldecode($resetCommandUrl)]]; $definition = Definition::fromEventStore($eventStoreProjectionData); $this->assertSame(strtolower($status), $definition->status()); $this->assertSame(true, $definition->enabled()); $this->assertSame(100.0, $definition->progress()); $this->assertSame(strtolower($mode), $definition->mode()); $this->assertSame('', $definition->query()); $this->assertSame($expectedUrls, $definition->urls()); $this->assertSame(null, $definition->mayEmitNewEvents()); }