fix issue with password change + tests user lifecycle

This commit is contained in:
Julien Fastré 2016-01-05 13:47:17 +01:00
parent 9fe445ed20
commit dabd58ed89
3 changed files with 128 additions and 38 deletions

View File

@ -354,7 +354,15 @@ class UserController extends Controller
$editForm->handleRequest($request); $editForm->handleRequest($request);
if ($editForm->isValid()) { if ($editForm->isValid()) {
$password = $editForm->getData(); $password = $editForm->getData()->getPassword();
// logging for debug !! WARNING print the new password !!
$this->get('logger')->debug('update password for an user',
array('method' => __METHOD__, 'password' => $password,
'user' => $user->getUsername()));
// logging for prod
$this->get('logger')->info('update password for an user',
array('method' => __METHOD__, 'user' => $user->getUsername()));
$user->setPassword($this->get('security.password_encoder') $user->setPassword($this->get('security.password_encoder')
->encodePassword($user, $password)); ->encodePassword($user, $password));

View File

@ -18,6 +18,10 @@ Export Menu: Export
Admin Menu: Menu d'administration Admin Menu: Menu d'administration
Details: Détails Details: Détails
Edit: Modifier
Update: Mettre à jour
Back to the list: Retour à la liste
#serach #serach
Your search is empty. Please provide search terms.: La recherche est vide. Merci de fournir des termes de recherche. Your search is empty. Please provide search terms.: La recherche est vide. Merci de fournir des termes de recherche.
The domain %domain% is unknow. Please check your search.: Le domaine de recherche "%domain%" est inconnu. Merci de vérifier votre recherche. The domain %domain% is unknow. Please check your search.: Le domaine de recherche "%domain%" est inconnu. Merci de vérifier votre recherche.
@ -85,6 +89,7 @@ The permissions have been added: Les permissions ont été ajoutées
Edit password for %username%: Éditer le mot de passe de %username% Edit password for %username%: Éditer le mot de passe de %username%
Change password: Changer le mot de passe Change password: Changer le mot de passe
Back to the user edition: Retour au formulaire d'édition Back to the user edition: Retour au formulaire d'édition
Password successfully updated!: Mot de passe mis à jour
#admin section for circles (old: scopes) #admin section for circles (old: scopes)
List circles: Liste des cercles List circles: Liste des cercles

View File

@ -6,54 +6,131 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class UserControllerTest extends WebTestCase class UserControllerTest extends WebTestCase
{ {
public function testBlank() private $client;
public function setUp()
{ {
$this->markTestSkipped(); self::bootKernel();
$this->client = static::createClient(array(), array(
'PHP_AUTH_USER' => 'admin',
'PHP_AUTH_PW' => 'password',
'HTTP_ACCEPT_LANGUAGE' => 'fr_FR'
));
} }
/*
public function testCompleteScenario() public function testList()
{ {
// Create a new client to browse the application // get the list
$client = static::createClient(); $crawler = $this->client->request('GET', '/fr/admin/user/');
$this->assertEquals(200, $this->client->getResponse()->getStatusCode(),
// Create a new entry in the database "Unexpected HTTP status code for GET /admin/user/");
$crawler = $client->request('GET', '/admin/user/');
$this->assertEquals(200, $client->getResponse()->getStatusCode(), "Unexpected HTTP status code for GET /admin/user/"); $link = $crawler->selectLink('Ajouter un nouvel utilisateur')->link();
$crawler = $client->click($crawler->selectLink('Create a new entry')->link()); $this->assertInstanceOf('Symfony\Component\DomCrawler\Link', $link);
$this->assertRegExp('|/fr/admin/user/new$|', $link->getUri());
}
public function testNew()
{
$crawler = $this->client->request('GET', '/fr/admin/user/new');
$username = 'Test_user'. uniqid();
$password = 'Password1234!';
// Fill in the form and submit it // Fill in the form and submit it
$form = $crawler->selectButton('Create')->form(array( $form = $crawler->selectButton('Créer')->form(array(
'chill_mainbundle_user[field_name]' => 'Test', 'chill_mainbundle_user[username]' => $username,
// ... other fields to fill 'chill_mainbundle_user[plainPassword][password][first]' => $password,
'chill_mainbundle_user[plainPassword][password][second]' => $password
)); ));
$client->submit($form); $this->client->submit($form);
$crawler = $client->followRedirect(); $crawler = $this->client->followRedirect();
// Check data in the show view // Check data in the show view
$this->assertGreaterThan(0, $crawler->filter('td:contains("Test")')->count(), 'Missing element td:contains("Test")'); $this->assertGreaterThan(0, $crawler->filter('td:contains("Test_user")')->count(),
'Missing element td:contains("Test user")');
$update = $crawler->selectLink('Modifier')->link();
$this->assertInstanceOf('Symfony\Component\DomCrawler\Link', $update);
$this->assertRegExp('|/fr/admin/user/[0-9]{1,}/edit$|', $update->getUri());
//test the auth of the new client
$this->isPasswordValid($username, $password);
return $update;
}
protected function isPasswordValid($username, $password)
{
/* @var $passwordEncoder \Symfony\Component\Security\Core\Encoder\UserPasswordEncoder */
$passwordEncoder = self::$kernel->getContainer()
->get('security.password_encoder');
$user = self::$kernel->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('ChillMainBundle:User')
->findOneBy(array('username' => $username));
$this->assertTrue($passwordEncoder->isPasswordValid($user, $password));
}
/**
*
* @param \Symfony\Component\DomCrawler\Link $update
* @depends testNew
*/
public function testUpdate(\Symfony\Component\DomCrawler\Link $update)
{
$crawler = $this->client->click($update);
// Edit the entity $username = 'Foo bar '.uniqid();
$crawler = $client->click($crawler->selectLink('Edit')->link()); $form = $crawler->selectButton('Mettre à jour')->form(array(
'chill_mainbundle_user[username]' => $username,
$form = $crawler->selectButton('Update')->form(array(
'chill_mainbundle_user[field_name]' => 'Foo',
// ... other fields to fill
)); ));
$client->submit($form); $this->client->submit($form);
$crawler = $client->followRedirect(); $crawler = $this->client->followRedirect();
// Check the element contains an attribute with value equals "Foo" // Check the element contains an attribute with value equals "Foo"
$this->assertGreaterThan(0, $crawler->filter('[value="Foo"]')->count(), 'Missing element [value="Foo"]'); $this->assertGreaterThan(0, $crawler->filter('[value="'.$username.'"]')->count(),
'Missing element [value="Foo bar"]');
// Delete the entity
$client->submit($crawler->selectButton('Delete')->form()); $updatePassword = $crawler->selectLink('Modifier le mot de passe')->link();
$crawler = $client->followRedirect();
$this->assertInstanceOf('Symfony\Component\DomCrawler\Link', $updatePassword);
// Check the entity has been delete on the list $this->assertRegExp('|/fr/admin/user/[0-9]{1,}/edit_password$|',
$this->assertNotRegExp('/Foo/', $client->getResponse()->getContent()); $updatePassword->getUri());
return array('link' => $updatePassword, 'username' => $username);
}
/**
*
* @param \Symfony\Component\DomCrawler\Link $updatePassword
* @depends testUpdate
*/
public function testUpdatePassword(array $params)
{
$link = $params['link'];
$username = $params['username'];
$newPassword = '1234Password!';
$crawler = $this->client->click($link);
$form = $crawler->selectButton('Changer le mot de passe')->form(array(
'chill_mainbundle_user_password[password][first]' => $newPassword,
'chill_mainbundle_user_password[password][second]' => $newPassword,
));
$this->client->submit($form);
$this->assertTrue($this->client->getResponse()->isRedirect(),
"the response is a redirection");
$this->client->followRedirect();
$this->isPasswordValid($username, $newPassword);
} }
*/
} }