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' ]); } }