<?php
|
|
namespace App\Tests;
|
|
use ApiPlatform\Core\Bridge\Symfony\Bundle\Test\ApiTestCase;
|
use App\Entity\Secret;
|
|
class SecretServerTest extends ApiTestCase
|
{
|
private $secretValidDtoFixture = ['secret' => 'Something very secretly created stuff', 'expireAfterViews' => 10, 'expireAfter' => 10];
|
|
public function testDefaultCollectionRoutes(): void
|
{
|
$client = static::createClient();
|
|
$client->request('GET', 'v1/secrets');
|
$this->assertResponseStatusCodeSame(404);
|
|
$client->request('GET', 'v1/secret/asdf');
|
$this->assertResponseStatusCodeSame(404);
|
}
|
|
public function testInvalidSecretFormats()
|
{
|
$client = static::createClient();
|
|
$invalidFixture = $this->secretValidDtoFixture;
|
$invalidFixture['expireAfterViews'] = 'sajt';
|
|
$client->request(
|
'POST',
|
'v1/secret',
|
[
|
'json' => $invalidFixture
|
]
|
);
|
//missing field, invalid field, etc
|
$this->assertResponseStatusCodeSame(405);
|
|
unset($invalidFixture['expireAfterViews']);
|
|
$client->request(
|
'POST',
|
'v1/secret',
|
[
|
'json' => $invalidFixture
|
]
|
);
|
//missing field, invalid field, etc
|
$this->assertResponseStatusCodeSame(405);
|
}
|
|
public function testValidSecretCreation()
|
{
|
$client = static::createClient();
|
|
$response = $client->request(
|
'POST',
|
'v1/secret',
|
[
|
'json' => $this->secretValidDtoFixture
|
]
|
);
|
//should be created
|
$this->assertResponseStatusCodeSame(201);
|
|
$content = $response->getContent();
|
$this->assertMatchesJsonSchema(['hash', 'secretText', 'createdAt', 'expiresAt', 'remainingViews']);
|
$objectAsArray = json_decode($content, true);
|
|
$this->assertEquals($this->secretValidDtoFixture['secret'], $objectAsArray['secretText']);
|
$this->assertEquals($this->secretValidDtoFixture['expireAfterViews'], $objectAsArray['remainingViews']);
|
|
$response = $client->request('GET', 'v1/secret/' . $objectAsArray['hash']);
|
|
$this->assertResponseStatusCodeSame(200);
|
$content = $response->getContent();
|
//we haven't saw this in the previous endpoint, we saw the creation response, so it worth to do the same check
|
$this->assertMatchesJsonSchema(['hash', 'secretText', 'createdAt', 'expiresAt', 'remainingViews']);
|
$objectAsArray = json_decode($content, true);
|
|
$this->assertEquals($this->secretValidDtoFixture['expireAfterViews'] - 1, $objectAsArray['remainingViews']);
|
}
|
}
|