package org.initialde.yakasave.Unit;

import org.initialde.yakasave.Application.RetrieveMe;
import org.initialde.yakasave.Domain.Entities.User;
import org.initialde.yakasave.Infrastructure.Persistence.Fake.InMemoryUserRepository;
import org.initialde.yakasave.Infrastructure.authentication.FakeAuthenticationGateway;
import org.initialde.yakasave.Infrastructure.authentication.Jwt.fake.FakeJwtService;
import org.junit.jupiter.api.Test;

import java.util.UUID;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class RetrieveMeTests {
    @Test
    public void shouldRetrieveMyProfileTest() {
        var user = new User(UUID.randomUUID(), "user", "password");
        user.hashPassword();
        final var tokenGenerator = new FakeJwtService();
        final var authentication = new FakeAuthenticationGateway(tokenGenerator);
        final var userRepository = new InMemoryUserRepository();
        userRepository.save(user);

        authentication.authenticate(user);
        var retrieveMe = new RetrieveMe(authentication);
        var authenticatedUser = retrieveMe.retrieve();

        assertEquals(user.getId(), authenticatedUser.getId());
    }
}
