diff --git a/backend/pick-git/build.gradle b/backend/pick-git/build.gradle index 3dbc4712c..15b717115 100644 --- a/backend/pick-git/build.gradle +++ b/backend/pick-git/build.gradle @@ -26,6 +26,10 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-log4j2' + implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.15.0' + implementation 'org.apache.logging.log4j:log4j-api:2.15.0' + implementation 'org.apache.logging.log4j:log4j-core:2.15.0' + implementation 'org.apache.logging.log4j:log4j-jul:2.15.0' implementation 'com.lmax:disruptor:3.4.2' implementation 'org.springframework.boot:spring-boot-starter-webflux' implementation 'org.apache.httpcomponents:httpclient:4.5' diff --git a/backend/pick-git/security b/backend/pick-git/security index 19bda2679..ca6a376c4 160000 --- a/backend/pick-git/security +++ b/backend/pick-git/security @@ -1 +1 @@ -Subproject commit 19bda26792fe035af03ac43123666cb0b3c2a142 +Subproject commit ca6a376c4262a2d82f0f33071ccccda285550fd9 diff --git a/backend/pick-git/src/main/java/com/woowacourse/pickgit/authentication/infrastructure/dao/RedisOAuthAccessTokenDao.java b/backend/pick-git/src/main/java/com/woowacourse/pickgit/authentication/infrastructure/dao/RedisOAuthAccessTokenDao.java index da888be09..425720f45 100644 --- a/backend/pick-git/src/main/java/com/woowacourse/pickgit/authentication/infrastructure/dao/RedisOAuthAccessTokenDao.java +++ b/backend/pick-git/src/main/java/com/woowacourse/pickgit/authentication/infrastructure/dao/RedisOAuthAccessTokenDao.java @@ -2,6 +2,8 @@ import com.woowacourse.pickgit.authentication.domain.OAuthAccessTokenDao; import java.util.Optional; +import java.util.concurrent.TimeUnit; +import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Component; @@ -10,14 +12,24 @@ public class RedisOAuthAccessTokenDao implements OAuthAccessTokenDao { private final ValueOperations opsForValue; + private final long expirationTimeInMilliSeconds; - public RedisOAuthAccessTokenDao(StringRedisTemplate redisTemplate) { + public RedisOAuthAccessTokenDao( + StringRedisTemplate redisTemplate, + @Value("${security.jwt.expiration-time}") long expirationTimeInMilliSeconds + ) { this.opsForValue = redisTemplate.opsForValue(); + this.expirationTimeInMilliSeconds = expirationTimeInMilliSeconds; } @Override public void insert(String token, String oauthAccessToken) { - opsForValue.set(token, oauthAccessToken); + opsForValue.set( + token, + oauthAccessToken, + expirationTimeInMilliSeconds, + TimeUnit.MILLISECONDS + ); } @Override diff --git a/backend/pick-git/src/main/java/com/woowacourse/pickgit/portfolio/domain/Portfolio.java b/backend/pick-git/src/main/java/com/woowacourse/pickgit/portfolio/domain/Portfolio.java index f3926c068..a74096256 100644 --- a/backend/pick-git/src/main/java/com/woowacourse/pickgit/portfolio/domain/Portfolio.java +++ b/backend/pick-git/src/main/java/com/woowacourse/pickgit/portfolio/domain/Portfolio.java @@ -124,7 +124,7 @@ public static Portfolio empty(User user) { user.getName(), true, user.getImage(), - user.getDescription(), + Objects.isNull(user.getDescription()) ? "" : user.getDescription(), LocalDateTime.now(), LocalDateTime.now(), Contacts.empty(), diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/AcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/AcceptanceTest.java index 3311efc96..e7ddef0b6 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/AcceptanceTest.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/AcceptanceTest.java @@ -1,12 +1,12 @@ package com.woowacourse.pickgit.acceptance; -import static com.woowacourse.pickgit.query.fixture.TPost.NEOZALPOST; +import static com.woowacourse.pickgit.common.fixture.TPost.NEOZALPOST; +import com.woowacourse.pickgit.common.fixture.TContact; +import com.woowacourse.pickgit.common.fixture.TProject; +import com.woowacourse.pickgit.common.fixture.TSection; import com.woowacourse.pickgit.config.DatabaseConfigurator; import com.woowacourse.pickgit.config.InfrastructureTestConfiguration; -import com.woowacourse.pickgit.query.fixture.TContact; -import com.woowacourse.pickgit.query.fixture.TProject; -import com.woowacourse.pickgit.query.fixture.TSection; import io.restassured.RestAssured; import java.util.List; import java.util.stream.Stream; @@ -49,6 +49,10 @@ protected void toRead() { databaseConfigurator.toRead(); } + protected void toWrite() { + databaseConfigurator.toWrite(); + } + protected static Stream getPostSearchArguments() { return Stream.of( Arguments.of("java"), @@ -119,4 +123,13 @@ protected static Stream getPortfolioUpdateDuplicateSectionsArguments( ) ); } + + protected static Stream getParametersForQueryComments() { + return Stream.of( + Arguments.of(10, 1, 3, 3), + Arguments.of(10, 2, 3, 3), + Arguments.of(10, 3, 3, 1), + Arguments.of(10, 4, 3, 0) + ); + } } diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/authentication/OAuthAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/authentication/OAuthAcceptanceTest.java index 035bed969..51eb4ac0f 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/authentication/OAuthAcceptanceTest.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/authentication/OAuthAcceptanceTest.java @@ -1,6 +1,6 @@ package com.woowacourse.pickgit.acceptance.authentication; -import static com.woowacourse.pickgit.query.fixture.TUser.NEOZAL; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; import static org.assertj.core.api.Assertions.assertThat; import com.woowacourse.pickgit.acceptance.AcceptanceTest; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/comment/CommentAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/comment/CommentCreateAcceptanceTest.java similarity index 88% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/comment/CommentAcceptanceTest.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/comment/CommentCreateAcceptanceTest.java index e53d5e580..92e214db0 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/comment/CommentAcceptanceTest.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/comment/CommentCreateAcceptanceTest.java @@ -1,10 +1,10 @@ package com.woowacourse.pickgit.acceptance.comment; -import static com.woowacourse.pickgit.query.fixture.TPost.NEOZALPOST; -import static com.woowacourse.pickgit.query.fixture.TPost.UNKNOWN; -import static com.woowacourse.pickgit.query.fixture.TUser.GUEST; -import static com.woowacourse.pickgit.query.fixture.TUser.MARK; -import static com.woowacourse.pickgit.query.fixture.TUser.NEOZAL; +import static com.woowacourse.pickgit.common.fixture.TPost.NEOZALPOST; +import static com.woowacourse.pickgit.common.fixture.TPost.UNKNOWN; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.MARK; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; import static org.assertj.core.api.Assertions.assertThat; import com.woowacourse.pickgit.acceptance.AcceptanceTest; @@ -17,7 +17,7 @@ import org.junit.jupiter.params.provider.NullAndEmptySource; import org.junit.jupiter.params.provider.ValueSource; -class CommentAcceptanceTest extends AcceptanceTest { +class CommentCreateAcceptanceTest extends AcceptanceTest { @BeforeEach void setUp() { diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/comment/CommentAcceptanceTest_delete.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/comment/CommentDeleteAcceptanceTest.java similarity index 89% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/comment/CommentAcceptanceTest_delete.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/comment/CommentDeleteAcceptanceTest.java index 3c2b8267a..9c959dd2c 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/comment/CommentAcceptanceTest_delete.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/comment/CommentDeleteAcceptanceTest.java @@ -1,10 +1,10 @@ package com.woowacourse.pickgit.acceptance.comment; -import static com.woowacourse.pickgit.query.fixture.TPost.NEOZALPOST; -import static com.woowacourse.pickgit.query.fixture.TUser.GUEST; -import static com.woowacourse.pickgit.query.fixture.TUser.KEVIN; -import static com.woowacourse.pickgit.query.fixture.TUser.MARK; -import static com.woowacourse.pickgit.query.fixture.TUser.NEOZAL; +import static com.woowacourse.pickgit.common.fixture.TPost.NEOZALPOST; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.KEVIN; +import static com.woowacourse.pickgit.common.fixture.TUser.MARK; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; import static org.assertj.core.api.Assertions.assertThat; import com.woowacourse.pickgit.acceptance.AcceptanceTest; @@ -13,7 +13,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.HttpStatus; -class CommentAcceptanceTest_delete extends AcceptanceTest { +class CommentDeleteAcceptanceTest extends AcceptanceTest { @DisplayName("내 게시물의 내 댓글을 삭제한다.") @Test diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/comment/CommentAcceptanceTest_queryComments.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/comment/CommentReadAcceptanceTest.java similarity index 69% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/comment/CommentAcceptanceTest_queryComments.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/comment/CommentReadAcceptanceTest.java index 46d50396d..b996eaa29 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/comment/CommentAcceptanceTest_queryComments.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/comment/CommentReadAcceptanceTest.java @@ -1,26 +1,24 @@ -package com.woowacourse.pickgit.query.acceptance.comment; +package com.woowacourse.pickgit.acceptance.comment; -import static com.woowacourse.pickgit.query.fixture.TPost.KEVINPOST; -import static com.woowacourse.pickgit.query.fixture.TPost.MARKPOST; -import static com.woowacourse.pickgit.query.fixture.TPost.NEOZALPOST; -import static com.woowacourse.pickgit.query.fixture.TUser.GUEST; -import static com.woowacourse.pickgit.query.fixture.TUser.KEVIN; -import static com.woowacourse.pickgit.query.fixture.TUser.MARK; -import static com.woowacourse.pickgit.query.fixture.TUser.NEOZAL; +import static com.woowacourse.pickgit.common.fixture.TPost.KEVINPOST; +import static com.woowacourse.pickgit.common.fixture.TPost.MARKPOST; +import static com.woowacourse.pickgit.common.fixture.TPost.NEOZALPOST; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.KEVIN; +import static com.woowacourse.pickgit.common.fixture.TUser.MARK; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; import static org.assertj.core.api.Assertions.assertThat; import com.woowacourse.pickgit.acceptance.AcceptanceTest; import com.woowacourse.pickgit.comment.presentation.dto.response.CommentResponse; import io.restassured.common.mapper.TypeRef; import java.util.List; -import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -class CommentAcceptanceTest_queryComments extends AcceptanceTest { +class CommentReadAcceptanceTest extends AcceptanceTest { @BeforeEach void setUp() { @@ -65,14 +63,4 @@ void queryComments_GuestCanRequestCommentsOfSpecificPost_Success(int commentSize assertThat(actual).hasSize(expected); } - - private static Stream getParametersForQueryComments() { - return Stream.of( - Arguments.of(10, 1, 3, 3), - Arguments.of(10, 2, 3, 3), - Arguments.of(10, 3, 3, 1), - Arguments.of(10, 4, 3, 0) - ); - } - } diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/portfolio/PortfolioConstraintsAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/portfolio/PortfolioConstraintsAcceptanceTest.java index 57a6bcbdf..a7de9cd93 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/portfolio/PortfolioConstraintsAcceptanceTest.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/portfolio/PortfolioConstraintsAcceptanceTest.java @@ -1,22 +1,22 @@ package com.woowacourse.pickgit.acceptance.portfolio; -import static com.woowacourse.pickgit.query.fixture.TPost.NEOZALPOST; -import static com.woowacourse.pickgit.query.fixture.TUser.NEOZAL; +import static com.woowacourse.pickgit.common.fixture.TPost.NEOZALPOST; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; import static org.assertj.core.api.Assertions.assertThat; import com.woowacourse.pickgit.acceptance.AcceptanceTest; +import com.woowacourse.pickgit.common.fixture.CPost; +import com.woowacourse.pickgit.common.fixture.TItem; +import com.woowacourse.pickgit.common.fixture.TPortfolio; +import com.woowacourse.pickgit.common.fixture.TPost; +import com.woowacourse.pickgit.common.fixture.TProject; +import com.woowacourse.pickgit.common.fixture.TSection; import com.woowacourse.pickgit.exception.dto.ApiErrorResponse; import com.woowacourse.pickgit.portfolio.presentation.dto.request.DescriptionRequest; import com.woowacourse.pickgit.portfolio.presentation.dto.request.ItemRequest; import com.woowacourse.pickgit.portfolio.presentation.dto.request.PortfolioRequest; import com.woowacourse.pickgit.portfolio.presentation.dto.request.SectionRequest; import com.woowacourse.pickgit.portfolio.presentation.dto.response.PortfolioResponse; -import com.woowacourse.pickgit.query.fixture.CPost; -import com.woowacourse.pickgit.query.fixture.TItem; -import com.woowacourse.pickgit.query.fixture.TPortfolio; -import com.woowacourse.pickgit.query.fixture.TPost; -import com.woowacourse.pickgit.query.fixture.TProject; -import com.woowacourse.pickgit.query.fixture.TSection; import java.util.List; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/portfolio/PortfolioAcceptanceTest_Query.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/portfolio/PortfolioReadAcceptanceTest.java similarity index 87% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/portfolio/PortfolioAcceptanceTest_Query.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/portfolio/PortfolioReadAcceptanceTest.java index 24ecb5a30..1aa127f97 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/portfolio/PortfolioAcceptanceTest_Query.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/portfolio/PortfolioReadAcceptanceTest.java @@ -1,14 +1,12 @@ -package com.woowacourse.pickgit.query.acceptance.portfolio; +package com.woowacourse.pickgit.acceptance.portfolio; -import static com.woowacourse.pickgit.query.fixture.TUser.GUEST; -import static com.woowacourse.pickgit.query.fixture.TUser.KEVIN; -import static com.woowacourse.pickgit.query.fixture.TUser.KODA; -import static com.woowacourse.pickgit.query.fixture.TUser.MARK; -import static com.woowacourse.pickgit.query.fixture.TUser.NEOZAL; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.KODA; +import static com.woowacourse.pickgit.common.fixture.TUser.MARK; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; import static org.assertj.core.api.Assertions.assertThat; import com.woowacourse.pickgit.acceptance.AcceptanceTest; -import com.woowacourse.pickgit.exception.dto.ApiErrorResponse; import com.woowacourse.pickgit.portfolio.application.dto.PortfolioDtoAssembler; import com.woowacourse.pickgit.portfolio.domain.Portfolio; import com.woowacourse.pickgit.portfolio.presentation.dto.response.PortfolioResponse; @@ -20,7 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; -class PortfolioAcceptanceTest_Query extends AcceptanceTest { +class PortfolioReadAcceptanceTest extends AcceptanceTest { @Autowired private PortfolioDtoAssembler portfolioDtoAssembler; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/portfolio/PortfolioAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/portfolio/PortfolioUpdateAcceptanceTest.java similarity index 94% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/portfolio/PortfolioAcceptanceTest.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/portfolio/PortfolioUpdateAcceptanceTest.java index b4096b05a..8af8ea188 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/portfolio/PortfolioAcceptanceTest.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/portfolio/PortfolioUpdateAcceptanceTest.java @@ -1,27 +1,27 @@ package com.woowacourse.pickgit.acceptance.portfolio; -import static com.woowacourse.pickgit.query.fixture.TPost.KEVINPOST; -import static com.woowacourse.pickgit.query.fixture.TPost.NEOZALPOST; -import static com.woowacourse.pickgit.query.fixture.TUser.GUEST; -import static com.woowacourse.pickgit.query.fixture.TUser.MARK; -import static com.woowacourse.pickgit.query.fixture.TUser.NEOZAL; +import static com.woowacourse.pickgit.common.fixture.TPost.KEVINPOST; +import static com.woowacourse.pickgit.common.fixture.TPost.NEOZALPOST; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.MARK; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; import static org.assertj.core.api.Assertions.assertThat; import com.woowacourse.pickgit.acceptance.AcceptanceTest; +import com.woowacourse.pickgit.common.fixture.TPortfolio; import com.woowacourse.pickgit.exception.dto.ApiErrorResponse; import com.woowacourse.pickgit.portfolio.presentation.dto.request.ContactRequest; import com.woowacourse.pickgit.portfolio.presentation.dto.request.PortfolioRequest; import com.woowacourse.pickgit.portfolio.presentation.dto.request.ProjectRequest; import com.woowacourse.pickgit.portfolio.presentation.dto.request.SectionRequest; import com.woowacourse.pickgit.portfolio.presentation.dto.response.PortfolioResponse; -import com.woowacourse.pickgit.query.fixture.TPortfolio; import java.util.List; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -class PortfolioAcceptanceTest extends AcceptanceTest { +class PortfolioUpdateAcceptanceTest extends AcceptanceTest { @DisplayName("사용자는 나의 포트폴리오를 수정한다. - 성공") @ParameterizedTest diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostAcceptanceTest.java deleted file mode 100644 index f7bea5a26..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostAcceptanceTest.java +++ /dev/null @@ -1,261 +0,0 @@ -package com.woowacourse.pickgit.acceptance.post; - -import static com.woowacourse.pickgit.query.fixture.TPost.KEVINPOST; -import static com.woowacourse.pickgit.query.fixture.TPost.NEOZALPOST; -import static com.woowacourse.pickgit.query.fixture.TUser.GUEST; -import static com.woowacourse.pickgit.query.fixture.TUser.MARK; -import static com.woowacourse.pickgit.query.fixture.TUser.NEOZAL; -import static org.assertj.core.api.Assertions.assertThat; - -import com.woowacourse.pickgit.acceptance.AcceptanceTest; -import com.woowacourse.pickgit.exception.dto.ApiErrorResponse; -import com.woowacourse.pickgit.post.application.dto.response.RepositoryResponseDto; -import com.woowacourse.pickgit.post.presentation.dto.response.LikeResponse; -import com.woowacourse.pickgit.post.presentation.dto.response.PostUpdateResponse; -import com.woowacourse.pickgit.query.fixture.CPost; -import io.restassured.common.mapper.TypeRef; -import io.restassured.response.ExtractableResponse; -import io.restassured.response.Response; -import java.util.List; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EmptySource; -import org.junit.jupiter.params.provider.ValueSource; -import org.springframework.http.HttpStatus; - -class PostAcceptanceTest extends AcceptanceTest { - - @DisplayName("사용자는 게시글을 등록한다.") - @Test - void write_LoginUser_Success() { - int statusCode = NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST).statusCode(); - - assertThat(statusCode).isEqualTo(HttpStatus.CREATED.value()); - } - - @DisplayName("사용자는 태그 없이 게시글을 작성할 수 있다.") - @Test - void write_LoginUserWithNoneTags_Success() { - CPost post = CPost.builder() - .tags(List.of()) - .build(); - - int statusCode = NEOZAL.은로그인을하고().포스트를등록한다(post).statusCode(); - assertThat(statusCode).isEqualTo(HttpStatus.CREATED.value()); - } - - @DisplayName("잘못된 태그 이름을 가진 게시글을 작성할 수 없다.") - @ParameterizedTest - @EmptySource - @ValueSource(strings = {" ", " ", "abcdeabcdeabcdeabcdea"}) - void write_LoginUserWithInvalidTags_Fail(String tagName) { - CPost post = CPost.builder() - .tags(List.of("Java", "JavaScript", tagName)) - .build(); - - ExtractableResponse extractableResponse = NEOZAL.은로그인을하고().포스트를등록한다(post); - - assertThat(extractableResponse.statusCode()).isEqualTo(HttpStatus.BAD_REQUEST.value()); - - ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("F0003"); - } - - @DisplayName("사용자는 중복된 태그를 가진 게시글을 작성할 수 없다.") - @Test - void write_LoginUserWithDuplicatedTags_Fail() { - - CPost post = CPost.builder() - .tags(List.of("Java", "JavaScript", "Java")) - .build(); - - ExtractableResponse extractableResponse = NEOZAL.은로그인을하고().포스트를등록한다(post); - - assertThat(extractableResponse.statusCode()).isEqualTo(HttpStatus.BAD_REQUEST.value()); - - ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("P0001"); - } - - @DisplayName("게스트는 게시글을 등록할 수 없다. - 유효하지 않은 토큰이 있는 경우 (Authorization header O)") - @Test - void write_GuestUserWithToken_Fail() { - int statusCode = GUEST.는().유효하지_않은_토큰으로_포스트를등록한다(NEOZALPOST).statusCode(); - assertThat(statusCode).isEqualTo(HttpStatus.UNAUTHORIZED.value()); - } - - @DisplayName("게스트는 게시글을 등록할 수 없다. - 토큰이 없는 경우 (Authorization header X)") - @Test - void write_GuestUserWithoutToken_Fail() { - int statusCode = GUEST.는().포스트를등록한다(NEOZALPOST).statusCode(); - assertThat(statusCode).isEqualTo(HttpStatus.UNAUTHORIZED.value()); - } - - @DisplayName("사용자는 Repository 목록을 가져올 수 있다.") - @Test - void userRepositories_LoginUser_Success() { - // given - List response = - NEOZAL.은로그인을하고().레포지토리_목록을_가져온다().as(new TypeRef<>() { - }); - - assertThat(response).hasSize(2); - } - - @DisplayName("토큰이 유효하지 않은 경우 Repository 목록을 가져오는데 예외가 발생한다. - 500 예외") - @Test - void userRepositories_InvalidAccessToken_500Exception() { - int statusCode = GUEST.는().비정상토큰으로_레포지토리목록을_가져온다().statusCode(); - assertThat(statusCode).isEqualTo(HttpStatus.UNAUTHORIZED.value()); - } - - @DisplayName("로그인 사용자는 게시물을 좋아요 할 수 있다. - 성공") - @Test - void likePost_LoginUser_Success() { - NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); - LikeResponse likeResponse = - MARK.은로그인을하고().포스트에좋아요를누른다(NEOZALPOST).as(LikeResponse.class); - - assertThat(likeResponse.getLikesCount()).isOne(); - assertThat(likeResponse.getLiked()).isTrue(); - } - - @DisplayName("로그인 사용자는 게시물을 좋아요 취소 할 수 있다. - 성공") - @Test - void unlikePost_LoginUser_Success() { - NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); - MARK.은로그인을하고().포스트에좋아요를누른다(NEOZALPOST); - LikeResponse response = - MARK.은로그인을하고().포스트에좋아요_취소를_한다(NEOZALPOST).as(LikeResponse.class); - - assertThat(response.getLikesCount()).isZero(); - assertThat(response.getLiked()).isFalse(); - } - - @DisplayName("게스트는 게시물을 좋아요 할 수 없다. - 실패") - @Test - void likePost_GuestUser_401ExceptionThrown() { - NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); - ExtractableResponse extractableResponse = GUEST.는().포스트에좋아요를누른다(NEOZALPOST); - - int statusCode = extractableResponse.statusCode(); - assertThat(statusCode).isEqualTo(HttpStatus.UNAUTHORIZED.value()); - - ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("A0001"); - } - - @DisplayName("게스트는 게시물을 좋아요 취소 할 수 없다. - 실패") - @Test - void unlikePost_GuestUser_401ExceptionThrown() { - NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); - ExtractableResponse extractableResponse = GUEST.는().포스트에좋아요_취소를_한다(NEOZALPOST); - - int statusCode = extractableResponse.statusCode(); - assertThat(statusCode).isEqualTo(HttpStatus.UNAUTHORIZED.value()); - - ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("A0001"); - } - - @DisplayName("로그인 사용자는 이미 좋아요한 게시물을 좋아요 할 수 없다. - 실패") - @Test - void likePost_DuplicatedLike_400ExceptionThrown() { - NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); - MARK.은로그인을하고().포스트에좋아요를누른다(NEOZALPOST); - ExtractableResponse extractableResponse = - MARK.은로그인을하고().포스트에좋아요를누른다(NEOZALPOST); - - int statusCode = extractableResponse.statusCode(); - assertThat(statusCode).isEqualTo(HttpStatus.BAD_REQUEST.value()); - - ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("P0003"); - } - - @DisplayName("로그인 사용자는 좋아요 하지 않은 게시물을 좋아요 취소 할 수 없다. - 실패") - @Test - void unlikePost_cannotUnlike_400ExceptionThrown() { - NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); - ExtractableResponse extractableResponse = MARK.은로그인을하고().포스트에좋아요_취소를_한다(NEOZALPOST); - - int statusCode = extractableResponse.statusCode(); - assertThat(statusCode).isEqualTo(HttpStatus.BAD_REQUEST.value()); - - ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("P0004"); - } - - @DisplayName("사용자는 게시물을 수정한다.") - @Test - void update_LoginUser_Success() { - NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); - PostUpdateResponse response = NEOZAL.은로그인을하고().포스트를수정한다(NEOZALPOST, KEVINPOST) - .as(PostUpdateResponse.class); - - assertThat(response.getContent()).isEqualTo(KEVINPOST.getContent()); - assertThat(response.getTags()).containsExactlyInAnyOrderElementsOf(KEVINPOST.getTags()); - } - - @DisplayName("유효하지 않은 내용(null)의 게시물은 수정할 수 없다. - 400 예외") - @Test - void update_NullContent_400Exception() { - CPost post = CPost.builder() - .content(null) - .build(); - - NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); - ApiErrorResponse response = NEOZAL.은로그인을하고().포스트를수정한다(NEOZALPOST, post) - .as(ApiErrorResponse.class); - - assertThat(response.getErrorCode()).isEqualTo("F0001"); - } - - @DisplayName("유효하지 않은 내용(500자 초과)의 게시물은 수정할 수 없다. - 400 예외") - @Test - void update_Over500Content_400Exception() { - CPost post = CPost.builder() - .content("a".repeat(501)) - .build(); - - NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); - ApiErrorResponse response = NEOZAL.은로그인을하고().포스트를수정한다(NEOZALPOST, post) - .as(ApiErrorResponse.class); - - assertThat(response.getErrorCode()).isEqualTo("F0004"); - } - - @DisplayName("유효하지 않은 토큰으로 게시물을 수정할 수 없다. - 401 예외") - @Test - void update_InvalidToken_401Exception() { - NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); - ApiErrorResponse response = GUEST.는().비정상토큰으로_게시물을_수정한다(NEOZALPOST, KEVINPOST) - .as(ApiErrorResponse.class); - - assertThat(response.getErrorCode()).isEqualTo("A0001"); - } - - @DisplayName("사용자는 게시물을 삭제한다.") - @Test - void delete_LoginUser_Success() { - NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); - int statusCode = NEOZAL.은로그인을하고().포스트를삭제한다(NEOZALPOST).statusCode(); - - assertThat(statusCode).isEqualTo(HttpStatus.NO_CONTENT.value()); - } - - @DisplayName("유효하지 않은 토큰으로 게시물을 삭제할 수 없다. - 401 예외") - @Test - void delete_invalidToken_401Exception() { - NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); - ExtractableResponse extractableResponse = - GUEST.는().비정상토큰으로_게시물을_삭제한다(NEOZALPOST); - - int statusCode = extractableResponse.statusCode(); - assertThat(statusCode).isEqualTo(HttpStatus.UNAUTHORIZED.value()); - - ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("A0001"); - } -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostCreateAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostCreateAcceptanceTest.java new file mode 100644 index 000000000..925247cb4 --- /dev/null +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostCreateAcceptanceTest.java @@ -0,0 +1,88 @@ +package com.woowacourse.pickgit.acceptance.post; + +import static com.woowacourse.pickgit.common.fixture.TPost.NEOZALPOST; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; +import static org.assertj.core.api.Assertions.assertThat; + +import com.woowacourse.pickgit.acceptance.AcceptanceTest; +import com.woowacourse.pickgit.common.fixture.CPost; +import com.woowacourse.pickgit.exception.dto.ApiErrorResponse; +import io.restassured.response.ExtractableResponse; +import io.restassured.response.Response; +import java.util.List; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EmptySource; +import org.junit.jupiter.params.provider.ValueSource; +import org.springframework.http.HttpStatus; + +class PostCreateAcceptanceTest extends AcceptanceTest { + + @DisplayName("사용자는 게시글을 등록한다.") + @Test + void write_LoginUser_Success() { + int statusCode = NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST).statusCode(); + + assertThat(statusCode).isEqualTo(HttpStatus.CREATED.value()); + } + + @DisplayName("사용자는 태그 없이 게시글을 작성할 수 있다.") + @Test + void write_LoginUserWithNoneTags_Success() { + CPost post = CPost.builder() + .tags(List.of()) + .build(); + + int statusCode = NEOZAL.은로그인을하고().포스트를등록한다(post).statusCode(); + assertThat(statusCode).isEqualTo(HttpStatus.CREATED.value()); + } + + @DisplayName("잘못된 태그 이름을 가진 게시글을 작성할 수 없다.") + @ParameterizedTest + @EmptySource + @ValueSource(strings = {" ", " ", "abcdeabcdeabcdeabcdea"}) + void write_LoginUserWithInvalidTags_Fail(String tagName) { + CPost post = CPost.builder() + .tags(List.of("Java", "JavaScript", tagName)) + .build(); + + ExtractableResponse extractableResponse = NEOZAL.은로그인을하고().포스트를등록한다(post); + + assertThat(extractableResponse.statusCode()).isEqualTo(HttpStatus.BAD_REQUEST.value()); + + ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("F0003"); + } + + @DisplayName("사용자는 중복된 태그를 가진 게시글을 작성할 수 없다.") + @Test + void write_LoginUserWithDuplicatedTags_Fail() { + + CPost post = CPost.builder() + .tags(List.of("Java", "JavaScript", "Java")) + .build(); + + ExtractableResponse extractableResponse = NEOZAL.은로그인을하고().포스트를등록한다(post); + + assertThat(extractableResponse.statusCode()).isEqualTo(HttpStatus.BAD_REQUEST.value()); + + ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("P0001"); + } + + @DisplayName("게스트는 게시글을 등록할 수 없다. - 유효하지 않은 토큰이 있는 경우 (Authorization header O)") + @Test + void write_GuestUserWithToken_Fail() { + int statusCode = GUEST.는().유효하지_않은_토큰으로_포스트를등록한다(NEOZALPOST).statusCode(); + assertThat(statusCode).isEqualTo(HttpStatus.UNAUTHORIZED.value()); + } + + @DisplayName("게스트는 게시글을 등록할 수 없다. - 토큰이 없는 경우 (Authorization header X)") + @Test + void write_GuestUserWithoutToken_Fail() { + int statusCode = GUEST.는().포스트를등록한다(NEOZALPOST).statusCode(); + assertThat(statusCode).isEqualTo(HttpStatus.UNAUTHORIZED.value()); + } +} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostDeleteAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostDeleteAcceptanceTest.java new file mode 100644 index 000000000..791fe9f88 --- /dev/null +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostDeleteAcceptanceTest.java @@ -0,0 +1,39 @@ +package com.woowacourse.pickgit.acceptance.post; + +import static com.woowacourse.pickgit.common.fixture.TPost.NEOZALPOST; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; +import static org.assertj.core.api.Assertions.assertThat; + +import com.woowacourse.pickgit.exception.dto.ApiErrorResponse; +import io.restassured.response.ExtractableResponse; +import io.restassured.response.Response; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpStatus; + +class PostDeleteAcceptanceTest { + + @DisplayName("사용자는 게시물을 삭제한다.") + @Test + void delete_LoginUser_Success() { + NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); + int statusCode = NEOZAL.은로그인을하고().포스트를삭제한다(NEOZALPOST).statusCode(); + + assertThat(statusCode).isEqualTo(HttpStatus.NO_CONTENT.value()); + } + + @DisplayName("유효하지 않은 토큰으로 게시물을 삭제할 수 없다. - 401 예외") + @Test + void delete_invalidToken_401Exception() { + NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); + ExtractableResponse extractableResponse = + GUEST.는().비정상토큰으로_게시물을_삭제한다(NEOZALPOST); + + int statusCode = extractableResponse.statusCode(); + assertThat(statusCode).isEqualTo(HttpStatus.UNAUTHORIZED.value()); + + ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("A0001"); + } +} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/post/PostAcceptanceTest_Query.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostReadAcceptanceTest.java similarity index 84% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/post/PostAcceptanceTest_Query.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostReadAcceptanceTest.java index 6319be97a..b863ca6aa 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/post/PostAcceptanceTest_Query.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostReadAcceptanceTest.java @@ -1,15 +1,15 @@ -package com.woowacourse.pickgit.query.acceptance.post; - -import static com.woowacourse.pickgit.query.fixture.TPost.KEVINPOST; -import static com.woowacourse.pickgit.query.fixture.TPost.MARKPOST; -import static com.woowacourse.pickgit.query.fixture.TPost.NEOZALPOST; -import static com.woowacourse.pickgit.query.fixture.TUser.DANI; -import static com.woowacourse.pickgit.query.fixture.TUser.GUEST; -import static com.woowacourse.pickgit.query.fixture.TUser.KEVIN; -import static com.woowacourse.pickgit.query.fixture.TUser.KODA; -import static com.woowacourse.pickgit.query.fixture.TUser.MARK; -import static com.woowacourse.pickgit.query.fixture.TUser.NEOZAL; -import static com.woowacourse.pickgit.query.fixture.TUser.모든유저; +package com.woowacourse.pickgit.acceptance.post; + +import static com.woowacourse.pickgit.common.fixture.TPost.KEVINPOST; +import static com.woowacourse.pickgit.common.fixture.TPost.MARKPOST; +import static com.woowacourse.pickgit.common.fixture.TPost.NEOZALPOST; +import static com.woowacourse.pickgit.common.fixture.TUser.DANI; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.KEVIN; +import static com.woowacourse.pickgit.common.fixture.TUser.KODA; +import static com.woowacourse.pickgit.common.fixture.TUser.MARK; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; +import static com.woowacourse.pickgit.common.fixture.TUser.모든유저; import static org.assertj.core.api.Assertions.assertThat; import com.woowacourse.pickgit.acceptance.AcceptanceTest; @@ -22,7 +22,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.HttpStatus; -class PostAcceptanceTest_Query extends AcceptanceTest { +class PostReadAcceptanceTest extends AcceptanceTest { @BeforeEach void setUp() { diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/post/PostAcceptanceTest_searchPost.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostSearchAcceptanceTest.java similarity index 83% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/post/PostAcceptanceTest_searchPost.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostSearchAcceptanceTest.java index 29e6d1048..7da79af8a 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/post/PostAcceptanceTest_searchPost.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostSearchAcceptanceTest.java @@ -1,20 +1,20 @@ -package com.woowacourse.pickgit.query.acceptance.post; - -import static com.woowacourse.pickgit.query.fixture.TPost.KEVINPOST; -import static com.woowacourse.pickgit.query.fixture.TPost.MARKPOST; -import static com.woowacourse.pickgit.query.fixture.TPost.NEOZALPOST; -import static com.woowacourse.pickgit.query.fixture.TUser.GUEST; -import static com.woowacourse.pickgit.query.fixture.TUser.KEVIN; -import static com.woowacourse.pickgit.query.fixture.TUser.MARK; -import static com.woowacourse.pickgit.query.fixture.TUser.NEOZAL; +package com.woowacourse.pickgit.acceptance.post; + +import static com.woowacourse.pickgit.common.fixture.TPost.KEVINPOST; +import static com.woowacourse.pickgit.common.fixture.TPost.MARKPOST; +import static com.woowacourse.pickgit.common.fixture.TPost.NEOZALPOST; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.KEVIN; +import static com.woowacourse.pickgit.common.fixture.TUser.MARK; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.http.HttpStatus.BAD_REQUEST; import static org.springframework.http.HttpStatus.OK; import com.woowacourse.pickgit.acceptance.AcceptanceTest; +import com.woowacourse.pickgit.common.fixture.TPost; import com.woowacourse.pickgit.exception.dto.ApiErrorResponse; import com.woowacourse.pickgit.post.presentation.dto.response.PostResponse; -import com.woowacourse.pickgit.query.fixture.TPost; import io.restassured.common.mapper.TypeRef; import java.util.List; import org.junit.jupiter.api.BeforeEach; @@ -23,7 +23,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -class PostAcceptanceTest_searchPost extends AcceptanceTest { +class PostSearchAcceptanceTest extends AcceptanceTest { @BeforeEach void setUp() { @@ -78,7 +78,7 @@ void userCanFindPostViaTags() { void userSearchPostById() { PostResponse response = NEOZAL.은로그인을하고().포스트를검색한다(NEOZALPOST, OK).as(PostResponse.class); - assertThat(response.getId()).isEqualTo(NEOZALPOST.getId()); + assertThat(response.getId()).isEqualTo(NEOZALPOST.getId(true)); assertThat(response.getContent()).isEqualTo(NEOZALPOST.getContent()); } @@ -87,7 +87,7 @@ void userSearchPostById() { void guestSearchPostById() { PostResponse response = GUEST.는().포스트를검색한다(NEOZALPOST, OK).as(PostResponse.class); - assertThat(response.getId()).isEqualTo(NEOZALPOST.getId()); + assertThat(response.getId()).isEqualTo(NEOZALPOST.getId(true)); assertThat(response.getContent()).isEqualTo(NEOZALPOST.getContent()); } } diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostUpdateAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostUpdateAcceptanceTest.java new file mode 100644 index 000000000..73c929bfa --- /dev/null +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostUpdateAcceptanceTest.java @@ -0,0 +1,66 @@ +package com.woowacourse.pickgit.acceptance.post; + +import static com.woowacourse.pickgit.common.fixture.TPost.KEVINPOST; +import static com.woowacourse.pickgit.common.fixture.TPost.NEOZALPOST; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; +import static org.assertj.core.api.Assertions.assertThat; + +import com.woowacourse.pickgit.acceptance.AcceptanceTest; +import com.woowacourse.pickgit.common.fixture.CPost; +import com.woowacourse.pickgit.exception.dto.ApiErrorResponse; +import com.woowacourse.pickgit.post.presentation.dto.response.PostUpdateResponse; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class PostUpdateAcceptanceTest extends AcceptanceTest { + + @DisplayName("사용자는 게시물을 수정한다.") + @Test + void update_LoginUser_Success() { + NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); + PostUpdateResponse response = NEOZAL.은로그인을하고().포스트를수정한다(NEOZALPOST, KEVINPOST) + .as(PostUpdateResponse.class); + + assertThat(response.getContent()).isEqualTo(KEVINPOST.getContent()); + assertThat(response.getTags()).containsExactlyInAnyOrderElementsOf(KEVINPOST.getTags()); + } + + @DisplayName("유효하지 않은 내용(null)의 게시물은 수정할 수 없다. - 400 예외") + @Test + void update_NullContent_400Exception() { + CPost post = CPost.builder() + .content(null) + .build(); + + NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); + ApiErrorResponse response = NEOZAL.은로그인을하고().포스트를수정한다(NEOZALPOST, post) + .as(ApiErrorResponse.class); + + assertThat(response.getErrorCode()).isEqualTo("F0001"); + } + + @DisplayName("유효하지 않은 내용(500자 초과)의 게시물은 수정할 수 없다. - 400 예외") + @Test + void update_Over500Content_400Exception() { + CPost post = CPost.builder() + .content("a".repeat(501)) + .build(); + + NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); + ApiErrorResponse response = NEOZAL.은로그인을하고().포스트를수정한다(NEOZALPOST, post) + .as(ApiErrorResponse.class); + + assertThat(response.getErrorCode()).isEqualTo("F0004"); + } + + @DisplayName("유효하지 않은 토큰으로 게시물을 수정할 수 없다. - 401 예외") + @Test + void update_InvalidToken_401Exception() { + NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); + ApiErrorResponse response = GUEST.는().비정상토큰으로_게시물을_수정한다(NEOZALPOST, KEVINPOST) + .as(ApiErrorResponse.class); + + assertThat(response.getErrorCode()).isEqualTo("A0001"); + } +} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostRepositorySearchAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/github/PostRepositorySearchAcceptanceTest.java similarity index 54% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostRepositorySearchAcceptanceTest.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/github/PostRepositorySearchAcceptanceTest.java index 14f1a9570..eca6b3ea2 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/PostRepositorySearchAcceptanceTest.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/github/PostRepositorySearchAcceptanceTest.java @@ -1,7 +1,7 @@ -package com.woowacourse.pickgit.acceptance.post; +package com.woowacourse.pickgit.acceptance.post.github; -import static com.woowacourse.pickgit.query.fixture.TUser.GUEST; -import static com.woowacourse.pickgit.query.fixture.TUser.NEOZAL; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; import static org.assertj.core.api.Assertions.assertThat; import com.woowacourse.pickgit.acceptance.AcceptanceTest; @@ -9,11 +9,18 @@ import com.woowacourse.pickgit.post.application.dto.response.RepositoryResponseDto; import io.restassured.common.mapper.TypeRef; import java.util.List; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.springframework.http.HttpStatus; class PostRepositorySearchAcceptanceTest extends AcceptanceTest { + @BeforeEach + void setUp() { + toRead(); + } + @DisplayName("사용자는 Repository 목록을 키워드 검색으로 가져올 수 있다.") @Test void searchUserRepositories_LoginUser_Success() { @@ -32,4 +39,22 @@ void searchUserRepositories_InvalidAccessToken_401Exception() { assertThat(response.getErrorCode()).isEqualTo("A0001"); } + + @DisplayName("사용자는 Repository 목록을 가져올 수 있다.") + @Test + void userRepositories_LoginUser_Success() { + // given + List response = + NEOZAL.은로그인을하고().레포지토리_목록을_가져온다().as(new TypeRef<>() { + }); + + assertThat(response).hasSize(2); + } + + @DisplayName("토큰이 유효하지 않은 경우 Repository 목록을 가져오는데 예외가 발생한다. - 500 예외") + @Test + void userRepositories_InvalidAccessToken_500Exception() { + int statusCode = GUEST.는().비정상토큰으로_레포지토리목록을_가져온다().statusCode(); + assertThat(statusCode).isEqualTo(HttpStatus.UNAUTHORIZED.value()); + } } diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/like/PostLikeCreateAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/like/PostLikeCreateAcceptanceTest.java new file mode 100644 index 000000000..f33a6dbd2 --- /dev/null +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/like/PostLikeCreateAcceptanceTest.java @@ -0,0 +1,58 @@ +package com.woowacourse.pickgit.acceptance.post.like; + +import static com.woowacourse.pickgit.common.fixture.TPost.NEOZALPOST; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.MARK; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; +import static org.assertj.core.api.Assertions.assertThat; + +import com.woowacourse.pickgit.acceptance.AcceptanceTest; +import com.woowacourse.pickgit.exception.dto.ApiErrorResponse; +import com.woowacourse.pickgit.post.presentation.dto.response.LikeResponse; +import io.restassured.response.ExtractableResponse; +import io.restassured.response.Response; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpStatus; + +class PostLikeCreateAcceptanceTest extends AcceptanceTest { + + @DisplayName("로그인 사용자는 게시물을 좋아요 할 수 있다. - 성공") + @Test + void likePost_LoginUser_Success() { + NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); + LikeResponse likeResponse = + MARK.은로그인을하고().포스트에좋아요를누른다(NEOZALPOST).as(LikeResponse.class); + + assertThat(likeResponse.getLikesCount()).isOne(); + assertThat(likeResponse.getLiked()).isTrue(); + } + + @DisplayName("게스트는 게시물을 좋아요 할 수 없다. - 실패") + @Test + void likePost_GuestUser_401ExceptionThrown() { + NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); + ExtractableResponse extractableResponse = GUEST.는().포스트에좋아요를누른다(NEOZALPOST); + + int statusCode = extractableResponse.statusCode(); + assertThat(statusCode).isEqualTo(HttpStatus.UNAUTHORIZED.value()); + + ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("A0001"); + } + + @DisplayName("로그인 사용자는 이미 좋아요한 게시물을 좋아요 할 수 없다. - 실패") + @Test + void likePost_DuplicatedLike_400ExceptionThrown() { + NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); + MARK.은로그인을하고().포스트에좋아요를누른다(NEOZALPOST); + ExtractableResponse extractableResponse = + MARK.은로그인을하고().포스트에좋아요를누른다(NEOZALPOST); + + int statusCode = extractableResponse.statusCode(); + assertThat(statusCode).isEqualTo(HttpStatus.BAD_REQUEST.value()); + + ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("P0003"); + } +} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/like/PostLikeDeleteAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/like/PostLikeDeleteAcceptanceTest.java new file mode 100644 index 000000000..a27c39c10 --- /dev/null +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/like/PostLikeDeleteAcceptanceTest.java @@ -0,0 +1,61 @@ +package com.woowacourse.pickgit.acceptance.post.like; + +import static com.woowacourse.pickgit.common.fixture.TPost.NEOZALPOST; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.MARK; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; +import static org.assertj.core.api.Assertions.assertThat; + +import com.woowacourse.pickgit.acceptance.AcceptanceTest; +import com.woowacourse.pickgit.exception.dto.ApiErrorResponse; +import com.woowacourse.pickgit.post.presentation.dto.response.LikeResponse; +import io.restassured.response.ExtractableResponse; +import io.restassured.response.Response; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpStatus; + +class PostLikeDeleteAcceptanceTest extends AcceptanceTest { + + @DisplayName("로그인 사용자는 게시물을 좋아요 취소 할 수 있다. - 성공") + @Test + void unlikePost_LoginUser_Success() { + toWrite(); + NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); + MARK.은로그인을하고().포스트에좋아요를누른다(NEOZALPOST); + LikeResponse response = + MARK.은로그인을하고().포스트에좋아요_취소를_한다(NEOZALPOST).as(LikeResponse.class); + + assertThat(response.getLikesCount()).isZero(); + assertThat(response.getLiked()).isFalse(); + } + + + @DisplayName("게스트는 게시물을 좋아요 취소 할 수 없다. - 실패") + @Test + void unlikePost_GuestUser_401ExceptionThrown() { + toWrite(); + NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); + ExtractableResponse extractableResponse = GUEST.는().포스트에좋아요_취소를_한다(NEOZALPOST); + + int statusCode = extractableResponse.statusCode(); + assertThat(statusCode).isEqualTo(HttpStatus.UNAUTHORIZED.value()); + + ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("A0001"); + } + + @DisplayName("로그인 사용자는 좋아요 하지 않은 게시물을 좋아요 취소 할 수 없다. - 실패") + @Test + void unlikePost_cannotUnlike_400ExceptionThrown() { + toWrite(); + NEOZAL.은로그인을하고().포스트를등록한다(NEOZALPOST); + ExtractableResponse extractableResponse = MARK.은로그인을하고().포스트에좋아요_취소를_한다(NEOZALPOST); + + int statusCode = extractableResponse.statusCode(); + assertThat(statusCode).isEqualTo(HttpStatus.BAD_REQUEST.value()); + + ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("P0004"); + } +} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/post/PostAcceptanceTest_LikeUsers.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/like/PostLikeReadAcceptanceTest.java similarity index 78% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/post/PostAcceptanceTest_LikeUsers.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/like/PostLikeReadAcceptanceTest.java index 8959f5119..20ecf17ea 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/post/PostAcceptanceTest_LikeUsers.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/post/like/PostLikeReadAcceptanceTest.java @@ -1,14 +1,14 @@ -package com.woowacourse.pickgit.query.acceptance.post; +package com.woowacourse.pickgit.acceptance.post.like; -import static com.woowacourse.pickgit.query.fixture.TPost.KEVINPOST; -import static com.woowacourse.pickgit.query.fixture.TPost.MARKPOST; -import static com.woowacourse.pickgit.query.fixture.TPost.NEOZALPOST; -import static com.woowacourse.pickgit.query.fixture.TUser.DANI; -import static com.woowacourse.pickgit.query.fixture.TUser.GUEST; -import static com.woowacourse.pickgit.query.fixture.TUser.KEVIN; -import static com.woowacourse.pickgit.query.fixture.TUser.KODA; -import static com.woowacourse.pickgit.query.fixture.TUser.MARK; -import static com.woowacourse.pickgit.query.fixture.TUser.NEOZAL; +import static com.woowacourse.pickgit.common.fixture.TPost.KEVINPOST; +import static com.woowacourse.pickgit.common.fixture.TPost.MARKPOST; +import static com.woowacourse.pickgit.common.fixture.TPost.NEOZALPOST; +import static com.woowacourse.pickgit.common.fixture.TUser.DANI; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.KEVIN; +import static com.woowacourse.pickgit.common.fixture.TUser.KODA; +import static com.woowacourse.pickgit.common.fixture.TUser.MARK; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; import static org.assertj.core.api.Assertions.assertThat; import com.woowacourse.pickgit.acceptance.AcceptanceTest; @@ -19,7 +19,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.HttpStatus; -class PostAcceptanceTest_LikeUsers extends AcceptanceTest { +class PostLikeReadAcceptanceTest extends AcceptanceTest { @BeforeEach void setUp() { diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/tag/TagAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/tag/TagExtractionAcceptanceTest.java similarity index 85% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/tag/TagAcceptanceTest.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/tag/TagExtractionAcceptanceTest.java index 8222b8a6e..2f34f0993 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/tag/TagAcceptanceTest.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/tag/TagExtractionAcceptanceTest.java @@ -1,9 +1,9 @@ package com.woowacourse.pickgit.acceptance.tag; -import static com.woowacourse.pickgit.query.fixture.TRepository.PICK_GIT; -import static com.woowacourse.pickgit.query.fixture.TRepository.UNKNOWN; -import static com.woowacourse.pickgit.query.fixture.TUser.GUEST; -import static com.woowacourse.pickgit.query.fixture.TUser.NEOZAL; +import static com.woowacourse.pickgit.common.fixture.TRepository.PICK_GIT; +import static com.woowacourse.pickgit.common.fixture.TRepository.UNKNOWN; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; import static org.assertj.core.api.Assertions.assertThat; import com.woowacourse.pickgit.acceptance.AcceptanceTest; @@ -12,11 +12,17 @@ import io.restassured.response.ExtractableResponse; import io.restassured.response.Response; import java.util.List; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.http.HttpStatus; -class TagAcceptanceTest extends AcceptanceTest { +class TagExtractionAcceptanceTest extends AcceptanceTest { + + @BeforeEach + void setUp() { + toRead(); + } @DisplayName("특정 User의 Repository에 기술된 언어 태그들을 추출한다.") @Test diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/UserAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/UserAcceptanceTest.java deleted file mode 100644 index d0c9ca81b..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/UserAcceptanceTest.java +++ /dev/null @@ -1,157 +0,0 @@ -package com.woowacourse.pickgit.acceptance.user; - -import static com.woowacourse.pickgit.query.fixture.TUser.GUEST; -import static com.woowacourse.pickgit.query.fixture.TUser.MARK; -import static com.woowacourse.pickgit.query.fixture.TUser.NEOZAL; -import static org.assertj.core.api.Assertions.assertThat; -import com.woowacourse.pickgit.acceptance.AcceptanceTest; -import com.woowacourse.pickgit.exception.dto.ApiErrorResponse; -import com.woowacourse.pickgit.user.presentation.dto.response.FollowResponse; -import com.woowacourse.pickgit.user.presentation.dto.response.ProfileDescriptionResponse; -import com.woowacourse.pickgit.user.presentation.dto.response.ProfileImageEditResponse; -import io.restassured.response.ExtractableResponse; -import io.restassured.response.Response; -import java.io.IOException; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.http.HttpStatus; - -class UserAcceptanceTest extends AcceptanceTest { - - @DisplayName("로그인되지 않은 사용자는 target 유저를 팔로우 할 수 없다.") - @Test - void followUser_NotLogin_Failure() { - ApiErrorResponse response = GUEST.는().팔로우를한다(NEOZAL).as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("A0001"); - } - - @DisplayName("팔로우중이지 않다면 source 유저는 target 유저를 팔로우할 수 있다.") - @Test - void followUser_SourceToTarget_Success() { - MARK.은로그인을한다(); - FollowResponse response = NEOZAL.은로그인을하고().팔로우를한다(MARK).as(FollowResponse.class); - - assertThat(response) - .usingRecursiveComparison() - .isEqualTo(new FollowResponse(1, true)); - } - - @DisplayName("source 유저와 target 유저가 동일하면 팔로우할 수 없다. - 400 예외") - @Test - void followUser_SameSourceToSameTarget_400Exception() { - ExtractableResponse extractableResponse = NEOZAL.은로그인을하고().팔로우를한다(NEOZAL); - - assertThat(extractableResponse.statusCode()).isEqualTo(HttpStatus.BAD_REQUEST.value()); - - ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("U0004"); - } - - @DisplayName("source 유저는 존재하지 않는 유저를 팔로우할 수 없다. - 400 예외") - @Test - void followUser_SourceToInvalidTarget_400Exception() { - ExtractableResponse extractableResponse = NEOZAL.은로그인을하고().팔로우를한다(GUEST); - - assertThat(extractableResponse.statusCode()).isEqualTo(HttpStatus.BAD_REQUEST.value()); - - ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("U0001"); - } - - @DisplayName("source 유저는 이미 팔로우한 유저를 팔로우할 수 없다. - 400 예외") - @Test - void followUser_SourceToExistingTarget_400Exception() { - MARK.은로그인을한다(); - NEOZAL.은로그인을하고().팔로우를한다(MARK); - - ApiErrorResponse response = NEOZAL.은로그인을하고().팔로우를한다(MARK).as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("U0002"); - } - - @DisplayName("로그인되지 않은 사용자는 target 유저를 언팔로우 할 수 없다.") - @Test - void unfollowUser_NotLogin_Failure() { - NEOZAL.은로그인을한다(); - ExtractableResponse extractableResponse = GUEST.는().언팔로우를한다(NEOZAL); - - assertThat(extractableResponse.statusCode()).isEqualTo(HttpStatus.UNAUTHORIZED.value()); - - ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("A0001"); - } - - @DisplayName("source 유저는 target 유저를 언팔로우할 수 있다.") - @Test - void unfollowUser_SourceToTarget_Success() { - MARK.은로그인을한다(); - NEOZAL.은로그인을하고().팔로우를한다(MARK); - FollowResponse response = NEOZAL.은로그인을하고().언팔로우를한다(MARK).as(FollowResponse.class); - - assertThat(response) - .usingRecursiveComparison() - .isEqualTo(new FollowResponse(0, false)); - } - - @DisplayName("source 유저와 target 유저가 동일하면 언팔로우할 수 없다. - 400 예외") - @Test - void unfollowUser_SameSourceToSameTarget_400Exception() { - // when - ExtractableResponse extractableResponse = NEOZAL.은로그인을하고().언팔로우를한다(NEOZAL); - assertThat(extractableResponse.statusCode()).isEqualTo(HttpStatus.BAD_REQUEST.value()); - - ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("U0004"); - } - - @DisplayName("source 유저는 존재하지 않는 유저를 언팔로우할 수 없다. - 400 예외") - @Test - void unfollowUser_SourceToInvalidTarget_400Exception() { - ApiErrorResponse response = NEOZAL.은로그인을하고().언팔로우를한다(GUEST).as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("U0001"); - } - - @DisplayName("source 유저는 팔로우하지 않는 유저를 언팔로우할 수 없다. - 400 예외") - @Test - void unfollowUser_NotExistingFollow_ExceptionThrown() { - MARK.은로그인을한다(); - ApiErrorResponse response = NEOZAL.은로그인을하고().언팔로우를한다(MARK).as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("U0003"); - } - - @DisplayName("로그인 사용자는 자신의 프로필 이미지를 수정할 수 있다.") - @Test - void editProfileImage_LoginUser_Success() throws IOException { - ProfileImageEditResponse response = NEOZAL.은로그인을하고().프로필을_이미지를_수정한다() - .as(ProfileImageEditResponse.class); - - assertThat(response.getImageUrl()).isNotBlank(); - } - - @DisplayName("게스트는 프로필 이미지를 수정할 수 없다.") - @Test - void editProfileImage_GuestUser_Fail() throws IOException { - ExtractableResponse extractableResponse = GUEST.는().프로필_이미지를_수정한다(); - assertThat(extractableResponse.statusCode()).isEqualTo(HttpStatus.UNAUTHORIZED.value()); - - ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("A0001"); - } - - @DisplayName("로그인 사용자는 자신의 한 줄 소개를 수정할 수 있다.") - @Test - void editProfileDescription_LoginUser_Success() { - ProfileDescriptionResponse response = NEOZAL.은로그인을하고().프로필_한줄소개를_수정한다("변경된 프로필") - .as(ProfileDescriptionResponse.class); - - assertThat(response.getDescription()).isEqualTo("변경된 프로필"); - } - - @DisplayName("게스트는 자신의 한 줄 소개를 수정할 수 없다.") - @Test - void editProfileDescription_GuestUser_Fail() { - ApiErrorResponse response = GUEST.는().프로필_한줄소개를_수정한다("변경된 프로필") - .as(ApiErrorResponse.class); - - assertThat(response.getErrorCode()).isEqualTo("A0001"); - } -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/UserContributionAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/UserContributionAcceptanceTest.java new file mode 100644 index 000000000..51afd593c --- /dev/null +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/UserContributionAcceptanceTest.java @@ -0,0 +1,59 @@ +package com.woowacourse.pickgit.acceptance.user; + +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.MARK; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; +import static org.assertj.core.api.Assertions.assertThat; + +import com.woowacourse.pickgit.acceptance.AcceptanceTest; +import com.woowacourse.pickgit.exception.dto.ApiErrorResponse; +import com.woowacourse.pickgit.user.application.dto.response.ContributionResponseDto; +import io.restassured.response.ExtractableResponse; +import io.restassured.response.Response; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpStatus; + +class UserContributionAcceptanceTest extends AcceptanceTest { + + @BeforeEach + void setUp() { + toRead(); + } + + @DisplayName("사용자는 활동 통계를 조회할 수 있다.") + @Test + void getContributions_LoginUser_Success() { + ContributionResponseDto response = NEOZAL.은로그인을하고().활동_통계를_조회한다(MARK) + .as(ContributionResponseDto.class); + + assertThat(response) + .usingRecursiveComparison() + .isEqualTo(ContributionResponseDto.builder() + .starsCount(11) + .commitsCount(48) + .prsCount(48) + .issuesCount(48) + .reposCount(48) + .build()); + } + + @DisplayName("유효하지 않은 토큰으로 활동 통계를 조회할 수 없다. - 401 예외") + @Test + void getContributions_invalidToken_401Exception() { + ApiErrorResponse response = GUEST.는().비정상토큰으로_활통통계를_조회한다(NEOZAL) + .as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("A0001"); + } + + @DisplayName("유효하지 않은 유저 이름으로 활동 통계를 조회할 수 없다. - 400 예외") + @Test + void getContributions_invalidUsername_400Exception() { + ExtractableResponse extractableResponse = NEOZAL.은로그인을하고().활동_통계를_조회한다(GUEST); + assertThat(extractableResponse.statusCode()).isEqualTo(HttpStatus.BAD_REQUEST.value()); + + ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("U0001"); + } +} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/user/UserAcceptanceTest_Query.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/UserProfileReadAcceptanceTest.java similarity index 56% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/user/UserAcceptanceTest_Query.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/UserProfileReadAcceptanceTest.java index 344723afc..d525b09be 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/user/UserAcceptanceTest_Query.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/UserProfileReadAcceptanceTest.java @@ -1,30 +1,25 @@ -package com.woowacourse.pickgit.query.acceptance.user; - -import static com.woowacourse.pickgit.query.fixture.TUser.DANI; -import static com.woowacourse.pickgit.query.fixture.TUser.GUEST; -import static com.woowacourse.pickgit.query.fixture.TUser.KEVIN; -import static com.woowacourse.pickgit.query.fixture.TUser.KODA; -import static com.woowacourse.pickgit.query.fixture.TUser.MARK; -import static com.woowacourse.pickgit.query.fixture.TUser.NEOZAL; -import static com.woowacourse.pickgit.query.fixture.TUser.모든유저; +package com.woowacourse.pickgit.acceptance.user; + +import static com.woowacourse.pickgit.common.fixture.TUser.DANI; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.KEVIN; +import static com.woowacourse.pickgit.common.fixture.TUser.KODA; +import static com.woowacourse.pickgit.common.fixture.TUser.MARK; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; +import static com.woowacourse.pickgit.common.fixture.TUser.모든유저; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.tuple; import com.woowacourse.pickgit.acceptance.AcceptanceTest; import com.woowacourse.pickgit.exception.dto.ApiErrorResponse; -import com.woowacourse.pickgit.user.application.dto.response.ContributionResponseDto; -import com.woowacourse.pickgit.user.application.dto.response.UserSearchResponseDto; import com.woowacourse.pickgit.user.presentation.dto.response.UserProfileResponse; -import io.restassured.common.mapper.TypeRef; import io.restassured.response.ExtractableResponse; import io.restassured.response.Response; -import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.http.HttpStatus; -class UserAcceptanceTest_Query extends AcceptanceTest { +class UserProfileReadAcceptanceTest extends AcceptanceTest { @BeforeEach void setUp() { @@ -115,72 +110,4 @@ void getUserProfile_GuestUser_400Exception() { ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); assertThat(response.getErrorCode()).isEqualTo("U0001"); } - - @DisplayName("로그인 - 저장된 유저중 유사한 이름을 가진 유저를 검색할 수 있다. 단, 자기 자신은 검색되지 않는다.(팔로잉 여부 true/false)") - @Test - void searchUser_LoginUser_Success() { - List response = KEVIN.은로그인을하고().유저를_검색한다("K") - .as(new TypeRef<>() { - }); - - assertThat(response) - .hasSize(2) - .extracting("username", "following") - .containsExactlyInAnyOrder( - tuple(MARK.name(), false), - tuple(KODA.name(), false) - ); - } - - @DisplayName("비 로그인 - 저장된 유저중 유사한 이름을 가진 유저를 검색할 수 있다. (팔로잉 필드 null)") - @Test - void searchUser_GuestUser_Success() { - List response = GUEST.는().유저를_검색한다("K") - .as(new TypeRef<>() { - }); - - assertThat(response) - .hasSize(3) - .extracting("username", "following") - .containsExactlyInAnyOrder( - tuple(MARK.name(), null), - tuple(KEVIN.name(), null), - tuple(KODA.name(), null) - ); - } - - @DisplayName("사용자는 활동 통계를 조회할 수 있다.") - @Test - void getContributions_LoginUser_Success() { - ContributionResponseDto response = NEOZAL.은로그인을하고().활동_통계를_조회한다(MARK) - .as(ContributionResponseDto.class); - - assertThat(response) - .usingRecursiveComparison() - .isEqualTo(ContributionResponseDto.builder() - .starsCount(11) - .commitsCount(48) - .prsCount(48) - .issuesCount(48) - .reposCount(48) - .build()); - } - - @DisplayName("유효하지 않은 토큰으로 활동 통계를 조회할 수 없다. - 401 예외") - @Test - void getContributions_invalidToken_401Exception() { - ApiErrorResponse response = GUEST.는().비정상토큰으로_활통통계를_조회한다(NEOZAL) - .as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("A0001"); - } - - @DisplayName("유효하지 않은 유저 이름으로 활동 통계를 조회할 수 없다. - 400 예외") - @Test - void getContributions_invalidUsername_400Exception() { - ExtractableResponse extractableResponse = NEOZAL.은로그인을하고().활동_통계를_조회한다(GUEST); - assertThat(extractableResponse.statusCode()).isEqualTo(HttpStatus.BAD_REQUEST.value()); - - ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); - assertThat(response.getErrorCode()).isEqualTo("U0001"); - } } diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/UserProfileUpdateAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/UserProfileUpdateAcceptanceTest.java new file mode 100644 index 000000000..13c36f37a --- /dev/null +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/UserProfileUpdateAcceptanceTest.java @@ -0,0 +1,56 @@ +package com.woowacourse.pickgit.acceptance.user; + +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; +import static org.assertj.core.api.Assertions.assertThat; + +import com.woowacourse.pickgit.acceptance.AcceptanceTest; +import com.woowacourse.pickgit.exception.dto.ApiErrorResponse; +import com.woowacourse.pickgit.user.presentation.dto.response.ProfileDescriptionResponse; +import com.woowacourse.pickgit.user.presentation.dto.response.ProfileImageEditResponse; +import io.restassured.response.ExtractableResponse; +import io.restassured.response.Response; +import java.io.IOException; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpStatus; + +class UserProfileUpdateAcceptanceTest extends AcceptanceTest { + + @DisplayName("로그인 사용자는 자신의 프로필 이미지를 수정할 수 있다.") + @Test + void editProfileImage_LoginUser_Success() throws IOException { + ProfileImageEditResponse response = NEOZAL.은로그인을하고().프로필을_이미지를_수정한다() + .as(ProfileImageEditResponse.class); + + assertThat(response.getImageUrl()).isNotBlank(); + } + + @DisplayName("게스트는 프로필 이미지를 수정할 수 없다.") + @Test + void editProfileImage_GuestUser_Fail() throws IOException { + ExtractableResponse extractableResponse = GUEST.는().프로필_이미지를_수정한다(); + assertThat(extractableResponse.statusCode()).isEqualTo(HttpStatus.UNAUTHORIZED.value()); + + ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("A0001"); + } + + @DisplayName("로그인 사용자는 자신의 한 줄 소개를 수정할 수 있다.") + @Test + void editProfileDescription_LoginUser_Success() { + ProfileDescriptionResponse response = NEOZAL.은로그인을하고().프로필_한줄소개를_수정한다("변경된 프로필") + .as(ProfileDescriptionResponse.class); + + assertThat(response.getDescription()).isEqualTo("변경된 프로필"); + } + + @DisplayName("게스트는 자신의 한 줄 소개를 수정할 수 없다.") + @Test + void editProfileDescription_GuestUser_Fail() { + ApiErrorResponse response = GUEST.는().프로필_한줄소개를_수정한다("변경된 프로필") + .as(ApiErrorResponse.class); + + assertThat(response.getErrorCode()).isEqualTo("A0001"); + } +} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/UserSearchAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/UserSearchAcceptanceTest.java new file mode 100644 index 000000000..9e9f26e63 --- /dev/null +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/UserSearchAcceptanceTest.java @@ -0,0 +1,58 @@ +package com.woowacourse.pickgit.acceptance.user; + +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.KEVIN; +import static com.woowacourse.pickgit.common.fixture.TUser.KODA; +import static com.woowacourse.pickgit.common.fixture.TUser.MARK; +import static com.woowacourse.pickgit.common.fixture.TUser.모든유저; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.tuple; + +import com.woowacourse.pickgit.acceptance.AcceptanceTest; +import com.woowacourse.pickgit.user.application.dto.response.UserSearchResponseDto; +import io.restassured.common.mapper.TypeRef; +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class UserSearchAcceptanceTest extends AcceptanceTest { + + @BeforeEach + void setUp() { + 모든유저().로그인을한다(); + } + + @DisplayName("로그인 - 저장된 유저중 유사한 이름을 가진 유저를 검색할 수 있다. 단, 자기 자신은 검색되지 않는다.(팔로잉 여부 true/false)") + @Test + void searchUser_LoginUser_Success() { + List response = KEVIN.은로그인을하고().유저를_검색한다("K") + .as(new TypeRef<>() { + }); + + assertThat(response) + .hasSize(2) + .extracting("username", "following") + .containsExactlyInAnyOrder( + tuple(MARK.name(), false), + tuple(KODA.name(), false) + ); + } + + @DisplayName("비 로그인 - 저장된 유저중 유사한 이름을 가진 유저를 검색할 수 있다. (팔로잉 필드 null)") + @Test + void searchUser_GuestUser_Success() { + List response = GUEST.는().유저를_검색한다("K") + .as(new TypeRef<>() { + }); + + assertThat(response) + .hasSize(3) + .extracting("username", "following") + .containsExactlyInAnyOrder( + tuple(MARK.name(), null), + tuple(KEVIN.name(), null), + tuple(KODA.name(), null) + ); + } +} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/follow/UserFollowCreateAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/follow/UserFollowCreateAcceptanceTest.java new file mode 100644 index 000000000..21d800b8b --- /dev/null +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/follow/UserFollowCreateAcceptanceTest.java @@ -0,0 +1,68 @@ +package com.woowacourse.pickgit.acceptance.user.follow; + +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.MARK; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; +import static org.assertj.core.api.Assertions.assertThat; + +import com.woowacourse.pickgit.acceptance.AcceptanceTest; +import com.woowacourse.pickgit.exception.dto.ApiErrorResponse; +import com.woowacourse.pickgit.user.presentation.dto.response.FollowResponse; +import io.restassured.response.ExtractableResponse; +import io.restassured.response.Response; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpStatus; + +class UserFollowCreateAcceptanceTest extends AcceptanceTest { + + @DisplayName("로그인되지 않은 사용자는 target 유저를 팔로우 할 수 없다.") + @Test + void followUser_NotLogin_Failure() { + ApiErrorResponse response = GUEST.는().팔로우를한다(NEOZAL).as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("A0001"); + } + + @DisplayName("팔로우중이지 않다면 source 유저는 target 유저를 팔로우할 수 있다.") + @Test + void followUser_SourceToTarget_Success() { + MARK.은로그인을한다(); + FollowResponse response = NEOZAL.은로그인을하고().팔로우를한다(MARK).as(FollowResponse.class); + + assertThat(response) + .usingRecursiveComparison() + .isEqualTo(new FollowResponse(1, true)); + } + + @DisplayName("source 유저와 target 유저가 동일하면 팔로우할 수 없다. - 400 예외") + @Test + void followUser_SameSourceToSameTarget_400Exception() { + ExtractableResponse extractableResponse = NEOZAL.은로그인을하고().팔로우를한다(NEOZAL); + + assertThat(extractableResponse.statusCode()).isEqualTo(HttpStatus.BAD_REQUEST.value()); + + ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("U0004"); + } + + @DisplayName("source 유저는 존재하지 않는 유저를 팔로우할 수 없다. - 400 예외") + @Test + void followUser_SourceToInvalidTarget_400Exception() { + ExtractableResponse extractableResponse = NEOZAL.은로그인을하고().팔로우를한다(GUEST); + + assertThat(extractableResponse.statusCode()).isEqualTo(HttpStatus.BAD_REQUEST.value()); + + ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("U0001"); + } + + @DisplayName("source 유저는 이미 팔로우한 유저를 팔로우할 수 없다. - 400 예외") + @Test + void followUser_SourceToExistingTarget_400Exception() { + MARK.은로그인을한다(); + NEOZAL.은로그인을하고().팔로우를한다(MARK); + + ApiErrorResponse response = NEOZAL.은로그인을하고().팔로우를한다(MARK).as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("U0002"); + } +} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/follow/UserFollowDeleteAcceptanceTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/follow/UserFollowDeleteAcceptanceTest.java new file mode 100644 index 000000000..aa3e288a8 --- /dev/null +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/follow/UserFollowDeleteAcceptanceTest.java @@ -0,0 +1,68 @@ +package com.woowacourse.pickgit.acceptance.user.follow; + +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.MARK; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; +import static org.assertj.core.api.Assertions.assertThat; + +import com.woowacourse.pickgit.acceptance.AcceptanceTest; +import com.woowacourse.pickgit.exception.dto.ApiErrorResponse; +import com.woowacourse.pickgit.user.presentation.dto.response.FollowResponse; +import io.restassured.response.ExtractableResponse; +import io.restassured.response.Response; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpStatus; + +class UserFollowDeleteAcceptanceTest extends AcceptanceTest { + + @DisplayName("로그인되지 않은 사용자는 target 유저를 언팔로우 할 수 없다.") + @Test + void unfollowUser_NotLogin_Failure() { + NEOZAL.은로그인을한다(); + ExtractableResponse extractableResponse = GUEST.는().언팔로우를한다(NEOZAL); + + assertThat(extractableResponse.statusCode()).isEqualTo(HttpStatus.UNAUTHORIZED.value()); + + ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("A0001"); + } + + @DisplayName("source 유저는 target 유저를 언팔로우할 수 있다.") + @Test + void unfollowUser_SourceToTarget_Success() { + MARK.은로그인을한다(); + NEOZAL.은로그인을하고().팔로우를한다(MARK); + FollowResponse response = NEOZAL.은로그인을하고().언팔로우를한다(MARK).as(FollowResponse.class); + + assertThat(response) + .usingRecursiveComparison() + .isEqualTo(new FollowResponse(0, false)); + } + + @DisplayName("source 유저와 target 유저가 동일하면 언팔로우할 수 없다. - 400 예외") + @Test + void unfollowUser_SameSourceToSameTarget_400Exception() { + // when + ExtractableResponse extractableResponse = NEOZAL.은로그인을하고().언팔로우를한다(NEOZAL); + assertThat(extractableResponse.statusCode()).isEqualTo(HttpStatus.BAD_REQUEST.value()); + + ApiErrorResponse response = extractableResponse.as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("U0004"); + } + + @DisplayName("source 유저는 존재하지 않는 유저를 언팔로우할 수 없다. - 400 예외") + @Test + void unfollowUser_SourceToInvalidTarget_400Exception() { + ApiErrorResponse response = NEOZAL.은로그인을하고().언팔로우를한다(GUEST).as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("U0001"); + } + + @DisplayName("source 유저는 팔로우하지 않는 유저를 언팔로우할 수 없다. - 400 예외") + @Test + void unfollowUser_NotExistingFollow_ExceptionThrown() { + MARK.은로그인을한다(); + ApiErrorResponse response = NEOZAL.은로그인을하고().언팔로우를한다(MARK).as(ApiErrorResponse.class); + assertThat(response.getErrorCode()).isEqualTo("U0003"); + } +} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/user/UserAcceptance_GetFollowingsAndFollowers.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/follow/UserFollowReadAcceptanceTest.java similarity index 83% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/user/UserAcceptance_GetFollowingsAndFollowers.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/follow/UserFollowReadAcceptanceTest.java index 46b8aec6f..328a80511 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/acceptance/user/UserAcceptance_GetFollowingsAndFollowers.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/acceptance/user/follow/UserFollowReadAcceptanceTest.java @@ -1,11 +1,12 @@ -package com.woowacourse.pickgit.query.acceptance.user; +package com.woowacourse.pickgit.acceptance.user.follow; -import static com.woowacourse.pickgit.query.fixture.TUser.DANI; -import static com.woowacourse.pickgit.query.fixture.TUser.GUEST; -import static com.woowacourse.pickgit.query.fixture.TUser.KEVIN; -import static com.woowacourse.pickgit.query.fixture.TUser.KODA; -import static com.woowacourse.pickgit.query.fixture.TUser.MARK; -import static com.woowacourse.pickgit.query.fixture.TUser.NEOZAL; +import static com.woowacourse.pickgit.common.fixture.TUser.DANI; +import static com.woowacourse.pickgit.common.fixture.TUser.GUEST; +import static com.woowacourse.pickgit.common.fixture.TUser.KEVIN; +import static com.woowacourse.pickgit.common.fixture.TUser.KODA; +import static com.woowacourse.pickgit.common.fixture.TUser.MARK; +import static com.woowacourse.pickgit.common.fixture.TUser.NEOZAL; +import static com.woowacourse.pickgit.common.fixture.TUser.모든유저; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; @@ -16,11 +17,12 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -class UserAcceptance_GetFollowingsAndFollowers extends AcceptanceTest { +class UserFollowReadAcceptanceTest extends AcceptanceTest { @BeforeEach void setUp() { toRead(); + 모든유저().로그인을한다(); NEOZAL.은로그인을하고().팔로우를한다(KODA, DANI); KODA.은로그인을하고().팔로우를한다(NEOZAL, MARK, DANI); diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/Act.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/Act.java similarity index 98% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/Act.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/Act.java index a6c754876..befbb426a 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/Act.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/Act.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.fixture; +package com.woowacourse.pickgit.common.fixture; import static io.restassured.RestAssured.given; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/AllUserAct.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/AllUserAct.java similarity index 95% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/AllUserAct.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/AllUserAct.java index 0db663285..5c424366e 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/AllUserAct.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/AllUserAct.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.fixture; +package com.woowacourse.pickgit.common.fixture; import static java.util.stream.Collectors.toList; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/CPost.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/CPost.java similarity index 97% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/CPost.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/CPost.java index e993a9228..f04adff66 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/CPost.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/CPost.java @@ -1,7 +1,7 @@ -package com.woowacourse.pickgit.query.fixture; +package com.woowacourse.pickgit.common.fixture; import com.woowacourse.pickgit.common.factory.FileFactory; -import com.woowacourse.pickgit.query.fixture.TPost.Pair; +import com.woowacourse.pickgit.common.fixture.TPost.Pair; import java.io.File; import java.util.ArrayList; import java.util.List; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/LoginAndThenAct.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/LoginAndThenAct.java similarity index 91% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/LoginAndThenAct.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/LoginAndThenAct.java index 5467e88fc..36e235867 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/LoginAndThenAct.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/LoginAndThenAct.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.fixture; +package com.woowacourse.pickgit.common.fixture; import static java.util.stream.Collectors.toList; import static org.assertj.core.api.Assertions.assertThat; @@ -6,14 +6,13 @@ import com.woowacourse.pickgit.common.factory.FileFactory; import com.woowacourse.pickgit.portfolio.presentation.dto.request.PortfolioRequest; import com.woowacourse.pickgit.post.presentation.dto.response.LikeUsersResponse; -import com.woowacourse.pickgit.query.fixture.TPost.Pair; +import com.woowacourse.pickgit.common.fixture.TPost.Pair; import com.woowacourse.pickgit.user.presentation.dto.request.ProfileDescriptionRequest; import com.woowacourse.pickgit.user.presentation.dto.response.UserSearchResponse; import io.restassured.common.mapper.TypeRef; import io.restassured.http.Method; import io.restassured.response.ExtractableResponse; import io.restassured.response.Response; -import io.restassured.response.ResponseBodyExtractionOptions; import java.io.FileInputStream; import java.io.IOException; import java.util.HashMap; @@ -102,7 +101,7 @@ public LoginAndThenAct(TUser tUser, boolean isRead) { } String location = response.headers().getValue(HttpHeaders.LOCATION); String[] split = location.split("/"); - tPost.setId(Long.parseLong(split[split.length - 1])); + tPost.setId(Long.parseLong(split[split.length - 1]), isRead); } return response; @@ -111,7 +110,7 @@ public LoginAndThenAct(TUser tUser, boolean isRead) { public ExtractableResponse 포스트를삭제한다(TPost tPost) { return request( token, - String.format("/api/posts/%d", tPost.getId()), + String.format("/api/posts/%d", tPost.getId(isRead)), Method.DELETE ); } @@ -127,7 +126,7 @@ public LoginAndThenAct(TUser tUser, boolean isRead) { return request( token, - String.format("api/posts/%d", source.getId()), + String.format("api/posts/%d", source.getId(isRead)), Method.PUT, values ); @@ -149,9 +148,9 @@ public LoginAndThenAct(TUser tUser, boolean isRead) { return response; } - public ExtractableResponse 포스트를검색한다(TPost tpost, HttpStatus status) { + public ExtractableResponse 포스트를검색한다(TPost tPost, HttpStatus status) { ExtractableResponse response = request( - String.format("/api/posts?id=%d", tpost.getId()), + String.format("/api/posts?id=%d", tPost.getId(isRead)), Method.GET, status ); @@ -160,34 +159,34 @@ public LoginAndThenAct(TUser tUser, boolean isRead) { return response; } - public ExtractableResponse 포스트에좋아요를누른다(TPost tpost) { + public ExtractableResponse 포스트에좋아요를누른다(TPost tPost) { if (isRead) { - if (tpost.getLikes().contains(tUser)) { + if (tPost.getLikes().contains(tUser)) { return null; } - tpost.addLike(tUser); + tPost.addLike(tUser); } return request( token, - String.format("/api/posts/%d/likes", tpost.getId()), + String.format("/api/posts/%d/likes", tPost.getId(isRead)), Method.PUT ); } - public ExtractableResponse 포스트에좋아요_취소를_한다(TPost tpost) { + public ExtractableResponse 포스트에좋아요_취소를_한다(TPost tPost) { if (isRead) { - if (!tpost.getLikes().contains(tUser)) { + if (!tPost.getLikes().contains(tUser)) { return null; } - tpost.removeLike(tUser); + tPost.removeLike(tUser); } return request( token, - String.format("/api/posts/%d/likes", tpost.getId()), + String.format("/api/posts/%d/likes", tPost.getId(isRead)), Method.DELETE ); } @@ -195,7 +194,7 @@ public LoginAndThenAct(TUser tUser, boolean isRead) { public List 포스트에좋아요한사용자를조회한다(TPost tPost) { return request( token, - String.format("/api/posts/%d/likes", tPost.getId()), + String.format("/api/posts/%d/likes", tPost.getId(isRead)), Method.GET ).as(new TypeRef<>() { }); @@ -216,19 +215,21 @@ public LoginAndThenAct(TUser tUser, boolean isRead) { ExtractableResponse response = request( token, - String.format("/api/posts/%s/comments", tPost.getId()), + String.format("/api/posts/%s/comments", tPost.getId(isRead)), Method.POST, params ); - tUser.cache.put(key, response); + if(isRead) { + tUser.cache.put(key, response); + } return response; } public ExtractableResponse 댓글을삭제한다(TPost tPost, Long id) { return request( token, - String.format("/api/posts/%d/comments/%d", tPost.getId(), id), + String.format("/api/posts/%d/comments/%d", tPost.getId(isRead), id), Method.DELETE ); } @@ -236,7 +237,7 @@ public LoginAndThenAct(TUser tUser, boolean isRead) { public ExtractableResponse 댓글을조회한다(TPost tPost, int page, int limit) { return request( token, - String.format("/api/posts/%d/comments?page=%d&limit=%d", tPost.getId(), page, limit), + String.format("/api/posts/%d/comments?page=%d&limit=%d", tPost.getId(isRead), page, limit), Method.GET ); } diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TContact.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TContact.java similarity index 96% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TContact.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TContact.java index 73829c52a..641ed108e 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TContact.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TContact.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.fixture; +package com.woowacourse.pickgit.common.fixture; import com.woowacourse.pickgit.portfolio.presentation.dto.request.ContactRequest; import com.woowacourse.pickgit.portfolio.presentation.dto.response.ContactResponse; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TDescription.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TDescription.java similarity index 96% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TDescription.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TDescription.java index 294e208b0..b600a442d 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TDescription.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TDescription.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.fixture; +package com.woowacourse.pickgit.common.fixture; import com.woowacourse.pickgit.portfolio.presentation.dto.request.DescriptionRequest; import com.woowacourse.pickgit.portfolio.presentation.dto.response.DescriptionResponse; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TItem.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TItem.java similarity index 98% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TItem.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TItem.java index 3152a9c1c..93b7d8cad 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TItem.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TItem.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.fixture; +package com.woowacourse.pickgit.common.fixture; import static java.util.stream.Collectors.toList; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TPortfolio.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TPortfolio.java similarity index 98% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TPortfolio.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TPortfolio.java index 9906d8303..5b833ced7 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TPortfolio.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TPortfolio.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.fixture; +package com.woowacourse.pickgit.common.fixture; import static java.util.stream.Collectors.toList; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TPost.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TPost.java similarity index 90% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TPost.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TPost.java index bd5974f42..8c75d6e59 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TPost.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TPost.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.fixture; +package com.woowacourse.pickgit.common.fixture; import static java.util.stream.Collectors.toList; @@ -42,6 +42,7 @@ public enum TPost { ); private Long id; + private Long readId; private String githubRepoUrl = "https://github.com/woowacourse-teams/2021-pick-git"; private String content; private List tags; @@ -90,11 +91,18 @@ public static List searchByTagAndGetContent(String keyword) { .collect(toList()); } - public Long getId() { - if (id == null) { + public Long getId(boolean isRead) { + if (readId == null && isRead) { throw new IllegalStateException("아직 Post 생성이 안됨"); } + if (id == null && !isRead) { + throw new IllegalStateException("아직 Post 생성이 안됨"); + } + + if (isRead) { + return readId; + } return id; } @@ -130,7 +138,11 @@ public String getGithubRepoUrl() { return githubRepoUrl; } - protected void setId(Long id) { + protected void setId(Long id, boolean isRead) { + if(isRead) { + this.readId = id; + return; + } this.id = id; } diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TProject.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TProject.java similarity index 98% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TProject.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TProject.java index ef70d3e1b..3b67f8e1a 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TProject.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TProject.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.fixture; +package com.woowacourse.pickgit.common.fixture; import static java.time.Month.OCTOBER; import static java.util.stream.Collectors.toList; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TRepository.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TRepository.java similarity index 96% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TRepository.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TRepository.java index 4f1295657..cf6c01aa1 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TRepository.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TRepository.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.fixture; +package com.woowacourse.pickgit.common.fixture; import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toMap; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TSection.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TSection.java similarity index 97% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TSection.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TSection.java index 862b32d8e..1a748da80 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TSection.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TSection.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.fixture; +package com.woowacourse.pickgit.common.fixture; import static java.util.stream.Collectors.toList; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TUser.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TUser.java similarity index 97% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TUser.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TUser.java index 320e596fb..1f4bcd004 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/TUser.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/TUser.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.fixture; +package com.woowacourse.pickgit.common.fixture; import static io.restassured.RestAssured.given; import static java.util.stream.Collectors.toList; @@ -116,6 +116,7 @@ void addPost(TPost tPost, ExtractableResponse response) { return this.token; } this.token = requestLogin(name()); + return this.token; } return requestLogin(name()); } @@ -128,7 +129,7 @@ void addPost(TPost tPost, ExtractableResponse response) { } public UnLoginAndThenAct 는() { - return new UnLoginAndThenAct(); + return new UnLoginAndThenAct(isRead); } public static AllUserAct 모든유저() { diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/UnLoginAndThenAct.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/UnLoginAndThenAct.java similarity index 92% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/UnLoginAndThenAct.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/UnLoginAndThenAct.java index 79e1fe9dc..06d306090 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/fixture/UnLoginAndThenAct.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/fixture/UnLoginAndThenAct.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.fixture; +package com.woowacourse.pickgit.common.fixture; import static org.assertj.core.api.Assertions.assertThat; @@ -16,11 +16,18 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.junit.jupiter.api.Test; import org.springframework.http.HttpStatus; public class UnLoginAndThenAct extends Act { private static final String INVALID_TOKEN = "invalid token"; + + private final boolean isRead; + + public UnLoginAndThenAct(boolean isRead) { + this.isRead = isRead; + } public List 팔로잉를확인한다(TUser tUser) { return request( @@ -53,9 +60,9 @@ public class UnLoginAndThenAct extends Act { return response; } - public ExtractableResponse 포스트를검색한다(TPost tpost, HttpStatus status) { + public ExtractableResponse 포스트를검색한다(TPost tPost, HttpStatus status) { ExtractableResponse response = request( - String.format("/api/posts?id=%d", tpost.getId()), + String.format("/api/posts?id=%d", tPost.getId(isRead)), Method.GET, status ); @@ -66,7 +73,7 @@ public class UnLoginAndThenAct extends Act { public List 포스트에좋아요한사용자를조회한다(TPost tPost) { return request( - String.format("/api/posts/%d/likes", tPost.getId()), + String.format("/api/posts/%d/likes", tPost.getId(isRead)), Method.GET ).as(new TypeRef<>() { }); @@ -86,7 +93,7 @@ public class UnLoginAndThenAct extends Act { params.put("content", comment); return request( - String.format("/api/posts/%s/comments", tPost.getId()), + String.format("/api/posts/%s/comments", tPost.getId(isRead)), Method.POST, params ); @@ -95,14 +102,14 @@ public class UnLoginAndThenAct extends Act { public ExtractableResponse 댓글을삭제한다(TPost tPost, Long id) { return request( - String.format("/api/posts/%d/comments/%d", tPost.getId(), id), + String.format("/api/posts/%d/comments/%d", tPost.getId(isRead), id), Method.DELETE ); } public ExtractableResponse 댓글을조회한다(TPost tPost, int page, int limit) { return request( - String.format("/api/posts/%d/comments?page=%d&limit=%d", tPost.getId(), page, limit), + String.format("/api/posts/%d/comments?page=%d&limit=%d", tPost.getId(isRead), page, limit), Method.GET ); } @@ -136,16 +143,16 @@ public class UnLoginAndThenAct extends Act { ); } - public ExtractableResponse 포스트에좋아요를누른다(TPost tpost) { + public ExtractableResponse 포스트에좋아요를누른다(TPost tPost) { return request( - String.format("/api/posts/%d/likes", tpost.getId()), + String.format("/api/posts/%d/likes", tPost.getId(isRead)), Method.PUT ); } - public ExtractableResponse 포스트에좋아요_취소를_한다(TPost tpost) { + public ExtractableResponse 포스트에좋아요_취소를_한다(TPost tPost) { return request( - String.format("/api/posts/%d/likes", tpost.getId()), + String.format("/api/posts/%d/likes", tPost.getId(isRead)), Method.DELETE ); } @@ -161,7 +168,7 @@ public class UnLoginAndThenAct extends Act { return request( INVALID_TOKEN, - String.format("api/posts/%d", source.getId()), + String.format("api/posts/%d", source.getId(isRead)), Method.PUT, values ); @@ -170,7 +177,7 @@ public class UnLoginAndThenAct extends Act { public ExtractableResponse 비정상토큰으로_게시물을_삭제한다(TPost tPost) { return request( INVALID_TOKEN, - String.format("/api/posts/%d", tPost.getId()), + String.format("/api/posts/%d", tPost.getId(isRead)), Method.DELETE ); } diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/mockapi/MockGithubOAuthClient.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/mockapi/MockGithubOAuthClient.java index 6c1e165fb..f10b177d9 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/mockapi/MockGithubOAuthClient.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/mockapi/MockGithubOAuthClient.java @@ -2,7 +2,7 @@ import com.woowacourse.pickgit.authentication.application.dto.OAuthProfileResponse; import com.woowacourse.pickgit.authentication.domain.OAuthClient; -import com.woowacourse.pickgit.query.fixture.TUser; +import com.woowacourse.pickgit.common.fixture.TUser; public class MockGithubOAuthClient implements OAuthClient { diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/mockapi/MockTagApiRequester.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/mockapi/MockTagApiRequester.java index 5c0fff06e..e8e1667aa 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/mockapi/MockTagApiRequester.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/mockapi/MockTagApiRequester.java @@ -3,7 +3,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.woowacourse.pickgit.exception.platform.PlatformHttpErrorException; -import com.woowacourse.pickgit.query.fixture.TRepository; +import com.woowacourse.pickgit.common.fixture.TRepository; import com.woowacourse.pickgit.tag.infrastructure.PlatformTagApiRequester; import java.util.Map; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/LoginBuilder.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/LoginBuilder.java deleted file mode 100644 index e189c03c9..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/LoginBuilder.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.woowacourse.pickgit.common.request_builder; - -import static io.restassured.RestAssured.given; - -import com.woowacourse.pickgit.authentication.application.dto.TokenDto; -import com.woowacourse.pickgit.common.request_builder.parameters.Parameters; -import com.woowacourse.pickgit.query.fixture.TUser; -import io.restassured.specification.RequestSpecification; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.time.LocalDateTime; -import org.apache.http.entity.ContentType; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.util.DigestUtils; - -public class LoginBuilder { - - private RequestSpecification spec; - private final Class parameterType; - private final HttpMethod httpMethod; - private final String url; - private final Object[] params; - - public LoginBuilder( - Class parameterType, - HttpMethod httpMethod, - String url, - Object... params - ) { - spec = given().log().all().contentType(ContentType.APPLICATION_JSON.getMimeType()); - this.parameterType = parameterType; - this.httpMethod = httpMethod; - this.url = url; - this.params = params; - } - - public T withUser() { - return withUser(createRandomString()); - } - - private String createRandomString() { - String seed = String.valueOf(LocalDateTime.now().getNano()); - return DigestUtils.md5DigestAsHex(seed.getBytes()); - } - - public T withUser(String name) { - return setOauth2ToSpec(requestLogin(name)); - } - - public T withUser(TUser user) { - return setOauth2ToSpec(user.은로그인을한다().getToken()); - } - - private T setOauth2ToSpec(String token) { - spec = given().log().all().auth().oauth2(token); - - return getParameterBuilder(); - } - - private String requestLogin(String code) { - return given().log().all() - .accept(MediaType.APPLICATION_JSON_VALUE) - .when() - .get("/api/afterlogin?code={code}", code) - .then().log().all() - .statusCode(HttpStatus.OK.value()) - .extract() - .as(TokenDto.class) - .getToken(); - } - - public T withGuest() { - spec = given().log().all(); - return getParameterBuilder(); - } - - private T getParameterBuilder() { - try { - Constructor declaredConstructor = parameterType - .getDeclaredConstructor( - RequestSpecification.class, - HttpMethod.class, - String.class, - Object[].class - ); - - return declaredConstructor.newInstance(spec, httpMethod, url, params); - } catch (NoSuchMethodException | - InstantiationException | - IllegalAccessException | - InvocationTargetException e) { - throw new IllegalStateException(e); - } - } -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/PickGitRequest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/PickGitRequest.java deleted file mode 100644 index 06383164a..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/PickGitRequest.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.woowacourse.pickgit.common.request_builder; - -import com.woowacourse.pickgit.common.request_builder.method_builder.PickGitPostMethodBuilder; -import com.woowacourse.pickgit.common.request_builder.method_builder.PickGitPutMethodBuilder; -import com.woowacourse.pickgit.common.request_builder.parameters.NoParams; -import org.springframework.http.HttpMethod; - -public class PickGitRequest { - - public static PickGitPostMethodBuilder post(String url, Object... params) { - return new PickGitPostMethodBuilder(url, params); - } - - public static LoginBuilder get(String url, Object... params) { - return new LoginBuilder<>(NoParams.class, HttpMethod.GET, url, params); - } - - public static PickGitPutMethodBuilder put(String url, Object... params) { - return new PickGitPutMethodBuilder(url, params); - } - - public static LoginBuilder delete(String url, Object... params) { - return new LoginBuilder(NoParams.class, HttpMethod.DELETE, url, params); - } -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/RequestBuilder.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/RequestBuilder.java deleted file mode 100644 index 836605a2c..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/RequestBuilder.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.woowacourse.pickgit.common.request_builder; - -public interface RequestBuilder { -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/method_builder/MethodBuilder.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/method_builder/MethodBuilder.java deleted file mode 100644 index cb97cfebd..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/method_builder/MethodBuilder.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.woowacourse.pickgit.common.request_builder.method_builder; - -import com.woowacourse.pickgit.common.request_builder.LoginBuilder; -import com.woowacourse.pickgit.common.request_builder.parameters.Parameters; -import org.springframework.http.HttpMethod; - -public abstract class MethodBuilder { - private final String url; - private final Object[] params; - - public MethodBuilder( - String url, - Object... params - ) { - this.url = url; - this.params = params; - } - - protected LoginBuilder getPostLoginBuilder( - Class parameterType - ) { - return new LoginBuilder<>(parameterType, HttpMethod.POST, url, params); - } - - protected LoginBuilder getGetLoginBuilder( - Class parameterType - ) { - return new LoginBuilder<>(parameterType, HttpMethod.GET, url, params); - } - - protected LoginBuilder getPutLoginBuilder( - Class parameterType - ) { - return new LoginBuilder<>(parameterType, HttpMethod.PUT, url, params); - } - - protected LoginBuilder getDeleteLoginBuilder( - Class parameterType - ) { - return new LoginBuilder<>(parameterType, HttpMethod.DELETE, url, params); - } -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/method_builder/PickGitPostMethodBuilder.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/method_builder/PickGitPostMethodBuilder.java deleted file mode 100644 index a8304d3fe..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/method_builder/PickGitPostMethodBuilder.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.woowacourse.pickgit.common.request_builder.method_builder; - -import com.woowacourse.pickgit.common.request_builder.LoginBuilder; -import com.woowacourse.pickgit.common.request_builder.parameters.post.Post_CommentWriteParameters; -import com.woowacourse.pickgit.common.request_builder.parameters.post.Post_FollowingsParameters; -import com.woowacourse.pickgit.common.request_builder.parameters.post.Post_PostWriteParameters; - -public class PickGitPostMethodBuilder extends MethodBuilder{ - - public PickGitPostMethodBuilder(String url, Object... params) { - super(url, params); - } - - public LoginBuilder api_posts() { - return getPostLoginBuilder(Post_PostWriteParameters.class); - } - - public LoginBuilder api_posts_postId_comments() { - return getPostLoginBuilder(Post_CommentWriteParameters.class); - } - - public LoginBuilder api_profiles_userName_followings() { - return getPostLoginBuilder(Post_FollowingsParameters.class); - } -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/method_builder/PickGitPutMethodBuilder.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/method_builder/PickGitPutMethodBuilder.java deleted file mode 100644 index cae1f6cd4..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/method_builder/PickGitPutMethodBuilder.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.woowacourse.pickgit.common.request_builder.method_builder; - -import com.woowacourse.pickgit.common.request_builder.LoginBuilder; -import com.woowacourse.pickgit.common.request_builder.parameters.put.Put_LikesAddParameters; -import com.woowacourse.pickgit.common.request_builder.parameters.put.Put_PostUpdateParameters; -import com.woowacourse.pickgit.common.request_builder.parameters.put.Put_ProfileContentUpdateParameters; -import com.woowacourse.pickgit.common.request_builder.parameters.put.Put_ProfileImageUpdateParameters; - -public class PickGitPutMethodBuilder extends MethodBuilder{ - - public PickGitPutMethodBuilder(String url, Object... params) { - super(url, params); - } - - public LoginBuilder api_posts_postId() { - return getPutLoginBuilder(Put_PostUpdateParameters.class); - } - - public LoginBuilder api_posts_postId_likes() { - return getPutLoginBuilder(Put_LikesAddParameters.class); - } - - public LoginBuilder api_profiles_me_image() { - return getPutLoginBuilder(Put_ProfileImageUpdateParameters.class); - } - - public LoginBuilder api_profiles_me_description() { - return getPutLoginBuilder(Put_ProfileContentUpdateParameters.class); - } -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/NoParams.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/NoParams.java deleted file mode 100644 index 9dd92b360..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/NoParams.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.woowacourse.pickgit.common.request_builder.parameters; - -import io.restassured.specification.RequestSpecification; -import org.springframework.http.HttpMethod; - -public class NoParams extends Parameters { - - public NoParams( - RequestSpecification spec, - HttpMethod httpMethod, - String url, - Object... params - ) { - super(spec, httpMethod, url, params); - } -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/Parameters.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/Parameters.java deleted file mode 100644 index 3899c6b8c..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/Parameters.java +++ /dev/null @@ -1,132 +0,0 @@ -package com.woowacourse.pickgit.common.request_builder.parameters; - -import static com.woowacourse.pickgit.common.PickgitHeaders.IMAGES; - -import io.restassured.response.ExtractableResponse; -import io.restassured.response.Response; -import io.restassured.specification.RequestSenderOptions; -import io.restassured.specification.RequestSpecification; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.apache.http.entity.ContentType; -import org.springframework.http.HttpMethod; - -public abstract class Parameters { - - private final RequestSpecification spec; - private final HttpMethod httpMethod; - private final String url; - private final Object[] params; - - private final Map formParams; - private final List multiparts; - - private ContentType contentType; - - public Parameters( - RequestSpecification spec, - HttpMethod httpMethod, - String url, - Object... params - ) { - this.spec = spec; - this.httpMethod = httpMethod; - this.url = url; - this.params = params; - - this.formParams = new HashMap<>(); - this.multiparts = new ArrayList<>(); - - this.contentType = ContentType.APPLICATION_JSON; - changeContentType(contentType); - } - - protected void changeContentType(ContentType contentType) { - spec.contentType(contentType.getMimeType()); - this.contentType = contentType; - } - - protected void setBody(File data) { - try { - byte[] bytes = Files.readAllBytes(data.toPath()); - spec.body(bytes); - } catch (IOException e) { - throw new IllegalArgumentException(e); - } - } - - protected void setBody(String data) { - spec.body(data); - } - - protected void setBody(byte[] data) { - spec.body(data); - } - - protected void setParam(String key, Object value) { - formParams.put(key, value); - } - - protected void setMultiparts(List files) { - this.multiparts.clear(); - this.multiparts.addAll(files); - } - - protected void setMultiparts(File... files) { - setMultiparts(List.of(files)); - } - - public ExtractableResponse extract() { - RequestSpecification specWithParams; - if(contentType.equals(ContentType.APPLICATION_JSON)) { - specWithParams = spec.body(formParams); - } else { - specWithParams = spec.formParams(formParams); - } - - for (File file : multiparts) { - specWithParams = specWithParams.multiPart(IMAGES, file); - } - - return Methods.extract(specWithParams, httpMethod, url, params); - } - - private enum Methods { - GET(RequestSenderOptions::get), - POST(RequestSpecification::post), - PUT(RequestSpecification::put), - DELETE(RequestSpecification::delete); - - private final HttpMethodSetter spec; - - Methods(HttpMethodSetter operator) { - this.spec = operator; - } - - private static ExtractableResponse extract( - RequestSpecification spec, - HttpMethod httpMethod, - String url, - Object... params - ) { - Methods methods = List.of(values()).stream() - .filter(value -> httpMethod.matches(value.name())) - .findAny() - .orElseThrow(IllegalArgumentException::new); - - return methods.spec.set(spec, url, params) - .then().log().all() - .extract(); - } - - } - - private interface HttpMethodSetter { - Response set(RequestSpecification spec, String url, Object... params); - } -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/post/Post_CommentWriteParameters.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/post/Post_CommentWriteParameters.java deleted file mode 100644 index a95c34c67..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/post/Post_CommentWriteParameters.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.woowacourse.pickgit.common.request_builder.parameters.post; - -import static com.woowacourse.pickgit.common.PickgitHeaders.CONTENT; - -import com.woowacourse.pickgit.common.request_builder.parameters.Parameters; -import io.restassured.specification.RequestSpecification; -import org.springframework.http.HttpMethod; - -public class Post_CommentWriteParameters extends Parameters { - - public Post_CommentWriteParameters( - RequestSpecification spec, - HttpMethod httpMethod, - String url, - Object... params - ) { - super(spec, httpMethod, url, params); - } - - public Post_CommentWriteParameters initAllParams() { - content("test comment"); - return this; - } - - public Post_CommentWriteParameters content(String content) { - setParam(CONTENT, content); - return this; - } -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/post/Post_FollowingsParameters.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/post/Post_FollowingsParameters.java deleted file mode 100644 index f05547065..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/post/Post_FollowingsParameters.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.woowacourse.pickgit.common.request_builder.parameters.post; - -import static com.woowacourse.pickgit.common.PickgitHeaders.GITHUB_FOLLOWING; - -import com.woowacourse.pickgit.common.request_builder.parameters.Parameters; -import io.restassured.specification.RequestSpecification; -import org.springframework.http.HttpMethod; - -public class Post_FollowingsParameters extends Parameters { - - public Post_FollowingsParameters( - RequestSpecification spec, - HttpMethod httpMethod, - String url, - Object... params - ) { - super(spec, httpMethod, url, params); - } - - public Post_FollowingsParameters githubFollowing(boolean bool) { - setParam(GITHUB_FOLLOWING, bool); - return this; - } -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/post/Post_PostWriteParameters.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/post/Post_PostWriteParameters.java deleted file mode 100644 index 6b715929b..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/post/Post_PostWriteParameters.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.woowacourse.pickgit.common.request_builder.parameters.post; - -import static com.woowacourse.pickgit.common.PickgitHeaders.CONTENT; -import static com.woowacourse.pickgit.common.PickgitHeaders.GITHUB_REPO_URL; -import static com.woowacourse.pickgit.common.PickgitHeaders.TAGS; - -import com.woowacourse.pickgit.common.factory.FileFactory; -import com.woowacourse.pickgit.common.request_builder.parameters.Parameters; -import io.restassured.specification.RequestSpecification; -import java.io.File; -import java.util.List; -import org.apache.http.entity.ContentType; -import org.springframework.http.HttpMethod; - -public class Post_PostWriteParameters extends Parameters { - - public Post_PostWriteParameters( - RequestSpecification spec, - HttpMethod httpMethod, - String url, - Object... params - ) { - super(spec, httpMethod, url, params); - changeContentType(ContentType.MULTIPART_FORM_DATA); - } - - public Post_PostWriteParameters initAllParams() { - githubRepoUrl("https://github.com/sample"); - content("testContent"); - tags("java", "c++"); - images(FileFactory.getTestImage1File(), FileFactory.getTestImage2File()); - - return this; - } - - public Post_PostWriteParameters githubRepoUrl(String githubRepoUrl) { - setParam(GITHUB_REPO_URL, githubRepoUrl); - return this; - } - - public Post_PostWriteParameters content(String content) { - setParam(CONTENT, content); - return this; - } - - public Post_PostWriteParameters tags(String... tags) { - tags(List.of(tags)); - return this; - } - - public Post_PostWriteParameters tags(List tags) { - setParam(TAGS, String.join(",", tags)); - - return this; - } - - public Post_PostWriteParameters images(File... file) { - setMultiparts(List.of(file)); - return this; - } -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/put/Put_LikesAddParameters.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/put/Put_LikesAddParameters.java deleted file mode 100644 index 29c35cd18..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/put/Put_LikesAddParameters.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.woowacourse.pickgit.common.request_builder.parameters.put; - -import com.woowacourse.pickgit.common.request_builder.parameters.Parameters; -import io.restassured.specification.RequestSpecification; -import org.springframework.http.HttpMethod; - -public class Put_LikesAddParameters extends Parameters { - - public Put_LikesAddParameters(RequestSpecification spec, - HttpMethod httpMethod, String url, Object... params) { - super(spec, httpMethod, url, params); - } -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/put/Put_PostUpdateParameters.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/put/Put_PostUpdateParameters.java deleted file mode 100644 index 247f4abb0..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/put/Put_PostUpdateParameters.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.woowacourse.pickgit.common.request_builder.parameters.put; - -import static com.woowacourse.pickgit.common.PickgitHeaders.CONTENT; -import static com.woowacourse.pickgit.common.PickgitHeaders.TAGS; - -import com.woowacourse.pickgit.common.request_builder.parameters.Parameters; -import io.restassured.specification.RequestSpecification; -import java.util.List; -import org.springframework.http.HttpMethod; - -public class Put_PostUpdateParameters extends Parameters { - - public Put_PostUpdateParameters( - RequestSpecification spec, - HttpMethod httpMethod, - String url, - Object... params - ) { - super(spec, httpMethod, url, params); - } - - public Put_PostUpdateParameters initAllParams() { - tags("updateTag1", "updateTag2"); - content("update content"); - return this; - } - - public Put_PostUpdateParameters tags(String... tags) { - return tags(List.of(tags)); - } - - public Put_PostUpdateParameters tags(List tags) { - setParam(TAGS, tags); - return this; - } - - public Put_PostUpdateParameters content(String content) { - setParam(CONTENT, content); - return this; - } -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/put/Put_ProfileContentUpdateParameters.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/put/Put_ProfileContentUpdateParameters.java deleted file mode 100644 index 98ea91e1d..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/put/Put_ProfileContentUpdateParameters.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.woowacourse.pickgit.common.request_builder.parameters.put; - -import static com.woowacourse.pickgit.common.PickgitHeaders.DESCRIPTION; - -import com.woowacourse.pickgit.common.request_builder.parameters.Parameters; -import io.restassured.specification.RequestSpecification; -import org.apache.http.entity.ContentType; -import org.springframework.http.HttpMethod; - -public class Put_ProfileContentUpdateParameters extends Parameters { - - public Put_ProfileContentUpdateParameters( - RequestSpecification spec, - HttpMethod httpMethod, - String url, - Object... params - ) { - super(spec, httpMethod, url, params); - spec.contentType(ContentType.TEXT_PLAIN.getMimeType()); - } - - public Put_ProfileContentUpdateParameters initAllParams() { - description("test description"); - return this; - } - - public Put_ProfileContentUpdateParameters description(String content) { - setParam(DESCRIPTION, content); - return this; - } -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/put/Put_ProfileImageUpdateParameters.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/put/Put_ProfileImageUpdateParameters.java deleted file mode 100644 index 9534612fd..000000000 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/common/request_builder/parameters/put/Put_ProfileImageUpdateParameters.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.woowacourse.pickgit.common.request_builder.parameters.put; - -import com.woowacourse.pickgit.common.factory.FileFactory; -import com.woowacourse.pickgit.common.request_builder.parameters.Parameters; -import io.restassured.specification.RequestSpecification; -import java.io.File; -import org.apache.http.entity.ContentType; -import org.springframework.http.HttpMethod; - -public class Put_ProfileImageUpdateParameters extends Parameters { - - public Put_ProfileImageUpdateParameters( - RequestSpecification spec, - HttpMethod httpMethod, - String url, - Object... params - ) { - super(spec, httpMethod, url, params); - spec.contentType(ContentType.TEXT_PLAIN.getMimeType()); - } - - public Put_ProfileImageUpdateParameters initAllParams() { - body(FileFactory.getTestImage1File()); - return this; - } - - public Put_ProfileImageUpdateParameters body(File file) { - setBody(file); - return this; - } -} diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/config/db/DataSourceSelector.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/config/db/DataSourceSelector.java index 8f6e1a1a1..e04f37092 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/config/db/DataSourceSelector.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/config/db/DataSourceSelector.java @@ -1,6 +1,6 @@ package com.woowacourse.pickgit.config.db; -import com.woowacourse.pickgit.query.fixture.TUser; +import com.woowacourse.pickgit.common.fixture.TUser; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/authentication/OAuthServiceIntegrationTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/authentication/OAuthServiceIntegrationTest.java index aa0a6038e..ea45ca772 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/authentication/OAuthServiceIntegrationTest.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/authentication/OAuthServiceIntegrationTest.java @@ -21,6 +21,7 @@ import com.woowacourse.pickgit.user.domain.User; import com.woowacourse.pickgit.user.domain.repository.UserRepository; import com.woowacourse.pickgit.user.domain.search.UserSearchEngine; +import java.time.Duration; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -65,7 +66,10 @@ void setUp() { SECRET_KEY, EXPIRATION_TIME_IN_MILLISECONDS ); - this.oAuthAccessTokenDao = new RedisOAuthAccessTokenDao(redisTemplate); + this.oAuthAccessTokenDao = new RedisOAuthAccessTokenDao( + redisTemplate, + Duration.ofHours(3).toMillis() + ); this.oAuthService = new OAuthService( oAuthClient, jwtTokenProvider, diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/comment/CommentServiceIntegrationTest_queryComments.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/comment/CommentServiceIntegrationTest_queryComments.java similarity index 98% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/comment/CommentServiceIntegrationTest_queryComments.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/comment/CommentServiceIntegrationTest_queryComments.java index 230a89b70..bc7142c25 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/comment/CommentServiceIntegrationTest_queryComments.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/comment/CommentServiceIntegrationTest_queryComments.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.integrantion.comment; +package com.woowacourse.pickgit.integration.comment; import static java.util.stream.Collectors.toList; import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/post/PostFeedServiceIntegrationTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/post/PostFeedServiceIntegrationTest.java similarity index 99% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/post/PostFeedServiceIntegrationTest.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/post/PostFeedServiceIntegrationTest.java index 1ed8e1117..7f19ad237 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/post/PostFeedServiceIntegrationTest.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/post/PostFeedServiceIntegrationTest.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.integrantion.post; +package com.woowacourse.pickgit.integration.post; import static java.util.stream.Collectors.toList; import static org.assertj.core.api.Assertions.assertThat; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/post/PostFeedServiceIntegrationTest_Query.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/post/PostFeedServiceIntegrationTest_Query.java similarity index 98% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/post/PostFeedServiceIntegrationTest_Query.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/post/PostFeedServiceIntegrationTest_Query.java index 15345b717..8939434ba 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/post/PostFeedServiceIntegrationTest_Query.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/post/PostFeedServiceIntegrationTest_Query.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.integrantion.post; +package com.woowacourse.pickgit.integration.post; import static java.util.stream.Collectors.toList; import static org.assertj.core.api.Assertions.assertThat; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/post/PostFeedServiceIntegrationTest_SearchById.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/post/PostFeedServiceIntegrationTest_SearchById.java similarity index 98% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/post/PostFeedServiceIntegrationTest_SearchById.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/post/PostFeedServiceIntegrationTest_SearchById.java index 59160c657..23003505e 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/post/PostFeedServiceIntegrationTest_SearchById.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/post/PostFeedServiceIntegrationTest_SearchById.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.integrantion.post; +package com.woowacourse.pickgit.integration.post; import static org.assertj.core.api.Assertions.assertThat; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/post/PostFeedServiceIntegrationTest_search.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/post/PostFeedServiceIntegrationTest_search.java similarity index 99% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/post/PostFeedServiceIntegrationTest_search.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/post/PostFeedServiceIntegrationTest_search.java index bacb564df..042a775f9 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/post/PostFeedServiceIntegrationTest_search.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/post/PostFeedServiceIntegrationTest_search.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.integrantion.post; +package com.woowacourse.pickgit.integration.post; import static java.util.Comparator.comparing; import static java.util.stream.Collectors.toList; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/tag/TagServiceIntegrationTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/tag/TagServiceIntegrationTest.java index c64e1ac3b..1fd85f82a 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/tag/TagServiceIntegrationTest.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/tag/TagServiceIntegrationTest.java @@ -1,12 +1,11 @@ package com.woowacourse.pickgit.integration.tag; -import static com.woowacourse.pickgit.query.fixture.TRepository.PICK_GIT; +import static com.woowacourse.pickgit.common.fixture.TRepository.PICK_GIT; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; import com.fasterxml.jackson.databind.ObjectMapper; import com.woowacourse.pickgit.common.mockapi.MockTagApiRequester; -import com.woowacourse.pickgit.config.JpaTestConfiguration; import com.woowacourse.pickgit.exception.platform.PlatformHttpErrorException; import com.woowacourse.pickgit.exception.post.TagFormatException; import com.woowacourse.pickgit.integration.IntegrationTest; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/user/UserServiceIntegrationTest_Query.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/user/UserServiceIntegrationTest_Query.java similarity index 99% rename from backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/user/UserServiceIntegrationTest_Query.java rename to backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/user/UserServiceIntegrationTest_Query.java index 71989fb1c..8ccac45c6 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/query/integrantion/user/UserServiceIntegrationTest_Query.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/integration/user/UserServiceIntegrationTest_Query.java @@ -1,4 +1,4 @@ -package com.woowacourse.pickgit.query.integrantion.user; +package com.woowacourse.pickgit.integration.user; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; diff --git a/backend/pick-git/src/test/java/com/woowacourse/pickgit/unit/tag/infrastructure/GithubTagExtractorTest.java b/backend/pick-git/src/test/java/com/woowacourse/pickgit/unit/tag/infrastructure/GithubTagExtractorTest.java index b55464173..0e651fc8e 100644 --- a/backend/pick-git/src/test/java/com/woowacourse/pickgit/unit/tag/infrastructure/GithubTagExtractorTest.java +++ b/backend/pick-git/src/test/java/com/woowacourse/pickgit/unit/tag/infrastructure/GithubTagExtractorTest.java @@ -1,6 +1,6 @@ package com.woowacourse.pickgit.unit.tag.infrastructure; -import static com.woowacourse.pickgit.query.fixture.TRepository.PICK_GIT; +import static com.woowacourse.pickgit.common.fixture.TRepository.PICK_GIT; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; diff --git a/frontend/src/components/Feed/Feed.tsx b/frontend/src/components/Feed/Feed.tsx index af6e925e1..2971a8e77 100644 --- a/frontend/src/components/Feed/Feed.tsx +++ b/frontend/src/components/Feed/Feed.tsx @@ -83,6 +83,7 @@ const Feed = ({ const newPosts = [...posts]; const targetPost = newPosts.find((post) => post.id === postId); + if (!targetPost) { return; } diff --git a/frontend/src/hooks/common/useStep.ts b/frontend/src/hooks/common/useStep.ts index c516ba423..f294e5bd9 100644 --- a/frontend/src/hooks/common/useStep.ts +++ b/frontend/src/hooks/common/useStep.ts @@ -14,7 +14,7 @@ const useStep = ({ steps, stepIndex, setStepIndex }: Parameters) => { const setStepMoveEventHandler = () => { window.onpopstate = () => { - if (getLastHash(history.location.pathname) === steps[stepIndex + 1]?.hash) { + if (getLastHash(history.location.hash) === steps[stepIndex + 1]?.hash) { setStepIndex(stepIndex + 1); return; } diff --git a/frontend/src/hooks/service/useFeedMutation.ts b/frontend/src/hooks/service/useFeedMutation.ts index aabfc14cf..aeebf6742 100644 --- a/frontend/src/hooks/service/useFeedMutation.ts +++ b/frontend/src/hooks/service/useFeedMutation.ts @@ -2,7 +2,6 @@ import { useContext } from "react"; import { InfiniteData, QueryKey, useQueryClient } from "react-query"; import { Post } from "../../@types"; import { UNKNOWN_ERROR_MESSAGE } from "../../constants/messages"; -import { QUERY } from "../../constants/queries"; import SnackBarContext from "../../contexts/SnackbarContext"; import { useAddPostLikeMutation, useDeletePostLikeMutation, useDeletePostMutation } from "../../services/queries"; @@ -48,28 +47,35 @@ const useFeedMutation = (queryKeyList: QueryKey[]) => { }; const addPostLike = async (postId: Post["id"]) => { - const infinitePostsData = queryClient.getQueryData>(QUERY.GET_HOME_FEED_POSTS("all")); - const targetPost = getTargetPost(postId, [...(infinitePostsData?.pages ?? [])]); + let addingLikePost: Post; - if (!targetPost) { - return; - } + infinitePostsDataList.forEach(async (infinitePostsData, index) => { + const newPostsPages = [...infinitePostsData.pages]; + const targetPost = getTargetPost(postId, newPostsPages); + + if (targetPost) { - const prevLiked = targetPost?.liked; - const prevLikesCount = targetPost?.likesCount; + targetPost.liked = true; + targetPost.likesCount += 1; + + setPostsPages(newPostsPages, queryKeyList[index]); + addingLikePost = targetPost; + } + }); - setPostLike(postId, { liked: true, likesCount: prevLikesCount + 1 }); + const prevPostLiked = false; + const prevPostLikesCount = addingLikePost!.likesCount - 1; try { const { liked, likesCount } = await mutateAddPostLike(postId); - if (liked === prevLiked || likesCount === prevLikesCount) { + if (liked === prevPostLiked || likesCount === prevPostLikesCount) { pushSnackbarMessage(UNKNOWN_ERROR_MESSAGE); - setPostLike(postId, { liked: prevLiked, likesCount: prevLikesCount }); + setPostLike(postId, { liked: prevPostLiked, likesCount: prevPostLikesCount }); } } catch (error) { pushSnackbarMessage(UNKNOWN_ERROR_MESSAGE); - setPostLike(postId, { liked: prevLiked, likesCount: prevLikesCount }); + setPostLike(postId, { liked: prevPostLiked, likesCount: prevPostLikesCount }); } }; @@ -84,28 +90,37 @@ const useFeedMutation = (queryKeyList: QueryKey[]) => { }; const deletePostLike = async (postId: Post["id"]) => { - const infinitePostsData = queryClient.getQueryData>(QUERY.GET_HOME_FEED_POSTS("all")); - const targetPost = getTargetPost(postId, [...(infinitePostsData?.pages ?? [])]); + let deletingPost: Post; - if (!targetPost) { - return; - } + infinitePostsDataList.forEach(async (infinitePostsData, index) => { + const newPostsPages = [...infinitePostsData.pages]; + const targetPost = getTargetPost(postId, newPostsPages); + + if (targetPost) { - const prevLiked = targetPost?.liked; - const prevLikesCount = targetPost?.likesCount; + targetPost.liked = false; + if (targetPost.likesCount > 0) { + targetPost.likesCount -= 1; + } + + setPostsPages(newPostsPages, queryKeyList[index]); + deletingPost = targetPost; + } + }); - setPostLike(postId, { liked: false, likesCount: prevLikesCount - 1 }); + const prevPostLiked = true; + const prevPostLikesCount = deletingPost!.likesCount + 1; try { const { liked, likesCount } = await mutateDeletePostLike(postId); - if (liked === prevLiked || likesCount === prevLikesCount) { + if (liked === prevPostLiked || likesCount === prevPostLikesCount) { pushSnackbarMessage(UNKNOWN_ERROR_MESSAGE); - setPostLike(postId, { liked: prevLiked, likesCount: prevLikesCount }); + setPostLike(postId, { liked: prevPostLiked, likesCount: prevPostLikesCount }); } } catch (error) { pushSnackbarMessage(UNKNOWN_ERROR_MESSAGE); - setPostLike(postId, { liked: prevLiked, likesCount: prevLikesCount }); + setPostLike(postId, { liked: prevPostLiked, likesCount: prevPostLikesCount }); } }; diff --git a/frontend/src/pages/HomeFeedPage/HomeFeedPage.tsx b/frontend/src/pages/HomeFeedPage/HomeFeedPage.tsx index 433e7c3bd..d36683b51 100644 --- a/frontend/src/pages/HomeFeedPage/HomeFeedPage.tsx +++ b/frontend/src/pages/HomeFeedPage/HomeFeedPage.tsx @@ -62,9 +62,6 @@ const HomeFeedPage = () => { if (browserName === "safari") { showAlert("특정 사파리 버전에선 \n 앱의 기능이 제한될 수 있습니다."); } - - refetchAll(); - setTimeout(refetchAll, 300); }, []); if (isLoading || isFirstImagesLoading) { diff --git a/frontend/src/pages/PortfolioPage/PortfolioPage.tsx b/frontend/src/pages/PortfolioPage/PortfolioPage.tsx index 51142f879..d8925413f 100644 --- a/frontend/src/pages/PortfolioPage/PortfolioPage.tsx +++ b/frontend/src/pages/PortfolioPage/PortfolioPage.tsx @@ -13,6 +13,7 @@ import { CONTACT_ICON } from "../../constants/portfolio"; import usePortfolio from "../../hooks/service/usePortfolio"; import useProfile from "../../hooks/service/useProfile"; +import { customError } from "../../utils/error"; import { AvatarWrapper, @@ -30,37 +31,35 @@ import { const PortfolioPage = () => { const username = new URLSearchParams(location.search).get("username") ?? ""; const containerRef = useRef(null); - const { data: profile } = useProfile(false, username); const { portfolio: remotePortfolio, isLoading: isPortfolioLoading, isError, - error, isFetching, - } = usePortfolio(username); + } = usePortfolio(username, false); if (isPortfolioLoading || isFetching) { return ; } - if (!remotePortfolio || isError) { - if (error?.response?.status === 400) { - return ( - <> - - - - ); - } - + if (isError) { return ; } + if (!remotePortfolio) { + return ( + <> + + + + ); + } + return ( <> - + diff --git a/frontend/src/services/queries/portfolio.ts b/frontend/src/services/queries/portfolio.ts index 116b3a230..e16a4df40 100644 --- a/frontend/src/services/queries/portfolio.ts +++ b/frontend/src/services/queries/portfolio.ts @@ -21,6 +21,7 @@ export const usePortfolioQuery = (username: string, isMyPortfolio: boolean) => { return useQuery>([QUERY.GET_PORTFOLIO], portfolioQueryFunction, { refetchOnWindowFocus: false, + cacheTime: 0 }); }; diff --git a/frontend/src/services/queries/profile.ts b/frontend/src/services/queries/profile.ts index 2cbaa66b6..e50d5b476 100644 --- a/frontend/src/services/queries/profile.ts +++ b/frontend/src/services/queries/profile.ts @@ -48,7 +48,7 @@ export const useProfileQuery = (isMyProfile: boolean, username: string | null) = return useQuery>( [QUERY.GET_PROFILE, { isMyProfile, username }], profileQueryFunction, - { suspense: true } + { suspense: true, cacheTime: 3600 * 4 } ); };