Как тестировать авторизацию и последующие методы с помощью JUnit
У меня есть простая авторизация в приложении, протестировал его, он работает. Решил дальше протестировать методы, для которых нужна авторизация, интересен момент ListHouse у меня проходит тест, а ContractHouse выводит исключение, что авторизация не была произведена. Фулл код. Также подключил аннотацию для класса UserDetailsService:
@ContextConfiguration(classes = AuthController.class)
@Service("userDetailsServiceImpl")
public class UserDetailsServiceImpl implements UserDetailsService {
Логи:
org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
Код:
@ExtendWith(SpringExtension.class)
@SpringBootTest
public class HouseTest {
@Autowired
private UserService userService;
@Autowired
private ContractRepository contractRepository;
@Autowired
private HouseService houseService;
@Autowired
private ContractService contractService;
@Autowired
private HouseRestController houseRestController;
@Autowired
private HouseRepository houseRepository;
@MockBean
private AuthController authController;
@MockBean
private ContractDto contractDto;
@BeforeEach
public void AuthLogin() throws Exception {
UserDto userDto = new UserDto();
userDto.setEmail("[email protected]");
userDto.setPassword("igor");
authController.getLoginPage(userDto);
}
@Test
void ContractHouse() {
LocalDate endDate = LocalDate.of(2020, 10, 31);
LocalDate startDate = LocalDate.of(2020, 10, 20);
ContractDto contractDto = new ContractDto();
contractDto.setEndDate(endDate);
contractDto.setStartDate(startDate);
contractDto.setHouseId((long) 5);
contractDto.setTenantId((long) 5);
String freeHouse = houseRestController.findAllByDate(contractDto);
assertThat(freeHouse).isNotNull();
assertThat(freeHouse).isEqualTo("Квартира занята");
}
@Test
void ListHouse() {
List<House> freeHouse = houseService.findfreehouse();
assertThat(freeHouse).isNotNull();
}
}
Ответы (1 шт):
Автор решения: Темка тоже
→ Ссылка
В spring-security есть поддержка тестов. В твоём случае тебе надо использовать @WithMockUser.
Было
@Test
void ContractHouse() {
//...
}
Должно стать
@Test
@WithMockUser(authorities = {"user:write"})
void ContractHouse() {
//...
}
Эта аннотация лежит в библиотеке
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
</dependency>
P.S. удали @ExtendWith(SpringExtension.class), он уже встроен в @SpringBootTest