Spring @WebMvcTest УДАЛИТЬ запрос возврата статуса 403 - PullRequest
0 голосов
/ 23 апреля 2019

Я тестирую свой AccountContoller с помощью @WebMvcTest. Запрос GET и Update работают нормально, но DELETE выдает 403 Status.

Все запросы используют @AutenticationPrincipal - Я смог протестировать Get и Update Requeset, используя mvc.preform (...). with (аутентификация (appAuth)). andExpect (...), но УДАЛИТЬ запрос возвращается 403.

Я пытался включить @ContextConfiguration (classes = SecurityConfig.class) но дошло до того, что @webMvcTest требовал полной настройки и все еще сталкивался с множеством проблем, связанных с моим WebSecurityConfigurerAdapter. Я опубликую свою конфигурацию безопасности, если это необходимо.

Тест:

@RunWith(SpringRunner.class)
@WebMvcTest(AccountController.class)
@ContextConfiguration(classes = {SecurityConfiguration.class})
public class AccountControllerTest {

@Autowired
private MockMvc mvc;

@MockBean
private AccountService service;


@Test
public void updateAccountName() throws Exception {
    String usrNm = "admin";
    AppUser appUser = new AppUser(usrNm, "pass");

    mvc.perform(get(Path.getAccoutUrl())
            .with(authentication(new AppAuth(appUser, true)))

            )
            .andExpect(status().isOk());

    verify(service, times(1))
            .findByUsername(usrNm);
}

@Test
public void deleteAccount() throws Exception {
    String usrNm = "admin";
    AppUser appUser = new AppUser(usrNm, "pass");
    appUser.setAuthority(Authority.ADMIN);
    appUser.setState(State.ACTIVE);

    mvc.perform(delete(Path.getAccoutUrl())
              .with(authentication(new AppAuth(appUser, true)))
    )
            .andExpect(status().isOk());

    verify(service, times(1))
            .deleteByUsername(usrNm);
}

@Test
public void getAccountName() throws Exception {
    String usrNm = "admin";
    AppUser appUser = new AppUser(usrNm, "pass");

    mvc.perform(get(Path.USERNAME)
            .with(authentication(new AppAuth(appUser, true))))
            .andExpect(status().isOk())
            .andExpect(content().string(usrNm));
}

}

Контроллер:

@RestController(Path.ACCOUNT)
public class AccountController {

@Autowired
private AccountService service;

@GetMapping(Path.ACCOUNT)
public Account getAccount(@AuthenticationPrincipal AppAuth user) {  
    return service.findByUsername(user.getName());
}

@PutMapping(Path.ACCOUNT)
public void updateAccountName(  @AuthenticationPrincipal AppAuth user,
                                @RequestBody String newName) {
    Account account = service.findByUsername(user.getName());
    account.setUsername(newName);
    service.save(account);
}

@DeleteMapping(Path.ACCOUNT)
public void deleteAccount(@AuthenticationPrincipal AppAuth user) {
    service.deleteByUsername(user.getName());
}

@RequestMapping(method = RequestMethod.GET, value = Path.USERNAME)
public String getAccountName(@AuthenticationPrincipal AppAuth user) {
    return user.getName();
}

@RequestMapping(method = RequestMethod.GET, value = Path.LASTCHANGE)
public Date getLastChange(@AuthenticationPrincipal AppAuth user) {
    return service.findByUsername(user.getName()).getLastChange();
}
}

Как мне избежать 403? (желательно без использования WebSecurityConfigurerAdapter)

...