Add tests for editEvent, deleteEvent, toggles, and improve JS branch coverage

- Add 8 AccountController tests: editEvent GET/POST, access denied, delete, toggle online/secret, Stripe block
- Add editor.js test for text/element node handling in sanitizeNode
- Add cookie-consent test for banner without buttons (partial branch coverage)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Serreau Jovann
2026-03-20 19:13:31 +01:00
parent 6fab96ab44
commit 23992638d3
3 changed files with 190 additions and 0 deletions

View File

@@ -515,6 +515,181 @@ class AccountControllerTest extends WebTestCase
self::assertSame('Beautor', $event->getCity());
}
public function testEditEventPageReturnsSuccess(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$user = $this->createUser(['ROLE_ORGANIZER'], true);
$event = new \App\Entity\Event();
$event->setAccount($user);
$event->setTitle('Edit Test');
$event->setStartAt(new \DateTimeImmutable('2026-08-01 10:00'));
$event->setEndAt(new \DateTimeImmutable('2026-08-01 18:00'));
$event->setAddress('1 rue test');
$event->setZipcode('75001');
$event->setCity('Paris');
$em->persist($event);
$em->flush();
$client->loginUser($user);
$client->request('GET', '/mon-compte/evenement/'.$event->getId().'/modifier');
self::assertResponseIsSuccessful();
}
public function testEditEventSubmit(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$user = $this->createUser(['ROLE_ORGANIZER'], true);
$event = new \App\Entity\Event();
$event->setAccount($user);
$event->setTitle('Before Edit');
$event->setStartAt(new \DateTimeImmutable('2026-08-01 10:00'));
$event->setEndAt(new \DateTimeImmutable('2026-08-01 18:00'));
$event->setAddress('1 rue test');
$event->setZipcode('75001');
$event->setCity('Paris');
$em->persist($event);
$em->flush();
$client->loginUser($user);
$client->request('POST', '/mon-compte/evenement/'.$event->getId().'/modifier', [
'title' => 'After Edit',
'description' => 'Nouvelle description',
'start_at' => '2026-09-01T10:00',
'end_at' => '2026-09-01T18:00',
'address' => '2 rue modif',
'zipcode' => '69001',
'city' => 'Lyon',
'is_online' => '1',
]);
self::assertResponseRedirects('/mon-compte?tab=events');
}
public function testEditEventDeniedForOtherUser(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$owner = $this->createUser(['ROLE_ORGANIZER'], true);
$other = $this->createUser(['ROLE_ORGANIZER'], true);
$event = new \App\Entity\Event();
$event->setAccount($owner);
$event->setTitle('Owner Event');
$event->setStartAt(new \DateTimeImmutable('2026-08-01 10:00'));
$event->setEndAt(new \DateTimeImmutable('2026-08-01 18:00'));
$event->setAddress('1 rue');
$event->setZipcode('75001');
$event->setCity('Paris');
$em->persist($event);
$em->flush();
$client->loginUser($other);
$client->request('GET', '/mon-compte/evenement/'.$event->getId().'/modifier');
self::assertResponseStatusCodeSame(403);
}
public function testDeleteEvent(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$user = $this->createUser(['ROLE_ORGANIZER'], true);
$event = new \App\Entity\Event();
$event->setAccount($user);
$event->setTitle('To Delete');
$event->setStartAt(new \DateTimeImmutable('2026-08-01 10:00'));
$event->setEndAt(new \DateTimeImmutable('2026-08-01 18:00'));
$event->setAddress('1 rue');
$event->setZipcode('75001');
$event->setCity('Paris');
$em->persist($event);
$em->flush();
$eventId = $event->getId();
$client->loginUser($user);
$client->request('POST', '/mon-compte/evenement/'.$eventId.'/supprimer');
self::assertResponseRedirects('/mon-compte?tab=events');
}
public function testToggleEventOnline(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$user = $this->createUser(['ROLE_ORGANIZER'], true);
$user->setStripeChargesEnabled(true);
$user->setStripePayoutsEnabled(true);
$em->flush();
$event = new \App\Entity\Event();
$event->setAccount($user);
$event->setTitle('Toggle Online');
$event->setStartAt(new \DateTimeImmutable('2026-08-01 10:00'));
$event->setEndAt(new \DateTimeImmutable('2026-08-01 18:00'));
$event->setAddress('1 rue');
$event->setZipcode('75001');
$event->setCity('Paris');
$em->persist($event);
$em->flush();
$client->loginUser($user);
$client->request('POST', '/mon-compte/evenement/'.$event->getId().'/en-ligne');
self::assertResponseRedirects('/mon-compte/evenement/'.$event->getId().'/modifier');
}
public function testToggleEventOnlineBlockedWithoutStripe(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$user = $this->createUser(['ROLE_ORGANIZER'], true);
$event = new \App\Entity\Event();
$event->setAccount($user);
$event->setTitle('No Stripe');
$event->setStartAt(new \DateTimeImmutable('2026-08-01 10:00'));
$event->setEndAt(new \DateTimeImmutable('2026-08-01 18:00'));
$event->setAddress('1 rue');
$event->setZipcode('75001');
$event->setCity('Paris');
$em->persist($event);
$em->flush();
$client->loginUser($user);
$client->request('POST', '/mon-compte/evenement/'.$event->getId().'/en-ligne');
self::assertResponseRedirects('/mon-compte/evenement/'.$event->getId().'/modifier');
}
public function testToggleEventSecret(): void
{
$client = static::createClient();
$em = static::getContainer()->get(EntityManagerInterface::class);
$user = $this->createUser(['ROLE_ORGANIZER'], true);
$event = new \App\Entity\Event();
$event->setAccount($user);
$event->setTitle('Toggle Secret');
$event->setStartAt(new \DateTimeImmutable('2026-08-01 10:00'));
$event->setEndAt(new \DateTimeImmutable('2026-08-01 18:00'));
$event->setAddress('1 rue');
$event->setZipcode('75001');
$event->setCity('Paris');
$em->persist($event);
$em->flush();
$client->loginUser($user);
$client->request('POST', '/mon-compte/evenement/'.$event->getId().'/secret');
self::assertResponseRedirects('/mon-compte/evenement/'.$event->getId().'/modifier');
}
/**
* @param list<string> $roles
*/

View File

@@ -49,6 +49,13 @@ describe('initCookieConsent', () => {
expect(banner.classList.contains('hidden')).toBe(true)
})
it('handles banner without buttons', () => {
document.body.innerHTML = '<div id="cookie-banner" class="hidden"></div>'
initCookieConsent()
const banner = document.getElementById('cookie-banner')
expect(banner.classList.contains('hidden')).toBe(false)
})
it('does nothing without banner element', () => {
document.body.innerHTML = ''
expect(() => initCookieConsent()).not.toThrow()

View File

@@ -110,6 +110,14 @@ describe('ETicketEditor', () => {
expect(event.defaultPrevented).toBe(true)
})
it('sanitizeNode handles text nodes and element nodes', () => {
const html = 'Hello <b>world</b> plain'
const result = sanitizeHtml(html)
expect(result).toContain('Hello')
expect(result).toContain('<b>world</b>')
expect(result).toContain('plain')
})
it('allows non-tab keys', () => {
const editor = createEditor()
const content = editor.querySelector('.ete-content')