Skip to content

Commit

Permalink
Merge pull request #91 from KUSITMS-MOAMOA/test/#83
Browse files Browse the repository at this point in the history
[Test/#83] 채팅 테스트 코드 추가
  • Loading branch information
oosedus authored Nov 18, 2024
2 parents 9475741 + abe46f4 commit 8ec1512
Show file tree
Hide file tree
Showing 4 changed files with 512 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package corecord.dev.domain.chat.dto.request;

import jakarta.validation.constraints.NotBlank;
import lombok.Builder;
import lombok.Getter;

public class ChatRequest {

@Getter
@Builder
public static class ChatDto {
private boolean guide;
@NotBlank(message = "채팅을 입력해주세요.")
Expand Down
108 changes: 108 additions & 0 deletions src/test/java/corecord/dev/chat/repository/ChatRepositoryTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
package corecord.dev.chat.repository;

import corecord.dev.domain.chat.entity.Chat;
import corecord.dev.domain.chat.entity.ChatRoom;
import corecord.dev.domain.chat.repository.ChatRepository;
import corecord.dev.domain.chat.repository.ChatRoomRepository;
import corecord.dev.domain.user.entity.User;
import corecord.dev.domain.user.repository.UserRepository;
import jakarta.persistence.EntityManager;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
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.transaction.annotation.Transactional;

import java.util.List;

import static org.junit.jupiter.api.Assertions.*;

@DataJpaTest
@Transactional
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class ChatRepositoryTest {

@Autowired
ChatRepository chatRepository;

@Autowired
ChatRoomRepository chatRoomRepository;

@Autowired
UserRepository userRepository;

@Autowired
EntityManager entityManager;

@Test
@DisplayName("채팅방 ID로 채팅 삭제 테스트")
void deleteByChatRoomId() {
// Given
User user = createTestUser();
ChatRoom chatRoom = createTestChatRoom(user);

createTestChat(chatRoom, "First message");
createTestChat(chatRoom, "Second message");

List<Chat> chatsBeforeDelete = chatRepository.findByChatRoomOrderByChatId(chatRoom);
assertEquals(2, chatsBeforeDelete.size());

// When
chatRepository.deleteByChatRoomId(chatRoom.getChatRoomId());
entityManager.flush();

// Then
List<Chat> chatsAfterDelete = chatRepository.findByChatRoomOrderByChatId(chatRoom);
assertTrue(chatsAfterDelete.isEmpty());
}

@Test
@DisplayName("채팅방에 속한 채팅 조회 테스트")
void findByChatRoomOrderByChatId() {
// Given
User user = createTestUser();
ChatRoom chatRoom = createTestChatRoom(user);

createTestChat(chatRoom, "First message");
createTestChat(chatRoom, "Second message");
createTestChat(chatRoom, "Third message");

// When
List<Chat> chats = chatRepository.findByChatRoomOrderByChatId(chatRoom);

// Then
assertEquals(3, chats.size());
assertEquals("First message", chats.get(0).getContent());
assertEquals("Second message", chats.get(1).getContent());
assertEquals("Third message", chats.get(2).getContent());
}

private User createTestUser() {
// 사용자 저장 시 persist 호출
User user = User.builder()
.providerId("testProvider")
.nickName("TestUser")
.status(corecord.dev.domain.user.entity.Status.UNIVERSITY_STUDENT)
.build();
userRepository.save(user);
return user;
}

private ChatRoom createTestChatRoom(User user) {
ChatRoom chatRoom = ChatRoom.builder()
.user(user)
.build();
chatRoomRepository.save(chatRoom);
return chatRoom;
}

private void createTestChat(ChatRoom chatRoom, String content) {
Chat chat = Chat.builder()
.author(1)
.content(content)
.chatRoom(chatRoom)
.build();
chatRepository.save(chat);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package corecord.dev.chat.repository;

import corecord.dev.domain.chat.entity.ChatRoom;
import corecord.dev.domain.chat.repository.ChatRoomRepository;
import corecord.dev.domain.user.entity.Status;
import corecord.dev.domain.user.entity.User;
import corecord.dev.domain.user.repository.UserRepository;
import jakarta.persistence.EntityManager;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
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.transaction.annotation.Transactional;

import java.util.Optional;

import static org.junit.jupiter.api.Assertions.*;

@DataJpaTest
@Transactional
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class ChatRoomRepositoryTest {

@Autowired
ChatRoomRepository chatRoomRepository;

@Autowired
UserRepository userRepository;

@Autowired
EntityManager entityManager;

@Test
@DisplayName("ChatRoom ID와 User로 채팅방 조회 테스트")
void findByChatRoomIdAndUser() {
// Given
User user = createTestUser();
ChatRoom chatRoom = createTestChatRoom(user);

// When
Optional<ChatRoom> foundChatRoom = chatRoomRepository.findByChatRoomIdAndUser(chatRoom.getChatRoomId(), user);

// Then
assertTrue(foundChatRoom.isPresent());
assertEquals(foundChatRoom.get().getUser(), user);
}

@Test
@DisplayName("존재하지 않는 채팅방 조회 테스트")
void findByChatRoomIdAndUser_NotFound() {
// Given
User user = createTestUser();

// When
Optional<ChatRoom> foundChatRoom = chatRoomRepository.findByChatRoomIdAndUser(999L, user);

// Then
assertFalse(foundChatRoom.isPresent());
}

private User createTestUser() {
User user = User.builder()
.providerId("testProvider")
.nickName("TestUser")
.status(Status.UNIVERSITY_STUDENT)
.build();
return userRepository.save(user);
}

private ChatRoom createTestChatRoom(User user) {
ChatRoom chatRoom = ChatRoom.builder()
.user(user)
.build();
return chatRoomRepository.save(chatRoom);
}
}
Loading

0 comments on commit 8ec1512

Please sign in to comment.