diff --git a/src/test/java/com/example/gimmegonghakauth/Controller/UserControllerTest.java b/src/test/java/com/example/gimmegonghakauth/Controller/UserControllerTest.java index f674fb0..8d6156b 100644 --- a/src/test/java/com/example/gimmegonghakauth/Controller/UserControllerTest.java +++ b/src/test/java/com/example/gimmegonghakauth/Controller/UserControllerTest.java @@ -3,15 +3,22 @@ import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrlPattern; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import com.example.gimmegonghakauth.dao.MajorsDao; +import com.example.gimmegonghakauth.dao.UserDao; +import com.example.gimmegonghakauth.domain.MajorsDomain; +import com.example.gimmegonghakauth.domain.UserDomain; import jakarta.transaction.Transactional; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.TestPropertySource; @@ -24,13 +31,31 @@ @Nested @DisplayName("유저 컨트롤러 테스트") @ActiveProfiles("test") +@Transactional //@TestPropertySource(locations = "classpath:submodule-properties/application-test.properties") public class UserControllerTest { @Autowired private MockMvc mockMvc; - @Transactional + @Autowired + private UserDao userDao; + + @Autowired + private MajorsDao majorsDao; + + @BeforeEach + public void setUser() { + String encodedPassword = new BCryptPasswordEncoder().encode("qwer"); + + UserDomain user = UserDomain.builder().studentId(19111111L) + .password(encodedPassword).email("test@sju.com") + .majorsDomain(majorsDao.findByMajor("컴퓨터공학과")) + .name("testUser") + .build(); + userDao.save(user); + } + @Test @DisplayName("회원가입시 비밀번호 일치 테스트 (일치)") public void testSignupWithMatchingPasswords() throws Exception { @@ -51,7 +76,7 @@ public void testSignupWithMatchingPasswords() throws Exception { @DisplayName("회원가입시 비밀번호 일치 테스트 (불일치)") void testSignupWithMisMatchedPasswords() throws Exception { mockMvc.perform(post("/user//signup") - .param("studentId", "19111111") + .param("studentId", "19654321") .param("password1", "password123") .param("password2", "mismatchedPassword") .param("email", "test@example.com") @@ -83,8 +108,7 @@ void testDuplicatedStudentId() throws Exception { // 가정2: studentId 에서 "duplicate" 오류 } - @Transactional - @Test //(주의) DB 내용기반으로 테스트됨 + @Test @DisplayName("회원 탈퇴시 비밀번호 일치 테스트 (일치)") @WithMockUser(username = "19111111", password = "qwer", roles = "USER") public void testWithdrawalWithValidPassword() throws Exception { @@ -95,7 +119,6 @@ public void testWithdrawalWithValidPassword() throws Exception { .andExpect(redirectedUrl("/user/logout")); } - @Transactional @Test //(주의) DB 내용기반으로 테스트됨 @DisplayName("회원 탈퇴시 비밀번호 일치 테스트 (불일치)") @WithMockUser(username = "19111111", password = "qwer", roles = "USER") @@ -110,7 +133,6 @@ public void testWithdrawalWithInvalidPassword() throws Exception { //가정2 : 탈퇴가 실패하면 withdrawalError 에러 발생 } - @Transactional @Test @DisplayName("비밀번호 변경 성공") @WithMockUser(username = "19111111", password = "qwer", roles = "USER") @@ -124,7 +146,6 @@ public void testChangePasswordSuccess() throws Exception { .andExpect(redirectedUrl("/user/login")); } - @Transactional @Test @DisplayName("비밀번호 변경 실패(현재 비밀번호 불일치)") @WithMockUser(username = "19111111", password = "qwer", roles = "USER") @@ -136,12 +157,12 @@ public void testChangePasswordFail1() throws Exception { .with(csrf())) .andExpect(MockMvcResultMatchers.view().name("user/changePassword")) .andExpect(MockMvcResultMatchers.model() - .attributeHasFieldErrorCode("changePasswordDto", "currentPassword", "currentPasswordInCorrect")); + .attributeHasFieldErrorCode("changePasswordDto", "currentPassword", + "currentPasswordInCorrect")); //가정1 : 변경이 실패하면 비밀번호 변경 폼으로 이동 //가정2 : 변경이 실패하면 currentPasswordInCorrect 에러 발생 } - @Transactional @Test @DisplayName("비밀번호 변경 실패 (새 비밀번호와 현재 비밀번호와 일치)") @WithMockUser(username = "19111111", password = "qwer", roles = "USER") @@ -153,12 +174,12 @@ public void testChangePasswordFail2() throws Exception { .with(csrf())) .andExpect(MockMvcResultMatchers.view().name("user/changePassword")) .andExpect(MockMvcResultMatchers.model() - .attributeHasFieldErrorCode("changePasswordDto", "newPassword1", "sameCurrentPassword")); + .attributeHasFieldErrorCode("changePasswordDto", "newPassword1", + "sameCurrentPassword")); //가정1 : 변경이 실패하면 비밀번호 변경 폼으로 이동 //가정2 : 변경이 실패하면 currentPasswordInCorrect 에러 발생 } - @Transactional @Test @DisplayName("비밀번호 변경 실패(새 비밀번호 재입력 불일치)") @WithMockUser(username = "19111111", password = "qwer", roles = "USER") @@ -170,7 +191,8 @@ public void testChangePasswordFail3() throws Exception { .with(csrf())) .andExpect(MockMvcResultMatchers.view().name("user/changePassword")) .andExpect(MockMvcResultMatchers.model() - .attributeHasFieldErrorCode("changePasswordDto", "newPassword2", "newPasswordInCorrect")); + .attributeHasFieldErrorCode("changePasswordDto", "newPassword2", + "newPasswordInCorrect")); //가정1 : 변경이 실패하면 비밀번호 변경 폼으로 이동 //가정2 : 변경이 실패하면 currentPasswordInCorrect 에러 발생 } diff --git a/src/test/java/com/example/gimmegonghakauth/Service/CompletedCoursesServiceDataTest.java b/src/test/java/com/example/gimmegonghakauth/Service/CompletedCoursesServiceDataTest.java index 65116e3..61726b4 100644 --- a/src/test/java/com/example/gimmegonghakauth/Service/CompletedCoursesServiceDataTest.java +++ b/src/test/java/com/example/gimmegonghakauth/Service/CompletedCoursesServiceDataTest.java @@ -71,10 +71,10 @@ public void setCourses() { @BeforeEach public void setUser() { //유저 Entity save - UserDomain user = UserDomain.builder().studentId(19011684L) - .password("1234").email("test@gmail.com") + UserDomain user = UserDomain.builder().studentId(19111111L) + .password("qwer").email("test@gmail.com") .majorsDomain(majorsDao.findByMajor("컴퓨터공학과")) - .name("이희수") + .name("testUser") .build(); userDao.save(user); } @@ -85,7 +85,7 @@ public void testUploadFile() { //기이수 과목 데이터1 CompletedCoursesDomain data1 = CompletedCoursesDomain.builder(). - userDomain(userDao.findByStudentId(19011684L).get()). + userDomain(userDao.findByStudentId(19111111L).get()). coursesDomain(coursesDao.findByCourseId(12345L)). year(23).semester("1학기"). build(); @@ -93,7 +93,7 @@ public void testUploadFile() { //기이수 과목 데이터2 CompletedCoursesDomain data2 = CompletedCoursesDomain.builder(). - userDomain(userDao.findByStudentId(19011684L).get()). + userDomain(userDao.findByStudentId(19111111L).get()). coursesDomain(coursesDao.findByCourseId(54321L)). year(23).semester("1학기"). build(); @@ -107,14 +107,14 @@ public void testUploadFile() { dataList.add(data1); dataList.add(data2); - UserDomain user = userDao.findByStudentId(19011684L).get(); + UserDomain user = userDao.findByStudentId(19111111L).get(); assertEquals(dataList, completedCoursesDao.findByUserDomain(user)); } @Test @DisplayName("재업로드 테스트1(첫 업로드)") public void testUserUploadStatus1() { - UserDomain user = userDao.findByStudentId(19011684L).get(); + UserDomain user = userDao.findByStudentId(19111111L).get(); //데이터 확인 completedCoursesService.checkUser(user); @@ -132,7 +132,7 @@ public void testUserUploadStatus2() { //기이수 과목 데이터 1 CompletedCoursesDomain data1 = CompletedCoursesDomain.builder(). - userDomain(userDao.findByStudentId(19011684L).get()). + userDomain(userDao.findByStudentId(19111111L).get()). coursesDomain(coursesDao.findByCourseId(12345L)). year(23).semester("1학기"). build(); @@ -142,7 +142,7 @@ public void testUserUploadStatus2() { List dataList = new ArrayList<>(); dataList.add(data1); - UserDomain user = userDao.findByStudentId(19011684L).get(); + UserDomain user = userDao.findByStudentId(19111111L).get(); //데이터 삭제 completedCoursesService.checkUser(user); @@ -160,14 +160,14 @@ public void testUserUploadStatus3() { //기이수 과목 데이터 1 CompletedCoursesDomain data1 = CompletedCoursesDomain.builder(). - userDomain(userDao.findByStudentId(19011684L).get()). + userDomain(userDao.findByStudentId(19111111L).get()). coursesDomain(coursesDao.findByCourseId(12345L)). year(23).semester("1학기"). build(); //기이수 과목 데이터 2 CompletedCoursesDomain data2 = CompletedCoursesDomain.builder(). - userDomain(userDao.findByStudentId(19011684L).get()). + userDomain(userDao.findByStudentId(19111111L).get()). coursesDomain(coursesDao.findByCourseId(12345L)). year(23).semester("1학기"). build(); @@ -179,7 +179,7 @@ public void testUserUploadStatus3() { dataList.add(data1); dataList.add(data2); - UserDomain user = userDao.findByStudentId(19011684L).get(); + UserDomain user = userDao.findByStudentId(19111111L).get(); //데이터 삭제 completedCoursesService.checkUser(user); diff --git a/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java b/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java index 4adfa7a..d35de66 100644 --- a/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java +++ b/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java @@ -4,7 +4,9 @@ import com.example.gimmegonghakauth.constant.AbeekTypeConst; import com.example.gimmegonghakauth.constant.CourseCategoryConst; +import com.example.gimmegonghakauth.domain.CompletedCoursesDomain; import com.example.gimmegonghakauth.domain.MajorsDomain; +import com.example.gimmegonghakauth.domain.UserDomain; import com.example.gimmegonghakauth.dto.GonghakCoursesByMajorDto; import com.example.gimmegonghakauth.dto.GonghakStandardDto; import com.example.gimmegonghakauth.dto.IncompletedCoursesDto; @@ -30,12 +32,18 @@ @ActiveProfiles("test") class GonghakRepositoryTest { - private static final Long COM_TEST_STUDENT_ID = 19011706L; + private static final Long COM_TEST_STUDENT_ID = 19111111L; @Autowired private GonghakRepository gonghakRepository; @Autowired private MajorsDao majorsDao; + @Autowired + private CompletedCoursesDao completedCoursesDao; + @Autowired + private UserDao userDao; + @Autowired + private CoursesDao coursesDao; private MajorsDomain COM_TEST_MAJORDOMAIN; @@ -43,45 +51,81 @@ class GonghakRepositoryTest { @BeforeAll - void setInit(){ + void setInit() { + setMajor(); + setUserAndCompletedCourse(); + } + + void setMajor() { COM_TEST_MAJORDOMAIN = majorsDao.findByMajor(MajorName.COMPUTER.getName()); WRONG_TEST_MAJORDOMAIN = MajorsDomain.builder() - .id(3L) - .major("오징어먹물학과").build(); + .id(5L) + .major("오징어먹물학과").build(); } + void setUserAndCompletedCourse() { + UserDomain user = UserDomain.builder().studentId(19111111L) + .password("qwer").email("test@sju.com") + .majorsDomain(majorsDao.findByMajor("컴퓨터공학과")) + .name("testUser") + .build(); + userDao.save(user); + + CompletedCoursesDomain course1 = CompletedCoursesDomain.builder() + .coursesDomain(coursesDao.findByName("Capstone디자인(산학협력프로젝트)")) + .year(19) + .userDomain(user) + .semester("1학기") + .build(); + + CompletedCoursesDomain course2 = CompletedCoursesDomain.builder() + .coursesDomain(coursesDao.findByName("웹프로그래밍")) + .year(19) + .userDomain(user) + .semester("1학기") + .build(); + + completedCoursesDao.save(course1); + completedCoursesDao.save(course2); + } + + //출력 @Test @DisplayName("dao 메서드 상태 출력") - void displayDaoMethod(){ + void displayDaoMethod() { List withoutCompleteCourses = gonghakRepository.findUserIncompletedCourses( - CourseCategoryConst.전공, COM_TEST_STUDENT_ID, COM_TEST_MAJORDOMAIN + CourseCategoryConst.전공, COM_TEST_STUDENT_ID, COM_TEST_MAJORDOMAIN ); withoutCompleteCourses.forEach( - incompletedCoursesDto -> { - log.info("withoutCompleteCourses = {}:", incompletedCoursesDto.getCourseName()); - } + incompletedCoursesDto -> { + log.info("withoutCompleteCourses = {}:", incompletedCoursesDto.getCourseName()); + } ); List withCompletedCourses = gonghakRepository.findUserCompletedCourses( - COM_TEST_STUDENT_ID, COM_TEST_MAJORDOMAIN + COM_TEST_STUDENT_ID, COM_TEST_MAJORDOMAIN ); withCompletedCourses.forEach( - gonghakCoursesByMajorDto -> { - log.info("withCompletedCourses = {}",gonghakCoursesByMajorDto.getCourseName()); - } + gonghakCoursesByMajorDto -> { + log.info("withCompletedCourses = {}", gonghakCoursesByMajorDto.getCourseName()); + } ); } + //GonghakStandardDto 상태 확인 @Test @DisplayName("GonghakStandardDto 5가지 상태 모두 포함되어있는지 확인") void findStandardKeySetTest() { - Optional standard = gonghakRepository.findStandard(COM_TEST_MAJORDOMAIN); + Optional standard = gonghakRepository.findStandard( + COM_TEST_MAJORDOMAIN); log.info("testStandard status ={}", standard.get().getStandards()); Map testStandard = standard.get().getStandards(); - assertThat(testStandard.keySet()).contains(AbeekTypeConst.BSM,AbeekTypeConst.PROFESSIONAL_NON_MAJOR,AbeekTypeConst.DESIGN,AbeekTypeConst.MAJOR,AbeekTypeConst.MINIMUM_CERTI); + assertThat(testStandard.keySet()).contains(AbeekTypeConst.BSM, + AbeekTypeConst.PROFESSIONAL_NON_MAJOR, AbeekTypeConst.DESIGN, AbeekTypeConst.MAJOR, + AbeekTypeConst.MINIMUM_CERTI); assertThat(testStandard.containsKey(AbeekTypeConst.MSC)).isEqualTo(false); } @@ -90,18 +134,19 @@ void findStandardKeySetTest() { @DisplayName("findUserCoursesByMajorByGonghakCoursesWithCompletedCourses 테스트 ") void findUserCoursesByMajorByGonghakCoursesWithCompletedCoursesTest() { List userDataForCalculate = gonghakRepository.findUserCompletedCourses( - COM_TEST_STUDENT_ID, COM_TEST_MAJORDOMAIN); + COM_TEST_STUDENT_ID, COM_TEST_MAJORDOMAIN); - log.info("userDataForCalculate size = {}",userDataForCalculate.size()); + log.info("userDataForCalculate size = {}", userDataForCalculate.size()); for (GonghakCoursesByMajorDto course : userDataForCalculate) { - log.info("Course ID: {}, Course Name: {}, Year: {}, Course Category: {}, Pass Category: {}, Design Credit: {}, Credit: {}", - course.getCourseId(), - course.getCourseName(), - course.getYear(), - course.getCourseCategory(), - course.getPassCategory(), - course.getDesignCredit(), - course.getCredit()); + log.info( + "Course ID: {}, Course Name: {}, Year: {}, Course Category: {}, Pass Category: {}, Design Credit: {}, Credit: {}", + course.getCourseId(), + course.getCourseName(), + course.getYear(), + course.getCourseCategory(), + course.getPassCategory(), + course.getDesignCredit(), + course.getCredit()); } List passCategories = new ArrayList<>(); @@ -111,36 +156,39 @@ void findUserCoursesByMajorByGonghakCoursesWithCompletedCoursesTest() { courseCategories.add(gonghakCoursesByMajorDto.getCourseCategory()); }); - assertThat(passCategories).containsAll(List.of("인필","인선")); + assertThat(passCategories).containsAll(List.of("인필", "인선")); - assertThat(courseCategories).containsAnyElementsOf(List.of(CourseCategoryConst.전문교양,CourseCategoryConst.전공,CourseCategoryConst.BSM)); + assertThat(courseCategories).containsAnyElementsOf( + List.of(CourseCategoryConst.전문교양, CourseCategoryConst.전공, CourseCategoryConst.BSM)); } @Test @DisplayName("findUserCoursesByMajorByGonghakCoursesWithoutCompleteCourses") - void findUserCoursesByMajorByGonghakCoursesWithoutCompleteCoursesTest(){ + void findUserCoursesByMajorByGonghakCoursesWithoutCompleteCoursesTest() { Arrays.stream(CourseCategoryConst.values()).forEach( - courseCategory -> { - List testCourses = gonghakRepository.findUserIncompletedCourses( - CourseCategoryConst.전공, - COM_TEST_STUDENT_ID, - COM_TEST_MAJORDOMAIN - ); - - testCourses.forEach( - incompletedCoursesDto -> { - assertThat(incompletedCoursesDto.getCourseCategory()).isEqualTo(CourseCategoryConst.전공); - } - ); - } + courseCategory -> { + List testCourses = gonghakRepository.findUserIncompletedCourses( + CourseCategoryConst.전공, + COM_TEST_STUDENT_ID, + COM_TEST_MAJORDOMAIN + ); + + testCourses.forEach( + incompletedCoursesDto -> { + assertThat(incompletedCoursesDto.getCourseCategory()).isEqualTo( + CourseCategoryConst.전공); + } + ); + } ); } @Test @DisplayName("findStandard가 없을 때 - Wrong Major") - void findStandardWrongMajorDomainTest(){ - Optional wrongStandard = gonghakRepository.findStandard(WRONG_TEST_MAJORDOMAIN); + void findStandardWrongMajorDomainTest() { + Optional wrongStandard = gonghakRepository.findStandard( + WRONG_TEST_MAJORDOMAIN); assertThat(wrongStandard.get().getStandards().isEmpty()).isEqualTo(true); } }