client->request('POST', '/api/reports/new', $data); $response = $this->client->getResponse(); $responseData = json_decode($response->getContent(), true); $this->assertSame(Response::HTTP_CREATED, $response->getStatusCode()); $this->assertTrue(isset($responseData['report'])); $this->assertEquals($data['name'], $responseData['report']['name']); $id = $responseData['report']['id']; $source = $data['source']; // Get the new report $this->client->restart(); $this->client->request('GET', sprintf('/api/reports/%s', $id)); $response = $this->client->getResponse(); $this->assertSame(Response::HTTP_OK, $response->getStatusCode()); $responseData = json_decode($response->getContent(), true); $this->assertTrue(isset($responseData['data'])); $this->assertTrue(isset($responseData['dataColumns'])); $this->assertTrue(isset($responseData['report'])); $this->assertEquals($data['name'], $responseData['report']['name']); // Patch a report $data = json_decode(file_get_contents(__DIR__.'/data/patch.json'), true); $this->client->request('PATCH', sprintf('/api/reports/%s/edit', $id), $data); $response = $this->client->getResponse(); $this->assertSame(Response::HTTP_OK, $response->getStatusCode()); $responseData = json_decode($response->getContent(), true); $this->assertTrue(isset($responseData['report'])); $this->assertEquals($source, $responseData['report']['source']); $this->assertEquals($data['scheduleUnit'], $responseData['report']['scheduleUnit']); $this->assertEquals($data['toAddress'], $responseData['report']['toAddress']); $this->assertEquals($data['scheduleDay'], $responseData['report']['scheduleDay']); // PUT a report $data = json_decode(file_get_contents(__DIR__.'/data/put.json'), true); $this->client->request('PUT', sprintf('/api/reports/%s/edit', $id), $data); $response = $this->client->getResponse(); $this->assertSame(Response::HTTP_OK, $response->getStatusCode()); $responseData = json_decode($response->getContent(), true); $this->assertTrue(isset($responseData['report'])); $this->assertEquals($data['name'], $responseData['report']['name']); $this->assertEquals($data['source'], $responseData['report']['source']); $this->assertEquals($data['scheduleUnit'], $responseData['report']['scheduleUnit']); $this->assertEquals($data['toAddress'], $responseData['report']['toAddress']); $this->assertEquals($data['scheduleDay'], $responseData['report']['scheduleDay']); $this->assertEmpty($responseData['report']['filters']); // DELETE a report $this->client->request('DELETE', sprintf('/api/reports/%s/delete', $id), $data); $response = $this->client->getResponse(); $this->assertSame(Response::HTTP_OK, $response->getStatusCode()); $this->assertTrue(isset($responseData['report'])); $this->assertEquals($data['name'], $responseData['report']['name']); $this->client->request('GET', sprintf('/api/reports/%s', $id), $data); $response = $this->client->getResponse(); $this->assertSame(Response::HTTP_NOT_FOUND, $response->getStatusCode()); } }