50 lines
2.8 KiB
PHP
50 lines
2.8 KiB
PHP
|
|
<?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€ de pâte (soit 10%)! Symboles: & ~ # | \\ ^ @ % * $ £ ¥ ¤ + = - _ Parenthèses: (test) [test] {test} <test>. Cyrillique: Добрый день. Arabe: مرحبا. Emojis: 😀🚀🐛. Test XSS: <script>alert('XSS');</script> 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': ['<img src=x onerror=alert(1)>']}\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);
|
||
|
|
}
|
||
|
|
}
|