Skip to content

Commit

Permalink
Merge pull request #253 from Yanabada/feature/214
Browse files Browse the repository at this point in the history
채팅 도메인 테스트 코드 작성 및 테스트 코드 유틸리티 클래스 구현
  • Loading branch information
Programmer-may authored Jan 31, 2024
2 parents b0dfee0 + bb21aaf commit d11a2a5
Show file tree
Hide file tree
Showing 9 changed files with 519 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ public class ChatController {

@MessageMapping("/message")
public void message(ReceivedChatMessage message) {
System.out.println("컨트롤러message = " + message);
messagingTemplate.convertAndSend(
chatroomTopicPrefix + message.chatRoomCode(),
chatService.saveChatMessage(message)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@
import java.util.Optional;
import kr.co.fastcampus.yanabada.common.exception.ChatRoomNotFoundException;
import kr.co.fastcampus.yanabada.domain.chat.entity.ChatRoom;
import kr.co.fastcampus.yanabada.domain.member.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface ChatRoomRepository extends JpaRepository<ChatRoom, Long> {

Optional<ChatRoom> findByProductIdAndSellerIdAndBuyerId(
Long productId, Long sellerId, Long buyerId
Optional<ChatRoom> findByProductIdAndSellerAndBuyer(
Long productId, Member seller, Member buyer
);

@Query("SELECT cr FROM ChatRoom cr "
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,10 @@ public class ChatService {
public ChatRoomInfoResponse getOrSaveChatRoom(ChatRoomSaveRequest request) {
Product product = productRepository.getProduct(request.productId());
checkNegotiationPossibility(product);
Long sellerId = product.getOrder().getMember().getId();
Long buyerId = request.buyerId();
checkIfOwnProduct(sellerId, buyerId);
return getChatRoomInfoResponse(request, product, sellerId, buyerId);
Member seller = memberRepository.getMember(product.getOrder().getMember().getId());
Member buyer = memberRepository.getMember(request.buyerId());
checkIfOwnProduct(seller, buyer);
return getChatRoomInfoResponse(request, product, seller, buyer);
}

private void checkNegotiationPossibility(Product product) {
Expand All @@ -65,23 +65,21 @@ private void checkNegotiationPossibility(Product product) {
}
}

private void checkIfOwnProduct(Long sellerId, Long buyerId) {
if (Objects.equals(sellerId, buyerId)) {
private void checkIfOwnProduct(Member seller, Member buyer) {
if (Objects.equals(seller, buyer)) {
throw new CannotNegotiateOwnProductException();
}
}

private ChatRoomInfoResponse getChatRoomInfoResponse(
ChatRoomSaveRequest request, Product product, Long sellerId, Long buyerId
ChatRoomSaveRequest request, Product product, Member seller, Member buyer
) {
Optional<ChatRoom> foundChatRoom = chatRoomRepository.findByProductIdAndSellerIdAndBuyerId(
product.getId(), sellerId, buyerId
Optional<ChatRoom> foundChatRoom = chatRoomRepository.findByProductIdAndSellerAndBuyer(
product.getId(), seller, buyer
);
if (foundChatRoom.isPresent()) {
return ChatRoomInfoResponse.from(foundChatRoom.get());
} else {
Member seller = memberRepository.getMember(sellerId);
Member buyer = memberRepository.getMember(buyerId);
LocalDateTime now = LocalDateTime.now();
ChatRoom chatRoom = chatRoomRepository.save(
request.toEntity(product, seller, buyer, now, now)
Expand Down
65 changes: 65 additions & 0 deletions src/test/java/kr/co/fastcampus/yanabada/common/utils/ApiTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package kr.co.fastcampus.yanabada.common.utils;

import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createAccommodation;
import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createAccommodationOption;
import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createBuyer;
import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createOrder;
import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createProduct;
import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createRoom;
import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createRoomOption;
import static kr.co.fastcampus.yanabada.common.utils.TestUtils.createSeller;

import kr.co.fastcampus.yanabada.domain.accommodation.entity.Accommodation;
import kr.co.fastcampus.yanabada.domain.accommodation.entity.Room;
import kr.co.fastcampus.yanabada.domain.accommodation.repository.AccommodationOptionRepository;
import kr.co.fastcampus.yanabada.domain.accommodation.repository.AccommodationRepository;
import kr.co.fastcampus.yanabada.domain.accommodation.repository.RoomOptionRepository;
import kr.co.fastcampus.yanabada.domain.accommodation.repository.RoomRepository;
import kr.co.fastcampus.yanabada.domain.member.entity.Member;
import kr.co.fastcampus.yanabada.domain.member.repository.MemberRepository;
import kr.co.fastcampus.yanabada.domain.order.entity.Order;
import kr.co.fastcampus.yanabada.domain.order.repository.OrderRepository;
import kr.co.fastcampus.yanabada.domain.product.repository.ProductRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@ExtendWith(DatabaseClearExtension.class)
@SpringBootTest
public abstract class ApiTest {

@Autowired
private MemberRepository memberRepository;

@Autowired
private AccommodationRepository accommodationRepository;

@Autowired
private AccommodationOptionRepository accommodationOptionRepository;

@Autowired
private RoomRepository roomRepository;

@Autowired
private RoomOptionRepository roomOptionRepository;

@Autowired
private OrderRepository orderRepository;

@Autowired
private ProductRepository productRepository;

@BeforeEach
void setup() {
Accommodation accommodation = accommodationRepository.save(createAccommodation());
accommodationOptionRepository.save(createAccommodationOption(accommodation));
Room room = roomRepository.save(createRoom(accommodation));
roomOptionRepository.save(createRoomOption(room));
Member seller = memberRepository.save(createSeller());
memberRepository.save(createBuyer());
Order order = orderRepository.save(createOrder(room, seller));
productRepository.save(createProduct(order));

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package kr.co.fastcampus.yanabada.common.utils;

import jakarta.annotation.PostConstruct;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

@Component
public class DatabaseCleaner {

private final List<String> tableNames = new ArrayList<>();

@PersistenceContext
private EntityManager entityManager;

@SuppressWarnings("unchecked")
@PostConstruct
private void findDatabaseTableNames() {
List<Object[]> tableInfos = entityManager.createNativeQuery("SHOW TABLES").getResultList();
for (Object[] tableInfo : tableInfos) {
String tableName = (String) tableInfo[0];
tableNames.add(tableName);
}
}

private void truncate() {
entityManager.createNativeQuery(String.format("SET FOREIGN_KEY_CHECKS %d", 0))
.executeUpdate();
for (String tableName : tableNames) {
entityManager.createNativeQuery(String.format("TRUNCATE TABLE %s", tableName))
.executeUpdate();
}
entityManager.createNativeQuery(String.format("SET FOREIGN_KEY_CHECKS %d", 1))
.executeUpdate();
}

@Transactional
public void clear() {
entityManager.clear();
truncate();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package kr.co.fastcampus.yanabada.common.utils;

import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.springframework.test.context.junit.jupiter.SpringExtension;

public class DatabaseClearExtension implements BeforeEachCallback {

@Override
public void beforeEach(ExtensionContext context) {
DatabaseCleaner databaseCleaner = getDataCleaner(context);
databaseCleaner.clear();
}

private DatabaseCleaner getDataCleaner(ExtensionContext extensionContext) {
return SpringExtension.getApplicationContext(extensionContext)
.getBean(DatabaseCleaner.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -103,11 +103,23 @@ public static Order createOrder(Room room, Member member) {
);
}

public static Member createMember() {
public static Member createSeller() {
return Member.builder()
.email("test@test.com")
.nickName("testNickname")
.password("1234")
.email("seller@test.com")
.nickName("sellerNickname")
.password("password123!")
.phoneNumber("010-1234-1234")
.roleType(ROLE_USER)
.image("a.jpg")
.providerType(EMAIL)
.build();
}

public static Member createBuyer() {
return Member.builder()
.email("buyer@test.com")
.nickName("buyerNickname")
.password("password123")
.phoneNumber("010-1234-1234")
.roleType(ROLE_USER)
.image("a.jpg")
Expand Down
Loading

0 comments on commit d11a2a5

Please sign in to comment.