luchob/softuni-feb2023

Unit Testing

Closed this issue · 1 comments

Здравей, Лъчо!
Имам проблем с тестването на userDetailsService. Тук
when(mockUserRepository.findUserByUsername("Kalin4")) .thenReturn(Optional.of(testUserEntity));
ми подчертава Optional.of(testUserEntity) и пише: Cannot resolve method 'thenReturn(java.util.Optional)'
Махнах optional-а, но теста не минава и ми казва, че няма такъв user.
Ето теста:
`import static org.mockito.Mockito.when;

import com.example.myfirstproject.model.UserRoleEntity;
import com.example.myfirstproject.model.enums.UserRoleEnum;
import com.example.myfirstproject.repository.UserRepository;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.opentest4j.AssertionFailedError;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

import java.util.Collection;
import java.util.List;
import java.util.Optional;

@ExtendWith(MockitoExtension.class)
public class ApplicationUserDetailsTest {

private ApplicationUserDetailsService toTest;

@Mock
private UserRepository mockUserRepository;

@BeforeEach
void setup() {
    toTest = new ApplicationUserDetailsService(mockUserRepository);
}

@Test
void userFound() {

    UserEntity testUserEntity = new UserEntity()
            .setId(1)
            .setPassword("1234")
            .setUsername("Kalin4")
            .setFirstName("Kalin")
            .setLastName("Krumov")
            .setRoles(
                    List.of(new UserRoleEntity().setRole(UserRoleEnum.ADMIN))
            );

    when(mockUserRepository.findUserByUsername("Kalin4"))
            .thenReturn(Optional.of(testUserEntity));

    UserDetails testDetails = toTest.loadUserByUsername("Kalin4");

    Assertions.assertNotNull(testDetails);
    Assertions.assertEquals("Kalin4",testDetails.getUsername());
    Assertions.assertEquals("1234",testDetails.getPassword());
    Assertions.assertEquals(1,testDetails.getAuthorities().size());
    assertRole(testDetails.getAuthorities(),"ROLE_ADMIN");
}

private void assertRole(Collection<? extends GrantedAuthority> authorities,
                        String role){
    authorities
            .stream()
            .filter(r -> role.equals(r.getAuthority()))
            .findAny()
            .orElseThrow(() -> new AssertionFailedError("Role " + role + " not found!"));
}

@Test
void userNotFound() {
    Assertions.assertThrows(UsernameNotFoundException.class,
            () -> toTest.loadUserByUsername("notExisting"));
}

}`

Ето и линк към проекта: https://github.com/NIvanov17/MyFirstProject.git

Благодаря предварително!
Поздрави, Ники!

Извинявам се за притеснението, импортнал съм грешен метод.