refonte
This commit is contained in:
26
tests/Functional/ApiTestCase.php
Normal file
26
tests/Functional/ApiTestCase.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Tests\Functional;
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
|
||||
use Zenstruck\Browser\HttpOptions;
|
||||
use Zenstruck\Browser\KernelBrowser;
|
||||
use Zenstruck\Browser\Test\HasBrowser;
|
||||
use Zenstruck\Foundry\Test\Factories;
|
||||
use Zenstruck\Foundry\Test\ResetDatabase;
|
||||
|
||||
abstract class ApiTestCase extends KernelTestCase
|
||||
{
|
||||
use ResetDatabase, Factories, HasBrowser {
|
||||
browser as baseKernelBrowser;
|
||||
}
|
||||
|
||||
protected function browser(array $options = [], array $server = []): KernelBrowser
|
||||
{
|
||||
return $this->baseKernelBrowser($options, $server)
|
||||
->setDefaultHttpOptions(
|
||||
HttpOptions::create()
|
||||
->withHeader('Accept', 'application/ld+json')
|
||||
);
|
||||
}
|
||||
}
|
||||
112
tests/Functional/UserResourceTest.php
Normal file
112
tests/Functional/UserResourceTest.php
Normal file
@@ -0,0 +1,112 @@
|
||||
<?php
|
||||
|
||||
namespace App\Tests\Functional;
|
||||
|
||||
use App\Factory\ApiTokenFactory;
|
||||
use App\Factory\CompanyFactory;
|
||||
use App\Factory\UserFactory;
|
||||
|
||||
class UserResourceTest extends ApiTestCase
|
||||
{
|
||||
public function testUserLoginHttp(): void
|
||||
{
|
||||
$company = CompanyFactory::createOne();
|
||||
$user = UserFactory::createOne(['company' => $company]);
|
||||
|
||||
$this->browser()
|
||||
->post('/login', [
|
||||
'json' => [
|
||||
'email' => $user->getEmail(),
|
||||
'password' => 'password'
|
||||
]
|
||||
])
|
||||
->assertStatus(204)
|
||||
->assertHeaderContains('Location', '/api/users/' . $user->getId());
|
||||
}
|
||||
|
||||
public function testUserLogoutHttp()
|
||||
{
|
||||
$user = UserFactory::createOne();
|
||||
$this->browser()
|
||||
->actingAs($user)
|
||||
->get('/logout')
|
||||
->assertStatus(204)
|
||||
;
|
||||
}
|
||||
|
||||
public function testUserLoginToken(): void
|
||||
{
|
||||
$token = ApiTokenFactory::createOne();
|
||||
|
||||
$this->browser()
|
||||
->get('api/users', [
|
||||
'headers' => [
|
||||
'Authorization' => 'Bearer ' . $token->getToken()
|
||||
]
|
||||
])
|
||||
->assertStatus(200);
|
||||
}
|
||||
|
||||
public function testCanGetUser(): void
|
||||
{
|
||||
$user = UserFactory::createOne();
|
||||
|
||||
$this->browser()
|
||||
->actingAs($user)
|
||||
->get('/api/users/' . $user->getId())
|
||||
->assertSuccessful()
|
||||
->assertJson()
|
||||
->assertJsonMatches('email', $user->getEmail())
|
||||
->assertJsonMatches('firstName', $user->getFirstName())
|
||||
->assertJsonMatches('lastName', $user->getLastName())
|
||||
;
|
||||
}
|
||||
|
||||
public function testCanPostToCreateUser(): void
|
||||
{
|
||||
$loggedUser = UserFactory::createOne();
|
||||
|
||||
$this->browser()
|
||||
->actingAs($loggedUser)
|
||||
->post('/api/users', [
|
||||
'json' => [
|
||||
'email' => 'john.doe@mail.com',
|
||||
'firstName' => 'John',
|
||||
'lastName' => 'Doe',
|
||||
'password' => 'password',
|
||||
],
|
||||
])
|
||||
->assertSuccessful()
|
||||
->post('/login', [
|
||||
'json' => [
|
||||
'email' => 'john.doe@mail.com',
|
||||
'password' => 'password',
|
||||
],
|
||||
])
|
||||
->assertSuccessful();
|
||||
}
|
||||
|
||||
public function testCanPatchToUpdateUser(): void
|
||||
{
|
||||
$loggedUser = UserFactory::createOne();
|
||||
|
||||
$this->browser()
|
||||
->actingAs($loggedUser)
|
||||
->patch('/api/users/' . $loggedUser->getId(), [
|
||||
'json' => [
|
||||
'firstName' => 'John',
|
||||
'lastName' => 'Doe',
|
||||
],
|
||||
'headers' => [
|
||||
'Content-Type' => 'application/merge-patch+json'
|
||||
]
|
||||
])
|
||||
->assertSuccessful()
|
||||
->get('/api/users/' . $loggedUser->getId())
|
||||
->assertSuccessful()
|
||||
->assertJson()
|
||||
->assertJsonMatches('firstName', 'John')
|
||||
->assertJsonMatches('lastName', 'Doe');
|
||||
;
|
||||
}
|
||||
}
|
||||
13
tests/bootstrap.php
Normal file
13
tests/bootstrap.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Dotenv\Dotenv;
|
||||
|
||||
require dirname(__DIR__).'/vendor/autoload.php';
|
||||
|
||||
if (method_exists(Dotenv::class, 'bootEnv')) {
|
||||
(new Dotenv())->bootEnv(dirname(__DIR__).'/.env');
|
||||
}
|
||||
|
||||
if ($_SERVER['APP_DEBUG']) {
|
||||
umask(0000);
|
||||
}
|
||||
Reference in New Issue
Block a user