79 lines
2.3 KiB
PHP
79 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'
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
}
|