File size: 3,934 Bytes
d2897cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php

namespace Mautic\ReportBundle\Tests\Controller\Api;

use Mautic\CoreBundle\Test\MauticMysqlTestCase;
use Symfony\Component\HttpFoundation\Response;

final class ReportApiControllerTest extends MauticMysqlTestCase
{
    protected $useCleanupRollback = false;

    /**
     * Testing in a single method to decrease execution time from DB overhead.
     */
    public function testPostGetPatchPutDeleteEndPoints(): void
    {
        // Create a new report
        $data = json_decode(file_get_contents(__DIR__.'/data/post.json'), true);
        $this->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());
    }
}