<?php

declare(strict_types=1);

namespace Engelsystem\Test\Unit\Mail\Transport;

use Engelsystem\Mail\Transport\LogTransport;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Psr\Log\LoggerInterface;
use Psr\Log\Test\TestLogger;
use Symfony\Component\Mime\Email;

class LogTransportTest extends TestCase
{
    /**
     * @covers \Engelsystem\Mail\Transport\LogTransport::__construct
     * @covers \Engelsystem\Mail\Transport\LogTransport::doSend
     */
    public function testSend(): void
    {
        $logger = new TestLogger();
        $email = (new Email())
            ->from('some@email.host')
            ->to('foo@bar.baz', 'Test Tester <test@example.local>')
            ->subject('Testing')
            ->text('Message body');

        $transport = new LogTransport($logger);
        $transport->send($email);

        $this->assertTrue($logger->hasDebugThatContains('Send mail to'));
    }

    /**
     * @covers \Engelsystem\Mail\Transport\LogTransport::__toString
     */
    public function testToString(): void
    {
        /** @var LoggerInterface|MockObject $logger */
        $logger = $this->getMockForAbstractClass(LoggerInterface::class);

        $transport = new LogTransport($logger);
        $this->assertEquals('log://', (string) $transport);
    }
}