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

78 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Unit\Services;
use App\Dto\BrevoWebHookDto;
use App\Enums\Tickets\TicketStatusEnum;
use App\Enums\Tickets\TicketTypeEnum;
use App\Models\Site;
use App\Models\Ticket;
use App\Models\User;
use App\Services\AutomaticTicketCreator;
use App\Services\BrevoWebookParser;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Mockery;
use Mockery\MockInterface;
use Tests\TestCase;
class AutomaticTicketCreatorTest extends TestCase
{
use RefreshDatabase;
private AutomaticTicketCreator $creator;
private BrevoWebookParser|MockInterface $parserMock;
protected function setUp(): void
{
parent::setUp();
$this->parserMock = Mockery::mock(BrevoWebookParser::class);
$this->creator = new AutomaticTicketCreator($this->parserMock);
}
public function testCanCreateTicketWithProjectManagerAndBrand(): void
{
// GIVEN
$site = Site::factory()->create();
$manager = User::factory()->create();
$rawHtml = 'Simili HTML dynamique';
$dto = new BrevoWebHookDto(
plainTextContent: 'Contenu parsé',
brand: 'LDC Service'
);
$this->parserMock
->shouldReceive('parseRawHtml')
->once()
->with($rawHtml)
->andReturn($dto);
// WHEN
$ticket = $this->creator->createTicket($site, $manager, $rawHtml);
// THEN
$this->assertInstanceOf(Ticket::class, $ticket);
$this->assertEquals($site->id, $ticket->site_id);
$this->assertEquals(TicketTypeEnum::mailing, $ticket->type);
$this->assertEquals(TicketStatusEnum::estimateTodo, $ticket->status);
$this->assertEquals('Demande de mail en masse pour LDC Service', $ticket->title);
$this->assertStringContainsString('Contenu :', $ticket->text);
$this->assertStringContainsString('Contenu parsé', $ticket->text);
$this->assertFalse($ticket->is_internal);
$this->assertTrue($ticket->user->is($manager));
$this->assertTrue($ticket->assignedUser->is($manager));
$this->assertDatabaseHas('tickets', [
'id' => $ticket->id,
'created_by' => $manager->id,
'assigned_to' => $manager->id,
'title' => 'Demande de mail en masse pour LDC Service'
]);
}
}