ldc-supportweb/tests/Unit/Services/BrevoWebookParserTest.php

50 lines
2.8 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
namespace Tests\Unit\Services;
use App\Dto\BrevoWebHookDto;
use App\Services\BrevoWebookParser;
use PHPUnit\Framework\TestCase;
class BrevoWebookParserTest extends TestCase
{
private BrevoWebookParser $parser;
protected function setUp(): void
{
parent::setUp();
$this->parser = new BrevoWebookParser();
}
public function testCanExtractDataWithRegexUsingPipedFormat(): void
{
// GIVEN
$rawHtml = <<<TEXT
Détails de la demande :\r\n\r\nOutil envoi de mails en masse\r\n\r\n\r\nDescription\r\nReponse\r\n\r\n\r\nMatricule et Nom du demandeur\r\nK00112323 : toto jean\r\n\r\n\r\nEmail du demandeur\r\ntoto.jean@ldc.fr : Jean\r\n\r\n\r\nMarque / Filiale\r\nLDC Service\r\n\r\n\r\nPour quels besoins avez-vous besoin d'envoyer des emails en masse ?\r\nL'aigüe ambiguïté exige qu'on s'y penche. Œil, cœur, bœuf: la naïveté est un mythe. Test accents: àéèïôùç. Maman a acheté 15,99&euro; de pâte (soit 10%)! Symboles: & ~ # | \\ ^ @ % * $ £ ¥ ¤ + = - _ Parenthèses: (test) [test] {test} &lt;test&gt;. Cyrillique: Добрый день. Arabe: مرحبا. Emojis: 😀🚀🐛. Test XSS: &lt;script&gt;alert('XSS');&lt;/script&gt; Test SQL: SELECT * FROM users WHERE nom = 'O\\'Brian'; DROP TABLE test; -- Fin du texte 1. 1234567890. Remplissage pour atteindre un peu moins de 500 chars.\r\n\r\n\r\nDate de première envoi souhaité\r\n30/06/2026\r\n\r\n\r\nCommentaire\r\nTest de sauts de ligne pour le second champ.\r\n\r\n\tTabulation et espaces multiples.\r\nJSON :\r\n{'id': 999, 'name': 'L'Étranger', 'tags': ['&lt;img src=x onerror=alert(1)&gt;']}\r\n\r\nVérification Regex :\r\nEmail: jean.dupont+test@exemple.co.uk\r\nURL: https://www.exemple.com/api/v1/data?p=1#ancre\r\nTél: +33(0)123456789\r\nIPv4: 192.168.1.254 | IPv6: 2001:db8::8a2e:370:7334\r\n\r\nCe second bloc vérifie que les données structurées et les liens survivent au transfert. Remplissage pour atteindre la limite de sept cents caractères sans la dépasser. Chinois: 这是一个测试. Japonais: こんにちは世界. Test des retours chariots invisibles. Fin du second bloc de test.\r\n\r\n\r\n
TEXT;
// WHEN
$dto = $this->parser->parseRawHtml($rawHtml);
// THEN
$this->assertInstanceOf(BrevoWebHookDto::class, $dto);
$this->assertEquals('LDC Service', $dto->brand);
$this->assertEquals($rawHtml, $dto->plainTextContent);
}
public function testHandlesMissingFieldsGracefully(): void
{
// GIVEN
$rawHtml = "<p>Contenu classique sans le formalisme du tableau markdown</p>";
// WHEN
$dto = $this->parser->parseRawHtml($rawHtml);
// THEN
$this->assertNull($dto->brand);
$this->assertEquals("Contenu classique sans le formalisme du tableau markdown", $dto->plainTextContent);
}
}