Implemented tests for user login

This commit is contained in:
Kevin Veen-Birkenbach 2020-04-10 14:49:26 +02:00
parent 143d544dcc
commit 0b1d7dea92
2 changed files with 107 additions and 3 deletions

View File

@ -17,8 +17,17 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
*/
class DummyFixtures extends Fixture implements ContainerAwareInterface
{
/**
* @var ContainerInterface
*/
private $container;
public const USER_NAME = 'test';
public const USER_EMAIL = 'test@test.de';
public const USER_PASSWORD = 'test';
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
@ -40,9 +49,9 @@ class DummyFixtures extends Fixture implements ContainerAwareInterface
* @var User
*/
$testUser = $userManager->createUser();
$testUser->setEmail('test@test.de');
$testUser->setUsername('test');
$testUser->setPlainPassword('test');
$testUser->setEmail(self::USER_EMAIL);
$testUser->setUsername(self::USER_NAME);
$testUser->setPlainPassword(self::USER_PASSWORD);
$testUser->setEnabled(true);
$userManager->updateUser($testUser);

View File

@ -0,0 +1,95 @@
<?php
namespace Tests\Functional;
use Infinito\DataFixtures\DummyFixtures;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\DomCrawler\Crawler;
/**
* Tests if test user can login.
*
* @author Kevin Veen-Birkenbach [aka. Frantz]
*/
class UserLoginTest extends WebTestCase
{
/**
* @var Crawler
*/
private $crawler;
private $client;
/**
* Prepares the environment before running a test.
*/
protected function setUp()
{
parent::setUp();
$this->client = $this->createClient();
$this->crawler = $this->client->request('GET', '/login');
}
public function testIfLoginFormPageIsReachable(): void
{
$this->assertEquals(200, $this->client->getResponse()
->getStatusCode());
}
/**
* @todo Implemnt test for success message
*/
public function testSuccessfullLogin(): void
{
$this->client->followRedirects();
$form = $this->crawler->selectButton('Log in')->form();
$form['_username']->setValue(DummyFixtures::USER_NAME);
$form['_password']->setValue(DummyFixtures::USER_PASSWORD);
$form['_remember_me']->setValue('on');
$this->client->submit($form);
$this->assertContains(
'edit profile',
$this->client->getResponse()->getContent()
);
$this->assertContains(
'logout',
$this->client->getResponse()->getContent()
);
$this->assertContains(
'user source',
$this->client->getResponse()->getContent()
);
$this->assertContains(
DummyFixtures::USER_NAME,
$this->client->getResponse()->getContent()
);
}
public function testWrongPassword(): void
{
$this->client->followRedirects();
$form = $this->crawler->selectButton('Log in')->form();
$form['_username']->setValue(DummyFixtures::USER_NAME);
$form['_password']->setValue('wrong password');
$form['_remember_me']->setValue('on');
$this->client->submit($form);
$this->assertContains(
'Invalid credentials.',
$this->client->getResponse()->getContent()
);
}
public function testWrongUsername(): void
{
$this->client->followRedirects();
$form = $this->crawler->selectButton('Log in')->form();
$form['_username']->setValue('unknown_username');
$form['_password']->setValue(DummyFixtures::USER_PASSWORD);
$form['_remember_me']->setValue('on');
$this->client->submit($form);
$this->assertContains(
'Username could not be found.',
$this->client->getResponse()->getContent()
);
}
}