Add coverage tests, extract breadcrumb constants, add thead to detail table, ignore css:S4662
- Add test for sitemap orgas with logo image coverage - Add test for organizer settings with logo file upload - Extract BREADCRUMB_HOME/BREADCRUMB_ACCOUNT constants in AccountController - Extract BREADCRUMB_HOME/BREADCRUMB_ORGANIZERS constants in HomeController - Extract BREADCRUMB_HOME/BREADCRUMB_REGISTER constants in RegistrationController - Add thead with th headers to organizer detail info table - Ignore SonarQube css:S4662 rule for assets (Tailwind @source directive) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -13,3 +13,6 @@ sonar.eslint.reportPaths=eslint-report.json
|
||||
sonar.docker.hadolint.reportPaths=hadolint-dev.json,hadolint-prod.json
|
||||
sonar.dependencyCheck.jsonReportPath=dependency-check-report.json
|
||||
sonar.dependencyCheck.htmlReportPath=dependency-check-report.html
|
||||
sonar.issue.ignore.multicriteria=e1
|
||||
sonar.issue.ignore.multicriteria.e1.ruleKey=css:S4662
|
||||
sonar.issue.ignore.multicriteria.e1.resourceKey=assets/**
|
||||
|
||||
@@ -18,6 +18,8 @@ use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||
#[IsGranted('ROLE_USER')]
|
||||
class AccountController extends AbstractController
|
||||
{
|
||||
private const BREADCRUMB_HOME = ['name' => 'Accueil', 'url' => '/'];
|
||||
private const BREADCRUMB_ACCOUNT = ['name' => 'Mon compte', 'url' => '/mon-compte'];
|
||||
#[Route('/mon-compte', name: 'app_account')]
|
||||
public function index(Request $request, StripeService $stripeService, EntityManagerInterface $em): Response
|
||||
{
|
||||
@@ -57,8 +59,8 @@ class AccountController extends AbstractController
|
||||
'payouts' => $payouts,
|
||||
'subAccounts' => $subAccounts,
|
||||
'breadcrumbs' => [
|
||||
['name' => 'Accueil', 'url' => '/'],
|
||||
['name' => 'Mon compte', 'url' => '/mon-compte'],
|
||||
self::BREADCRUMB_HOME,
|
||||
self::BREADCRUMB_ACCOUNT,
|
||||
],
|
||||
]);
|
||||
}
|
||||
@@ -230,9 +232,9 @@ class AccountController extends AbstractController
|
||||
return $this->render('account/edit_subaccount.html.twig', [
|
||||
'subAccount' => $subAccount,
|
||||
'breadcrumbs' => [
|
||||
['name' => 'Accueil', 'url' => '/'],
|
||||
['name' => 'Mon compte', 'url' => '/mon-compte'],
|
||||
['name' => 'Sous-compte', 'url' => '/mon-compte/sous-compte/'.$subAccount->getId()],
|
||||
self::BREADCRUMB_HOME,
|
||||
self::BREADCRUMB_ACCOUNT,
|
||||
['name' => 'Sous-compte', 'url' => self::BREADCRUMB_ACCOUNT['url'].'/sous-compte/'.$subAccount->getId()],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -10,6 +10,9 @@ use Symfony\Component\Routing\Attribute\Route;
|
||||
|
||||
class HomeController extends AbstractController
|
||||
{
|
||||
private const BREADCRUMB_HOME = ['name' => 'Accueil', 'url' => '/'];
|
||||
private const BREADCRUMB_ORGANIZERS = ['name' => 'Organisateurs', 'url' => '/organisateurs'];
|
||||
|
||||
#[Route('/', name: 'app_home')]
|
||||
public function index(EntityManagerInterface $em): Response
|
||||
{
|
||||
@@ -18,7 +21,7 @@ class HomeController extends AbstractController
|
||||
|
||||
return $this->render('home/index.html.twig', [
|
||||
'breadcrumbs' => [
|
||||
['name' => 'Accueil', 'url' => '/'],
|
||||
self::BREADCRUMB_HOME,
|
||||
],
|
||||
'stats' => [
|
||||
'events' => 0,
|
||||
@@ -37,8 +40,8 @@ class HomeController extends AbstractController
|
||||
return $this->render('home/organizers.html.twig', [
|
||||
'organizers' => $organizers,
|
||||
'breadcrumbs' => [
|
||||
['name' => 'Accueil', 'url' => '/'],
|
||||
['name' => 'Organisateurs', 'url' => '/organisateurs'],
|
||||
self::BREADCRUMB_HOME,
|
||||
self::BREADCRUMB_ORGANIZERS,
|
||||
],
|
||||
]);
|
||||
}
|
||||
@@ -62,8 +65,8 @@ class HomeController extends AbstractController
|
||||
return $this->render('home/organizer_detail.html.twig', [
|
||||
'organizer' => $organizer,
|
||||
'breadcrumbs' => [
|
||||
['name' => 'Accueil', 'url' => '/'],
|
||||
['name' => 'Organisateurs', 'url' => '/organisateurs'],
|
||||
self::BREADCRUMB_HOME,
|
||||
self::BREADCRUMB_ORGANIZERS,
|
||||
['name' => $organizer->getCompanyName() ?? $organizer->getFirstName().' '.$organizer->getLastName(), 'url' => '/organisateur/'.$organizer->getId().'-'.$organizer->getSlug()],
|
||||
],
|
||||
]);
|
||||
@@ -74,7 +77,7 @@ class HomeController extends AbstractController
|
||||
{
|
||||
return $this->render('home/tarifs.html.twig', [
|
||||
'breadcrumbs' => [
|
||||
['name' => 'Accueil', 'url' => '/'],
|
||||
self::BREADCRUMB_HOME,
|
||||
['name' => 'Tarifs', 'url' => '/tarifs'],
|
||||
],
|
||||
]);
|
||||
|
||||
@@ -16,6 +16,8 @@ use Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||
|
||||
class RegistrationController extends AbstractController
|
||||
{
|
||||
private const BREADCRUMB_HOME = ['name' => 'Accueil', 'url' => '/'];
|
||||
private const BREADCRUMB_REGISTER = ['name' => 'Inscription', 'url' => '/inscription'];
|
||||
#[Route('/inscription', name: 'app_register', methods: ['GET', 'POST'])]
|
||||
public function register(
|
||||
Request $request,
|
||||
@@ -75,8 +77,8 @@ class RegistrationController extends AbstractController
|
||||
return $this->render('security/register_success.html.twig', [
|
||||
'isOrganizer' => 'organizer' === $type,
|
||||
'breadcrumbs' => [
|
||||
['name' => 'Accueil', 'url' => '/'],
|
||||
['name' => 'Inscription', 'url' => '/inscription'],
|
||||
self::BREADCRUMB_HOME,
|
||||
self::BREADCRUMB_REGISTER,
|
||||
['name' => 'Compte cree', 'url' => '/inscription'],
|
||||
],
|
||||
]);
|
||||
@@ -89,8 +91,8 @@ class RegistrationController extends AbstractController
|
||||
|
||||
return $this->render('security/register.html.twig', [
|
||||
'breadcrumbs' => [
|
||||
['name' => 'Accueil', 'url' => '/'],
|
||||
['name' => 'Inscription', 'url' => '/inscription'],
|
||||
self::BREADCRUMB_HOME,
|
||||
self::BREADCRUMB_REGISTER,
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -87,6 +87,12 @@
|
||||
</div>
|
||||
<div class="p-6">
|
||||
<table style="width:100%;border-collapse:collapse;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-left text-xs font-black uppercase tracking-widest text-gray-400" style="padding:0.75rem 1rem;">Detail</th>
|
||||
<th class="text-left text-xs font-black uppercase tracking-widest text-gray-400" style="padding:0.75rem 1rem;">Valeur</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr style="border-bottom:1px solid #e5e7eb;">
|
||||
<td style="padding:0.75rem 1rem;" class="font-black text-xs uppercase tracking-widest text-gray-400">Raison sociale</td>
|
||||
|
||||
@@ -440,6 +440,33 @@ class AccountControllerTest extends WebTestCase
|
||||
self::assertNull($em->getRepository(User::class)->find($subId));
|
||||
}
|
||||
|
||||
public function testOrganizerSettingsWithLogoUpload(): void
|
||||
{
|
||||
$client = static::createClient();
|
||||
$em = static::getContainer()->get(EntityManagerInterface::class);
|
||||
$user = $this->createUser(['ROLE_ORGANIZER'], true);
|
||||
|
||||
$client->loginUser($user);
|
||||
|
||||
$logoFile = new \Symfony\Component\HttpFoundation\File\UploadedFile(
|
||||
__DIR__.'/../../public/logo.png',
|
||||
'logo.png',
|
||||
'image/png',
|
||||
null,
|
||||
true,
|
||||
);
|
||||
|
||||
$client->request('POST', '/mon-compte/parametres', [
|
||||
'email' => $user->getEmail(),
|
||||
'phone' => '0699887766',
|
||||
], ['logo' => $logoFile]);
|
||||
|
||||
self::assertResponseRedirects('/mon-compte?tab=settings');
|
||||
|
||||
$em->refresh($user);
|
||||
self::assertNotNull($user->getLogoName());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param list<string> $roles
|
||||
*/
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace App\Tests\Controller;
|
||||
|
||||
use App\Entity\User;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
|
||||
|
||||
class SitemapControllerTest extends WebTestCase
|
||||
@@ -42,4 +44,31 @@ class SitemapControllerTest extends WebTestCase
|
||||
self::assertResponseIsSuccessful();
|
||||
self::assertStringContainsString('text/xml', $client->getResponse()->headers->get('Content-Type'));
|
||||
}
|
||||
|
||||
public function testSitemapOrgasIncludesLogoImage(): void
|
||||
{
|
||||
$client = static::createClient();
|
||||
$em = static::getContainer()->get(EntityManagerInterface::class);
|
||||
|
||||
$organizer = new User();
|
||||
$organizer->setEmail('test-sitemap-logo-'.uniqid().'@example.com');
|
||||
$organizer->setFirstName('Logo');
|
||||
$organizer->setLastName('Test');
|
||||
$organizer->setPassword('hashed');
|
||||
$organizer->setRoles(['ROLE_ORGANIZER']);
|
||||
$organizer->setIsApproved(true);
|
||||
$organizer->setIsVerified(true);
|
||||
$organizer->setCompanyName('Asso Logo');
|
||||
$organizer->setLogoName('test-logo.png');
|
||||
$em->persist($organizer);
|
||||
$em->flush();
|
||||
|
||||
$client->request('GET', '/sitemap-orgas-1.xml');
|
||||
|
||||
self::assertResponseIsSuccessful();
|
||||
$content = $client->getResponse()->getContent();
|
||||
self::assertStringContainsString('image:image', $content);
|
||||
self::assertStringContainsString('test-logo.png', $content);
|
||||
self::assertStringContainsString('Asso Logo', $content);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user