Модульные тесты не могут создать securityContect для весенней безопасности @WithUserDetails - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь протестировать контроллер с помощью @WithUserDetails, поэтому я могу использовать принципала аутентификации, но когда я это делаю, ему не удается создать контекст безопасности, я настроил свои тесты следующим образом

    @RunWith(SpringRunner.class)
@WebMvcTest(BasketController.class)
@ContextConfiguration(classes = { BasketController.class, ProductService.class, UserDetailsServiceImpl.class,
        SecurityConfig.class })
public class BasketControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private ProductService productService;

    @MockBean
    private UserDetailsServiceImpl userService;
    @MockBean
    private Authentication auth;

    private Set<Authority> authorities;

    private User user;
    private Basket basket;
    private BasketItem basketItem;
    private List<BasketItem> basketList;

    @Before
    public void Setup() {
        userService = new UserDetailsServiceImpl();
        this.authorities = new HashSet<>();
        this.authorities.add(new Authority(1L, Role.ROLE_EMPLOYEE));
        basket = new Basket();
        this.basketList = new ArrayList<BasketItem>();
        byte[] image = new byte[1];
        image[0] = 'a';

        basketList.add(new BasketItem(1L, 2,
                new Product(1L, "product", "productDescription", "productCategory", image, new BigDecimal(1.00), 1)));

        basket.setBasket(basketList);
        user = new User(1L, "testUser", "testPassword", basket, authorities);

        when(userService.loadUserByUsername("testUser")).thenReturn(user);
        when(auth.getPrincipal()).thenReturn(user);

    }

    @Test
    @WithUserDetails(value = "userService", userDetailsServiceBeanName = "userService")
    public void testThatBasketPageReturnsBasketPage() throws Exception {
        mockMvc.perform(get("/basket")).andExpect(status().isOk()).andExpect(view().name("basket"));

    }
}

и мой UserDetailsService имеет квалификатор userService, я не уверен, что я делаю не так, поскольку имя служебного компонента совпадает с моим фактическим сервисом.

...