|
|
|
<?php
|
|
|
|
namespace App\Tests;
|
|
|
|
|
|
|
|
use App\Factory\DojoFactory;
|
|
|
|
use App\Factory\UserFactory;
|
|
|
|
use App\Repository\UserRepository;
|
|
|
|
|
|
|
|
class DojoTest extends AbstractTest
|
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Requirement: A user should be able to create a dojo!
|
|
|
|
*/
|
|
|
|
public function testCreateDojo(): void
|
|
|
|
{
|
|
|
|
$userName = "FooBarFigher";
|
|
|
|
$dojoName = "BigFightDojo";
|
|
|
|
$userRepository = $this->getContainer()->get(UserRepository::class);
|
|
|
|
|
|
|
|
$this->assertCount(0, $userRepository->findByAuthName($userName));
|
|
|
|
|
|
|
|
static::createClientWithToken($userName)->request('POST', '/api/dojos', [
|
|
|
|
'json' => [
|
|
|
|
'name' => $dojoName
|
|
|
|
]
|
|
|
|
]);
|
|
|
|
|
|
|
|
$this->assertResponseStatusCodeSame(201);
|
|
|
|
|
|
|
|
$this->assertCount(1, $userRepository->findByAuthName($userName));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Requirement: A user should be request his own dojo!
|
|
|
|
*/
|
|
|
|
public function testUserReadDojo(): void
|
|
|
|
{
|
|
|
|
$userName = "FooBarFigher";
|
|
|
|
$dojoName = "BigFightDojo";
|
|
|
|
$dojo = DojoFactory::createOne(
|
|
|
|
[
|
|
|
|
'name' => $dojoName,
|
|
|
|
'owner' => UserFactory::createOne([
|
|
|
|
'authName' => $userName
|
|
|
|
])
|
|
|
|
]);
|
|
|
|
|
|
|
|
static::createClientWithToken($userName)->request('GET', '/api/dojo');
|
|
|
|
|
|
|
|
$this->assertResponseStatusCodeSame(200);
|
|
|
|
|
|
|
|
$this->assertJsonContains(
|
|
|
|
[
|
|
|
|
'name' => 'BigFightDojo',
|
|
|
|
'members' => [],
|
|
|
|
'owner' => '/api/users/' . $dojo->owner->getId()
|
|
|
|
->toBase32(),
|
|
|
|
'id' => $dojo->getId()
|
|
|
|
->toBase32()
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Requirement: A user should be request his own dojo!
|
|
|
|
* Fails, if the dojo is not yet created.
|
|
|
|
*/
|
|
|
|
public function testUserReadDojoNotYetCreated(): void
|
|
|
|
{
|
|
|
|
$userName = "FooBarFigher";
|
|
|
|
$userRepository = $this->getContainer()->get(UserRepository::class);
|
|
|
|
|
|
|
|
$this->assertCount(0, $userRepository->findByAuthName($userName));
|
|
|
|
|
|
|
|
static::createClientWithToken($userName)->request('GET', '/api/dojo');
|
|
|
|
|
|
|
|
$this->assertResponseStatusCodeSame(404);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Requirement: A user should NOT be able to create more than one dojos!
|
|
|
|
*/
|
|
|
|
public function testUserCannotCreateMultipleDojos(): void
|
|
|
|
{
|
|
|
|
$userName = "FooBarFigher";
|
|
|
|
$dojoName = "BigFightDojo";
|
|
|
|
DojoFactory::createOne([
|
|
|
|
'name' => $dojoName,
|
|
|
|
'owner' => UserFactory::createOne([
|
|
|
|
'authName' => $userName
|
|
|
|
])
|
|
|
|
]);
|
|
|
|
|
|
|
|
static::createClientWithToken($userName)->request('POST', '/api/dojos', [
|
|
|
|
'json' => [
|
|
|
|
'name' => $dojoName
|
|
|
|
]
|
|
|
|
]);
|
|
|
|
|
|
|
|
$this->assertResponseStatusCodeSame(409); // 409 Conflict
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Requirement: A user should be able to change the dojos name!
|
|
|
|
* FIXME: Add limitation so users will not do this frequently.
|
|
|
|
*/
|
|
|
|
public function testChangeDojoName(): void
|
|
|
|
{
|
|
|
|
$userName = "FooBarFigher";
|
|
|
|
$dojoName = "BigFightDojo";
|
|
|
|
$newDojoName = "BigFightDojo";
|
|
|
|
$dojo = DojoFactory::createOne(
|
|
|
|
[
|
|
|
|
'name' => $dojoName,
|
|
|
|
'owner' => UserFactory::createOne([
|
|
|
|
'authName' => $userName
|
|
|
|
])
|
|
|
|
]);
|
|
|
|
|
|
|
|
static::createClientWithToken($userName)->request('PATCH', '/api/dojos/' . $dojo->id,
|
|
|
|
[
|
|
|
|
'headers' => [
|
|
|
|
'content-type' => 'application/merge-patch+json'
|
|
|
|
],
|
|
|
|
'json' => [
|
|
|
|
'name' => $newDojoName
|
|
|
|
]
|
|
|
|
]);
|
|
|
|
|
|
|
|
$this->assertResponseStatusCodeSame(200);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|