From aea2500abf12e1820af616a5468c9dfb494fd66d Mon Sep 17 00:00:00 2001 From: jaeuk520 Date: Tue, 2 Apr 2024 22:05:24 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20url=20=EC=98=A4=ED=83=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95,=20css,js,img=20=ED=8C=8C=EC=9D=BC=20=EB=B6=88?= =?UTF-8?q?=EB=9F=AC=EC=98=A4=EC=A7=80=20=EB=AA=BB=ED=95=98=EB=8D=98=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/konkuk/travelmate/config/SecurityConfig.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/konkuk/travelmate/config/SecurityConfig.java b/src/main/java/konkuk/travelmate/config/SecurityConfig.java index 4cc3dea..e20307a 100644 --- a/src/main/java/konkuk/travelmate/config/SecurityConfig.java +++ b/src/main/java/konkuk/travelmate/config/SecurityConfig.java @@ -3,10 +3,12 @@ import konkuk.travelmate.security.GoogleOAuthProperties; import konkuk.travelmate.security.OAuth2MemberService; import lombok.RequiredArgsConstructor; +import org.springframework.boot.autoconfigure.security.servlet.PathRequest; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer; import org.springframework.security.config.annotation.web.configurers.CsrfConfigurer; import org.springframework.security.config.oauth2.client.CommonOAuth2Provider; import org.springframework.security.oauth2.client.registration.ClientRegistration; @@ -28,7 +30,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf(CsrfConfigurer::disable) .oauth2Login(o -> o - .loginPage("/login/") + .loginPage("/login") .defaultSuccessUrl("/login/gateway") .userInfoEndpoint(info -> info .userService(oAuth2MemberService) @@ -39,14 +41,14 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .authorizeHttpRequests(o->o - .requestMatchers("/test").authenticated() - .anyRequest().permitAll() + .requestMatchers("/login/**").permitAll() + .requestMatchers("/css/**", "/js/**", "/img/**").permitAll() + .anyRequest().authenticated() ) ; return http.build(); } - private ClientRegistration googleOauthClientRegistration() { From 2005fdc5f16d6e5cf868a05a352750bdccaee076 Mon Sep 17 00:00:00 2001 From: jaeuk520 Date: Tue, 2 Apr 2024 22:05:59 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=EB=A7=A4=EC=B9=AD=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=8B=9C=20FAIL=EC=9D=80=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=EB=90=98=EC=A7=80=20=EC=95=8A=EA=B2=8C=20=EC=BF=BC=EB=A6=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/konkuk/travelmate/repository/MatchingRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/konkuk/travelmate/repository/MatchingRepository.java b/src/main/java/konkuk/travelmate/repository/MatchingRepository.java index 87650c0..54992aa 100644 --- a/src/main/java/konkuk/travelmate/repository/MatchingRepository.java +++ b/src/main/java/konkuk/travelmate/repository/MatchingRepository.java @@ -14,6 +14,6 @@ public interface MatchingRepository extends JpaRepository { "WHERE d.role = 0 AND r.requestId IN ( " + "SELECT m.request.requestId " + "FROM Matching m JOIN m.volunteer v " + - "WHERE v.email = :email)") + "WHERE v.email = :email AND m.request.state <> 2)") List findVolunteerMatchingResultsByEmail(@Param("email") String email); } From 81e4aff3e15035feea675461ffdb833d408f83a0 Mon Sep 17 00:00:00 2001 From: jaeuk520 Date: Tue, 2 Apr 2024 22:06:24 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=EB=A7=A4=EC=B9=AD=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/MatchingServiceTest.java | 158 ++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 src/test/java/konkuk/travelmate/service/MatchingServiceTest.java diff --git a/src/test/java/konkuk/travelmate/service/MatchingServiceTest.java b/src/test/java/konkuk/travelmate/service/MatchingServiceTest.java new file mode 100644 index 0000000..4e97eef --- /dev/null +++ b/src/test/java/konkuk/travelmate/service/MatchingServiceTest.java @@ -0,0 +1,158 @@ +package konkuk.travelmate.service; + +import konkuk.travelmate.config.SecurityConfig; +import konkuk.travelmate.domain.*; +import konkuk.travelmate.dto.response.GetVolunteerMatchingResponse; +import konkuk.travelmate.repository.*; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; + +import java.sql.Timestamp; +import java.util.List; + +import static konkuk.travelmate.domain.RequestState.*; +import static konkuk.travelmate.domain.TravelType.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.groups.Tuple.tuple; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +class MatchingServiceTest { + + @Autowired private MatchingService matchingService; + @Autowired private MatchingRepository matchingRepository; + @Autowired private HealthRepository healthRepository; + @Autowired private UserRepository userRepository; + @Autowired private CourseRepository courseRepository; + @Autowired private RequestRepository requestRepository; + @MockBean private SecurityConfig securityConfig; + + @AfterEach + void tearDown() { + matchingRepository.deleteAll(); + requestRepository.deleteAll(); + courseRepository.deleteAll(); + userRepository.deleteAll(); + healthRepository.deleteAll(); + } + + @Test + @DisplayName("봉사자의 매칭 결과 상태로 WAIT, SUCCESS 가 조회된다.") + void showMatchResults() { + //given + Health health = createHealth(0, 0, 0, 0, 0, 0, 0); + Health health2 = createHealth(0, 0, 0, 0, 0, 0, 0); + Health health3 = createHealth(0, 0, 0, 0, 0, 0, 0); + healthRepository.saveAll(List.of(health, health2, health3)); + + User disabled = createUser("d1", "d1@gmail.com", "d1", "01012341234", Role.DISABLED, health); + User volunteer = createUser( "v1", "v1@gmail.com", "v1", "01012341234", Role.VOLUNTEER, null); + userRepository.saveAll(List.of(disabled, volunteer)); + + Course course = createCourse("서울여행", "서울", "서울여행123", "asdf@ewaf.com", health2); + Course course2 = createCourse("부산여행", "부산", "부산여행123", "asdf@ewaf.com", health3); + courseRepository.saveAll(List.of(course, course2)); + + Request request = createRequest(ALL, WAIT, Timestamp.valueOf("2024-02-22 14:54:00"), + Timestamp.valueOf("2024-02-22 14:54:00"), disabled, course); + Request request2 = createRequest(LODGING, SUCCESS, Timestamp.valueOf("2024-02-22 14:54:00"), + Timestamp.valueOf("2024-02-22 14:54:00"), disabled, course); + Request request3 = createRequest(LODGING, FAIL, Timestamp.valueOf("2024-02-22 14:54:00"), + Timestamp.valueOf("2024-02-22 14:54:00"), disabled, course); + requestRepository.saveAll(List.of(request, request2, request3)); + + Matching matching = Matching.createNullRatingMatching(volunteer, request); + Matching matching2 = Matching.createNullRatingMatching(volunteer, request2); + matchingRepository.saveAll(List.of(matching, matching2)); + + //when + List matchings = matchingService.getMatchResults("v1@gmail.com"); + + //then + assertThat(matchings).hasSize(2) + .extracting("disabledName", "startTime", "endTime", "type", "state", "disabledPhoneName", "disabledEmail") + .containsExactly( + tuple("d1", Timestamp.valueOf("2024-02-22 14:54:00"), Timestamp.valueOf("2024-02-22 14:54:00"), + ALL, WAIT, "01012341234", "d1@gmail.com"), + tuple("d1", Timestamp.valueOf("2024-02-22 14:54:00"), Timestamp.valueOf("2024-02-22 14:54:00"), + LODGING, SUCCESS, "01012341234", "d1@gmail.com") + ); + } + + @DisplayName("봉사자의 매칭 결과 상태로 FAIL은 조회되지 않는다.") + @Test + void test() { + //given + Health health = createHealth(0, 0, 0, 0, 0, 0, 0); + Health health2 = createHealth(0, 0, 0, 0, 0, 0, 0); + healthRepository.saveAll(List.of(health, health2)); + + User disabled = createUser("d1", "d1@gmail.com", "d1", "01012341234", Role.DISABLED, health); + User volunteer = createUser( "v1", "v1@gmail.com", "v1", "01012341234", Role.VOLUNTEER, null); + userRepository.saveAll(List.of(disabled, volunteer)); + + Course course = createCourse("서울여행", "서울", "서울여행123", "asdf@ewaf.com", health2); + courseRepository.save(course); + + Request request3 = createRequest(LODGING, FAIL, Timestamp.valueOf("2024-02-22 14:54:00"), + Timestamp.valueOf("2024-02-22 14:54:00"), disabled, course); + requestRepository.save(request3); + + Matching matching = Matching.createNullRatingMatching(volunteer, request3); + matchingRepository.save(matching); + + //when + List matchings = matchingService.getMatchResults("v1@gmail.com"); + + //then + assertThat(matchings).hasSize(0); + } + + private Health createHealth(int walk, int see, int talk, int listen, int depression, int bipolarDisorder, int iq) { + return Health.builder() + .walk(walk) + .see(see) + .talk(talk) + .listen(listen) + .depression(depression) + .bipolarDisorder(bipolarDisorder) + .iq(iq) + .build(); + } + + private User createUser(String name, String email, String password, String phoneNum, Role role, Health health) { + return User.builder() + .name(name) + .email(email) + .password(password) + .phoneNum(phoneNum) + .role(role) + .health(health) + .build(); + } + + private Course createCourse(String name, String description, String region, String imageUrl, Health health) { + return Course.builder() + .name(name) + .description(description) + .region(region) + .imageUrl(imageUrl) + .health(health) + .build(); + } + + private Request createRequest(TravelType type, RequestState state, Timestamp startTime, Timestamp endTime, User disabled, Course course) { + return Request.builder() + .type(type) + .state(state) + .startTime(startTime) + .endTime(endTime) + .disabled(disabled) + .course(course) + .build(); + } + +} \ No newline at end of file