Skip to content

Commit

Permalink
Profile: email change should reset password request (#1433)
Browse files Browse the repository at this point in the history
  • Loading branch information
glaubinix authored Mar 12, 2024
1 parent 8736822 commit 24315e0
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 1 deletion.
7 changes: 6 additions & 1 deletion src/Controller/ProfileController.php
Original file line number Diff line number Diff line change
Expand Up @@ -115,15 +115,20 @@ public function packagesAction(Request $req, #[VarName('name')] User $user, Favo
public function editAction(Request $request): Response
{
$user = $this->getUser();
if (!is_object($user)) {
if (!$user instanceof User) {
throw $this->createAccessDeniedException('This user does not have access to this section.');
}

$oldEmail = $user->getEmail();
$form = $this->createForm(ProfileFormType::class, $user);

$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {
if ($oldEmail !== $user->getEmail()) {
$user->resetPasswordRequest();
}

$this->getEM()->persist($user);
$this->getEM()->flush();

Expand Down
59 changes: 59 additions & 0 deletions tests/Controller/ProfileControllerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php declare(strict_types=1);

namespace App\Tests\Controller;

use App\Entity\User;
use Doctrine\DBAL\Connection;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\KernelBrowser;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class ProfileControllerTest extends WebTestCase
{
private KernelBrowser $client;

public function setUp(): void
{
$this->client = self::createClient();
$this->client->disableReboot(); // Prevent reboot between requests
static::getContainer()->get(Connection::class)->beginTransaction();

parent::setUp();
}

public function testEditProfile(): void
{
$user = new User;
$user->setEnabled(true);
$user->setUsername('test');
$user->setEmail('[email protected]');
$user->setPassword('testtest');
$user->setApiToken('token');
$user->setGithubId('123456');

$user->initializeConfirmationToken();
$user->setPasswordRequestedAt(new \DateTime());

$em = static::getContainer()->get(ManagerRegistry::class)->getManager();
$em->persist($user);
$em->flush();

$this->client->loginUser($user);

$crawler = $this->client->request('GET', '/profile/edit');

$form = $crawler->selectButton('Update')->form();
$this->client->submit($form, [
'packagist_user_profile[email]' => $newEmail = '[email protected]',
]);

$this->assertResponseStatusCodeSame(302);

$em->clear();
$user = $em->getRepository(User::class)->find($user->getId());
$this->assertNotNull($user);
$this->assertSame($newEmail, $user->getEmail());
$this->assertNull($user->getPasswordRequestedAt());
$this->assertNull($user->getConfirmationToken());
}
}

0 comments on commit 24315e0

Please sign in to comment.