<?php

namespace Slovocast\Tests\Domain\Repository;

use Slovocast\Domain\Repository\User\UserRepository;
use Slovocast\Infrastructure\Api\Database\DatabaseHandlerInterface;
use Slovocast\Infrastructure\User\BasicUserAuthorization;
use Slovocast\Tests\TestCase;
use Prophecy\Argument;


class UserRepositoryTest extends TestCase
{
    public function testRegisteringAUser(): void
    {
        $user = $this->getUserFromArray();
        $databaseHandler = $this->prophesize(DatabaseHandlerInterface::class);
        
        $databaseHandler->insert(
            Argument::type('string'),
            Argument::type('array')
        )->willReturn(true);
        $databaseHandler->getConnection()->willReturn(new class {
            public function lastInsertId(): int
            {
                return 100;
            }
        });

        $userRepository = new UserRepository(
            $databaseHandler->reveal(),
            new BasicUserAuthorization()
        );

        $results = $userRepository->create($user);
        $this->assertTrue($results);
        /**
         * We are testing if the User entity has been mutated by the `create`
         * method in the UserRepository.
         */
        $this->assertEquals(100, $user->getId());
    }
}