Я использую пружинную загрузку и хочу заявить об асинхронном побочном эффекте, вызвав защищенную конечную точку с помощью Mock Mvc.
Я использовал Awaitility , но очевидно, что при выполнении в другом потоке смоделированный контекст безопасности теряется.
Я не смог найти способ передачи контекста, я попытался с помощью SecurityContextHolder.setContext()
, но он не работал, я предположим, что Mock Mvc Spring сохраняет контекст по-другому.
@Test
@WithMockUser(authorities = "admin", username = "user")
void shouldRunSideEffectAsync() throws Exception {
mockMvc.perform(post("/foo")).andExpect(status().isAccepted());
await()
.atMost(TIMEOUT)
.untilAsserted(() -> mockMvc.perform(get("/foo")).andExpect(status().isOk()));
}
GET будет возвращать 404 некоторое время, а затем 200, когда асин c задача завершена. Однако это всегда будет возвращать 403, поскольку информация MockUser потеряна.
Как я могу решить эту проблему?