Add NoteControllerTest 추가

This commit is contained in:
Daeil Choi
2023-02-06 14:48:29 +09:00
parent d798b23d63
commit b209a017d4

View File

@@ -0,0 +1,120 @@
package com.example.springsecuritystudy.note;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import com.example.springsecuritystudy.helper.TestConfig;
import com.example.springsecuritystudy.user.User;
import com.example.springsecuritystudy.user.UserRepository;
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*;
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
class NoteControllerTest extends TestConfig {
@Autowired
private UserRepository userRepository;
@Autowired
private NoteRepository noteRepository;
private MockMvc mvc;
private User user;
private User admin;
@BeforeEach
public void setUp(@Autowired WebApplicationContext applicationContext) {
this.mvc = MockMvcBuilders.webAppContextSetup(applicationContext)
.apply(springSecurity())
.alwaysDo(print())
.build();
User user2 = User.builder()
.username("user")
.password("user")
.authority("ROLE_USER")
.build();
User admin2 = User.builder()
.username("admin")
.password("admin")
.authority("ROLE_ADMIN")
.build();
this.user = userRepository.save(user2);
this.admin = userRepository.save(admin2);
}
@Test
void getNote_인증없음() throws Exception {
mvc.perform(
get("/note")
).andExpect(status().is3xxRedirection());
}
@Test
void getNote_인증있음() throws Exception {
mvc.perform(
get("/note").with(user(user))
).andExpect(status().isOk());
}
@Test
void postNote_인증없음() throws Exception {
mvc.perform(
post("/note").with(csrf())
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.param("title", "제목")
.param("content", "내용")
).andExpect(status().is3xxRedirection());
}
@Test
void postNote_어드민인증있음() throws Exception {
mvc.perform(
post("/note").with(csrf()).with(user(admin))
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.param("title", "제목")
.param("content", "내용")
).andExpect(status().isForbidden());
}
@Test
void postNote_유저인증있음() throws Exception {
mvc.perform(
post("/note").with(csrf()).with(user(user))
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.param("title", "제목")
.param("content", "내용")
).andExpect(redirectedUrl("note"))
.andExpect(status().is3xxRedirection());
}
@Test
void deleteNote_인증없음() throws Exception {
Note note = noteRepository.save(new Note("제목", "내용", user));
mvc.perform(
delete("/note?id=" + note.getId()).with(csrf())
).andExpect(status().is3xxRedirection());
}
@Test
void deleteNote_인증있음() throws Exception {
Note note = noteRepository.save(new Note("제목", "내용", user));
mvc.perform(
delete("/note?id=" + note.getId()).with(csrf()).with(user(user))
).andExpect(redirectedUrl("note")).andExpect(status().is3xxRedirection());
}
@Test
void deleteNote_어드민계정있음() throws Exception {
Note note = noteRepository.save(new Note("제목", "내용", user));
mvc.perform(
delete("/note?id=" + note.getId()).with(csrf()).with(user(admin))
).andExpect(status().is4xxClientError());
}
}