<?php

declare(strict_types=1);

namespace App\Tests\Unit\Repository;

use App\Module\Mail\Domain\Entity\MailConfiguration;
use App\Module\Mail\Infrastructure\Doctrine\DoctrineMailConfigurationRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

/**
 * @internal
 */
class MailConfigurationRepositoryTest extends KernelTestCase
{
    private DoctrineMailConfigurationRepository $repository;
    private EntityManagerInterface $em;

    protected function setUp(): void
    {
        self::bootKernel();
        $container        = static::getContainer();
        $this->repository = $container->get(DoctrineMailConfigurationRepository::class);
        $this->em         = $container->get('doctrine.orm.entity_manager');
        $this->em->getConnection()->executeStatement('TRUNCATE TABLE mail_configuration RESTART IDENTITY CASCADE');
    }

    public function testFindSingletonReturnsNullWhenEmpty(): void
    {
        $result = $this->repository->findSingleton();

        self::assertNull($result);
    }

    public function testFindSingletonReturnsFirstRecord(): void
    {
        $config = new MailConfiguration();
        $config->setImapHost('ssl0.ovh.net');
        $config->setEnabled(false);
        $this->em->persist($config);
        $this->em->flush();

        $result = $this->repository->findSingleton();

        self::assertInstanceOf(MailConfiguration::class, $result);
        self::assertSame('ssl0.ovh.net', $result->getImapHost());
        self::assertFalse($result->isEnabled());
    }
}
