From a96bdc5c0ec02bf78465290b58e6d2f44f7e6c06 Mon Sep 17 00:00:00 2001 From: Kwoun Ki Ho Date: Mon, 23 Dec 2024 20:16:34 +0900 Subject: [PATCH] =?UTF-8?q?test:=20=ED=83=80=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=9D=98=20=EC=9D=B4=EB=A9=94=EC=9D=BC,=20=EB=B9=84=EB=B0=80?= =?UTF-8?q?=EB=B2=88=ED=98=B8=20=EB=B3=80=EA=B2=BD=20=EB=B6=88=EA=B0=80=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acceptance/MemberAcceptanceTest.java | 79 ++++++++++++++++++ .../java/com/cruru/util/AcceptanceTest.java | 81 +++++++++++++++++++ 2 files changed, 160 insertions(+) create mode 100644 backend/src/test/java/com/cruru/member/acceptance/MemberAcceptanceTest.java create mode 100644 backend/src/test/java/com/cruru/util/AcceptanceTest.java diff --git a/backend/src/test/java/com/cruru/member/acceptance/MemberAcceptanceTest.java b/backend/src/test/java/com/cruru/member/acceptance/MemberAcceptanceTest.java new file mode 100644 index 000000000..20ba77137 --- /dev/null +++ b/backend/src/test/java/com/cruru/member/acceptance/MemberAcceptanceTest.java @@ -0,0 +1,79 @@ +package com.cruru.member.acceptance; + +import static org.mockito.Mockito.doNothing; + +import com.cruru.auth.service.AuthService; +import com.cruru.club.domain.repository.ClubRepository; +import com.cruru.email.service.EmailRedisClient; +import com.cruru.member.controller.request.EmailChangeRequest; +import com.cruru.member.controller.request.PasswordChangeRequest; +import com.cruru.member.domain.Member; +import com.cruru.member.domain.repository.MemberRepository; +import com.cruru.util.AcceptanceTest; +import com.cruru.util.fixture.ClubFixture; +import com.cruru.util.fixture.MemberFixture; +import io.restassured.RestAssured; +import io.restassured.http.ContentType; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; + +public class MemberAcceptanceTest extends AcceptanceTest { + + @MockBean + private EmailRedisClient emailRedisClient; + + @Autowired + private MemberRepository memberRepository; + + @Autowired + private ClubRepository clubRepository; + + @Autowired + private AuthService authService; + + private Member member; + private String newToken; + + @BeforeEach + void setUp() { + member = memberRepository.save(MemberFixture.DOBBY); + clubRepository.save(ClubFixture.create(member)); + newToken = authService.createAccessToken(member.getEmail(), member.getRole()).getToken(); + } + + @DisplayName("사용자는 다른 사용자의 이메일을 변경할 수 없다.") + @Test + void userCannotChangeAnotherUsersEmail() { + // given + String changeEmail = "change@email.com"; + EmailChangeRequest request = new EmailChangeRequest(changeEmail); + doNothing().when(emailRedisClient).verifyEmail(request.email()); + + // when&then + RestAssured.given().log().all() + .contentType(ContentType.JSON) + .cookie("accessToken", newToken) + .body(request) + .when().patch("/v1/members/{memberId}/email", defaultMember.getId()) + .then().log().all().statusCode(403); + } + + @DisplayName("사용자는 다른 사용자의 비밀번호를 변경할 수 없다.") + @Test + void userCannotChangeAnotherUsersPassword() { + // given + String changePassword = "NewPassword123!!"; + PasswordChangeRequest request = new PasswordChangeRequest(changePassword); + + // when&then + RestAssured.given().log().all() + .contentType(ContentType.JSON) + .cookie("accessToken", newToken) + .body(request) + .when().patch("/v1/members/{memberId}/password", defaultMember.getId()) + .then().log().all().statusCode(403); + } +} diff --git a/backend/src/test/java/com/cruru/util/AcceptanceTest.java b/backend/src/test/java/com/cruru/util/AcceptanceTest.java new file mode 100644 index 000000000..01ed61b84 --- /dev/null +++ b/backend/src/test/java/com/cruru/util/AcceptanceTest.java @@ -0,0 +1,81 @@ +package com.cruru.util; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +import com.cruru.auth.service.AuthService; +import com.cruru.club.domain.Club; +import com.cruru.club.domain.repository.ClubRepository; +import com.cruru.member.domain.Member; +import com.cruru.member.domain.repository.MemberRepository; +import com.cruru.util.fixture.ClubFixture; +import com.cruru.util.fixture.LocalDateFixture; +import com.cruru.util.fixture.MemberFixture; +import io.restassured.RestAssured; +import jakarta.mail.internet.MimeMessage; +import java.time.Clock; +import java.time.Instant; +import org.junit.jupiter.api.BeforeEach; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.boot.test.web.server.LocalServerPort; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.test.context.ActiveProfiles; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles("test") +public class AcceptanceTest { + + private static final Clock FIXED_TIME = LocalDateFixture.fixedClock(); + + protected Member defaultMember; + protected Club defaultClub; + protected String token; + + @LocalServerPort + private int port; + @Autowired + private AuthService authService; + @Autowired + private MemberRepository memberRepository; + @Autowired + private ClubRepository clubRepository; + @Autowired + private DbCleaner dbCleaner; + @SpyBean + private Clock clock; + @MockBean + private JavaMailSender javaMailSender; + + @BeforeEach + void createDefaultLoginMember() { + dbCleaner.truncateEveryTable(); + defaultMember = memberRepository.save(MemberFixture.ADMIN); + defaultClub = clubRepository.save(ClubFixture.create(defaultMember)); + token = authService.createAccessToken(defaultMember.getEmail(), defaultMember.getRole()).getToken(); + } + + @BeforeEach + void setPort() { + RestAssured.port = port; + } + + @BeforeEach + void setClock() { + doReturn(Instant.now(FIXED_TIME)) + .when(clock) + .instant(); + } + + @BeforeEach + void setJavaMailSender() { + doReturn(mock(MimeMessage.class)) + .when(javaMailSender).createMimeMessage(); + doNothing() + .when(javaMailSender).send(any(MimeMessage.class)); + } +}