Я пишу тесты Spring Cloud Contract на контроллере MVC, в котором есть методы с аннотацией @PreAuthorize("hasRole('ADMIN')")
. Что мне нужно обеспечить для обеспечения безопасности методов?
Мне нужно проверить безопасность контроллера.
Использование безопасности Oauth2 в проекте.
Я младший разработчик (многие вещи, которые я пока не знаю), и было бы здорово, если бы вы предоставили мне расширенные ответы.
Благодаря.
Я создал базовый тестовый класс, в котором предоставлен mockMvc в методе setup () с аннотацией @Before.
Базовый тестовый класс имеет вид:
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = AdminController.class)
@ContextConfiguration(classes = {AdminControllerTestConfig.class, TestConfig.class, AdminControllerTestProperty.class})
@ComponentScan(basePackageClasses = AdminController.class)
@TestPropertySource(locations = "/AdminControllerTest.properties")
@AutoConfigureStubRunner(workOffline = true)
public class AdminControllerContractBaseTest {
//code
}
метод настройки для автоматически сгенерированных контрактных тестов
@Before
public void setup() {
Admin admin = createAdminUser();
when(adminRepository.findOneByCredentialsId(id)).thenReturn(admin);
RestAssuredMockMvc.standaloneSetup(new AdminController(adminService, credentialsService));
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(context)
.apply(springSecurity())
.build();
}
методы испытаний для автоматически сгенерированных классов испытаний
@Test
public void shouldFindAdminUserById() {
}
@Test
public void shouldNotFindAdminUserById() {
}
@Test
public void userDoesNotLoggedIn() {
}
Я знаю, что я не предоставляю никаких сведений о пользователе входа в систему для безопасности, но я не нашел информации о том, как это сделать в моей ситуации с тестами по контракту.
Я пытался установить аннотацию @WithMockUser(roles = "ADMIN")
для методов тестирования, но это не работает.
Может, я недостаточно настроен для прохождения тестов?
Кстати, у меня есть адрес электронной почты и пароль пользователя, который имеет доступ к этому API.
В автоматических испытаниях по методу, ниже которого согласно контракту
ResponseOptions response = given().spec(request)
.get("/api/admin/a")
Я ожидал код ответа 200
после прохождения тестов, но фактический код 401