Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Be 57 feat test case #115

Open
wants to merge 17 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 29 additions & 30 deletions src/main/java/org/tenten/tentenbe/domain/comment/model/Comment.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,42 +34,41 @@ public class Comment extends BaseTimeEntity {
private Review review;


public Comment(String content , Review review ){
public Comment(String content , Review review, Member member ){
this.content = content;
this.review = review;
// this.creator = creator;
this.creator = member;
}

public void UpdateComment(String content){
this.content = content;
}

// 리뷰와 댓글 양방향 설정 만약 리뷰에서 설정되어있으면 제거해도됨
public void addReview(Review review){
this.review = review;

if(!review.getComments().contains(this)){
review.getComments().add(this);
}
}
public void removeReview(){
if(this.review != null){
review.getComments().remove(this);
this.review = null;
}
}

public void addCreator(Member creator){
this.creator = creator;

if(!creator.getComments().contains(this)){
creator.getComments().add(this);
}
}
public void removeCreator(){
if(this.creator != null){
creator.getComments().remove(this);
this.creator = null;
}
}
// public void addReview(Review review){
// this.review = review;
//
// if(!review.getComments().contains(this)){
// review.getComments().add(this);
// }
// }
// public void removeReview(){
// if(this.review != null){
// review.getComments().remove(this);
// this.review = null;
// }
// }
//
// public void addCreator(Member creator){
// this.creator = creator;
//
// if(!creator.getComments().contains(this)){
// creator.getComments().add(this);
// }
// }
// public void removeCreator(){
// if(this.creator != null){
// creator.getComments().remove(this);
// this.creator = null;
// }
// }
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.tenten.tentenbe.domain.member.exception.MemberException;
import org.tenten.tentenbe.domain.member.model.Member;
import org.tenten.tentenbe.domain.member.repository.MemberRepository;
import org.tenten.tentenbe.domain.review.exception.ReviewException;
import org.tenten.tentenbe.domain.review.model.Review;
import org.tenten.tentenbe.domain.review.repository.ReviewRepository;

Expand All @@ -28,15 +29,11 @@ public class CommentService {
@Transactional
public CommentInfo createComment(Long currentMemberId, CommentCreateRequest commentCreateRequest) {

Review review = reviewRepository.findById(commentCreateRequest.reviewId()).orElseThrow(
()-> new RuntimeException("해당 리뷰가 없습니다.")
);

Comment newComment = new Comment(commentCreateRequest.content(), review);
Review review = reviewRepository.findById(commentCreateRequest.reviewId())
.orElseThrow(() -> new ReviewException("해당 아이디로 존재하는 리뷰가 없습니다. reviewId : " + commentCreateRequest.reviewId(), NOT_FOUND));
Member member = memberRepository.findById(currentMemberId).orElseThrow(() -> new MemberException("주어진 아이디로 존재하는 멤버가 없습니다.", NOT_FOUND));

newComment.addReview(review);
newComment.addCreator(member);
Comment newComment = new Comment(commentCreateRequest.content(), review,member);
Comment savedComment = commentRepository.save(newComment);

return new CommentInfo(
Expand All @@ -45,7 +42,7 @@ public CommentInfo createComment(Long currentMemberId, CommentCreateRequest comm
member.getProfileImageUrl(),
savedComment.getContent(),
savedComment.getCreatedTime(),
true
true
);
}

Expand All @@ -54,9 +51,11 @@ public CommentInfo updateComment(Long memberId, Long commentId, CommentUpdateReq
Member member = memberRepository.findById(memberId).orElseThrow(() -> new MemberException("주어진 아이디로 존재하는 멤버가 없습니다.", NOT_FOUND));

Comment findCommentById = commentRepository.findById(commentId).orElseThrow(
() -> new CommentException("해당 댓글이 없습니다.", HttpStatus.BAD_REQUEST)
() -> new CommentException("해당 댓글이 없습니다.", NOT_FOUND)
);

commentEditPermission(member,findCommentById);

findCommentById.UpdateComment(commentUpdateRequest.content());
return new CommentInfo(
findCommentById.getId(),
Expand All @@ -71,13 +70,18 @@ public CommentInfo updateComment(Long memberId, Long commentId, CommentUpdateReq
@Transactional
public void deleteComment(Long memberId, Long commentId) {

Member member = memberRepository.findById(memberId).orElseThrow(() -> new MemberException("주어진 아이디로 존재하는 멤버가 없습니다.", NOT_FOUND));
Comment findCommentById = commentRepository.findById(commentId).orElseThrow(
() -> new CommentException("해당 댓글이 없습니다.", HttpStatus.BAD_REQUEST)
() -> new CommentException("해당 댓글이 없습니다.", NOT_FOUND)
);

findCommentById.removeReview();
findCommentById.removeCreator();

commentEditPermission(member,findCommentById);
commentRepository.delete(findCommentById);
}

private void commentEditPermission(Member member, Comment comment){
if(member.getId() != comment.getCreator().getId()){
throw new CommentException("댓글 수정 권한이 없습니다.",HttpStatus.FORBIDDEN);
}
}
}
36 changes: 36 additions & 0 deletions src/test/java/org/tenten/tentenbe/common/ControllerTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package org.tenten.tentenbe.common;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.BeforeEach;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import org.tenten.tentenbe.domain.member.service.MemberService;

import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;

@SpringBootTest
@AutoConfigureMockMvc
@ActiveProfiles("test")
public class ControllerTest {

@Autowired
protected MockMvc mockMvc;
@Autowired
protected ObjectMapper objectMapper;
@Autowired
WebApplicationContext context;
@BeforeEach
protected void setup() {
System.out.println("start before Each");
mockMvc = MockMvcBuilders
.webAppContextSetup(this.context)
.apply(springSecurity())
.build();
}
}
64 changes: 64 additions & 0 deletions src/test/java/org/tenten/tentenbe/common/RepositoryTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package org.tenten.tentenbe.common;


import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.junit.jupiter.api.BeforeEach;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.ActiveProfiles;
import org.tenten.tentenbe.domain.liked.repository.LikedItemRepository;
import org.tenten.tentenbe.domain.member.repository.MemberRepository;
import org.tenten.tentenbe.domain.review.repository.KeywordRepository;
import org.tenten.tentenbe.domain.review.repository.ReviewKeywordRepository;
import org.tenten.tentenbe.domain.review.repository.ReviewRepository;
import org.tenten.tentenbe.domain.tour.repository.TourItemRepository;
import org.tenten.tentenbe.domain.trip.repository.*;

@DataJpaTest
@ActiveProfiles("test")
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class RepositoryTest {

@Autowired
protected TourItemRepository tourItemRepository;
@Autowired
protected MemberRepository memberRepository;
@Autowired
protected LikedItemRepository likedItemRepository;
@Autowired
protected ReviewRepository reviewRepository;
@Autowired
protected TripRepository tripRepository;
@Autowired
protected TripItemRepository tripItemRepository;
@Autowired
protected TripMemberRepository tripMemberRepository;
@Autowired
protected TripLikedItemRepository tripLikedItemRepository;
@Autowired
protected TripLikedItemPreferenceRepository tripLikedItemPreferenceRepository;
@Autowired
protected ReviewKeywordRepository reviewKeywordRepository;
@Autowired
protected KeywordRepository keywordRepository;
@PersistenceContext
protected EntityManager entityManager;
@BeforeEach
protected void init() {
entityManager.flush();
System.out.println("flushed data success");
tourItemRepository.deleteAll();
memberRepository.deleteAll();
likedItemRepository.deleteAll();
tripRepository.deleteAll();
tripItemRepository.deleteAll();
reviewRepository.deleteAll();
tripMemberRepository.deleteAll();
tripLikedItemRepository.deleteAll();
tripLikedItemPreferenceRepository.deleteAll();
System.out.println("reset success");
}

}
10 changes: 10 additions & 0 deletions src/test/java/org/tenten/tentenbe/common/ServiceTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.tenten.tentenbe.common;

import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.test.context.ActiveProfiles;

@ExtendWith(MockitoExtension.class)
@ActiveProfiles("test")
public class ServiceTest {
}
109 changes: 109 additions & 0 deletions src/test/java/org/tenten/tentenbe/common/fixture/AuthFixture.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package org.tenten.tentenbe.common.fixture;

import org.tenten.tentenbe.domain.auth.dto.request.LoginRequest;
import org.tenten.tentenbe.domain.auth.dto.request.SignUpRequest;
import org.tenten.tentenbe.domain.auth.dto.response.LoginResponse;
import org.tenten.tentenbe.domain.auth.dto.response.MemberDto;
import org.tenten.tentenbe.domain.auth.dto.response.SignUpResponse;
import org.tenten.tentenbe.domain.member.dto.request.MemberUpdateRequest;
import org.tenten.tentenbe.domain.member.model.Member;
import org.tenten.tentenbe.domain.member.model.Survey;
import org.tenten.tentenbe.domain.token.dto.TokenDTO;
import org.tenten.tentenbe.global.common.enums.GenderType;
import org.tenten.tentenbe.global.common.enums.LoginType;
import org.tenten.tentenbe.global.security.jwt.model.RefreshToken;

import java.sql.Timestamp;
import java.time.Instant;

import static org.tenten.tentenbe.domain.token.dto.TokenDTO.*;
import static org.tenten.tentenbe.global.common.constant.JwtConstants.ACCESS_TOKEN_EXPIRE_TIME;
import static org.tenten.tentenbe.global.common.constant.JwtConstants.BEARER_TYPE;
import static org.tenten.tentenbe.global.common.enums.AgeType.TEENAGER;
import static org.tenten.tentenbe.global.common.enums.GenderType.DEFAULT;
import static org.tenten.tentenbe.global.common.enums.LoginType.EMAIL;
import static org.tenten.tentenbe.global.common.enums.UserAuthority.ROLE_USER;

public class AuthFixture {

public static SignUpRequest signUpRequest(){
return new SignUpRequest("[email protected]", "qwerty1234");
}

public static SignUpResponse signUpResponse(){
return new SignUpResponse(1L, "[email protected]", "test", null);
}


public static LoginRequest loginRequest(){
return new LoginRequest("[email protected]", "qwerty1234");
}

public static LoginResponse loginResponse(){
return LoginResponse.builder()
.memberDto(
MemberDto.builder()
.id(1L)
.nickName("test")
.email("[email protected]")
.build()
)
.tokenInfo(TokenDTO.TokenIssueDTO.builder()
.accessToken("c2lsdmVfijhtroiehJ432NwcmluZy1ib290LWp3dC10dXRvcmlhbC1zZWNyZXQtc2lsdmVybmluZS10ZWNoLXNwcmluZy1ib290LWp3dC10dXRvcmlhbC1zZWNyZXQK")
.accessTokenExpiresIn(ACCESS_TOKEN_EXPIRE_TIME)
.grantType(BEARER_TYPE)
.build())
.build();
}

public static Member newBasicMember(){
return Member.builder()
.id(1L)
.ageType(TEENAGER)
.loginType(LoginType.EMAIL)
.nickname("nickNameTest")
.password("$10$ygrAExVYmFTkZn2d0.Pk3Ot5CNZwIBjZH5f.WW0AnUq4w4PtBi9Nm")
.profileImageUrl("naver.com")
.userAuthority(ROLE_USER)
.email("[email protected]")
.survey(new Survey("계획성", "활동성", "숙소", "음식", "여행 스타일"))
.build();
}

public static Member updateMember(){
return Member.builder()
.id(2L)
.ageType(TEENAGER)
.loginType(LoginType.EMAIL)
.genderType(GenderType.DEFAULT)
.nickname("update my nickName")
.password("$10$ygrAExVYmFTkZn2d0.Pk3Ot5CNZwIBjZH5f.WW0AnUq4w4PtBi9Nm")
.profileImageUrl("updateNaver.com")
.userAuthority(ROLE_USER)
.email("[email protected]")
.build();
}
public static Member newMember(){
return signUpRequest().toEntity("$10$ygrAExVYmFTkZn2d0.Pk3Ot5CNZwIBjZH5f.WW0AnUq4w4PtBi9Nm", EMAIL, ROLE_USER);
}

public static RefreshToken refreshToken(){
return RefreshToken.builder()
.member(Member.builder()
.id(1L)
.ageType(TEENAGER)
.loginType(LoginType.EMAIL)
.nickname("test")
.password("$10$ygrAExVYmFTkZn2d0.Pk3Ot5CNZwIBjZH5f.WW0AnUq4w4PtBi9Nm")
.profileImageUrl("naver.com")
.userAuthority(ROLE_USER)
.email("[email protected]")
.build())
.token("c2lsdmVfijhtroiehJ432NwcmluZy1ib290LWp3dC10dXRvcmlhbC1zZWNyZXQtc2lsdmVybmluZS10ZWNoLXNwcmluZy1ib290LWp3dC10dXRvcmlhbC1zZWNyZXQK")
.build();
}

public static MemberUpdateRequest memberUpdateRequest(){
return new MemberUpdateRequest("update my nickName","updateNaver.com",TEENAGER,DEFAULT);
}
}
Loading