diff --git a/src/test/java/net/teumteum/meeting/domain/MeetingFixture.java b/src/test/java/net/teumteum/meeting/domain/MeetingFixture.java new file mode 100644 index 00000000..8526c225 --- /dev/null +++ b/src/test/java/net/teumteum/meeting/domain/MeetingFixture.java @@ -0,0 +1,70 @@ +package net.teumteum.meeting.domain; + +import lombok.Builder; + +import java.time.LocalDate; +import java.time.LocalTime; +import java.util.ArrayList; +import java.util.List; + +public class MeetingFixture { + + public static Meeting getMeetingWithId(Long id) { + return newMeetingByBuilder(MeetingBuilder.builder() + .id(id) + .build()); + } + + public static Meeting getDefaultMeeting() { + return newMeetingByBuilder(MeetingBuilder.builder().build()); + } + + public static Meeting newMeetingByBuilder(MeetingBuilder meetingBuilder) { + return new Meeting( + meetingBuilder.id, + meetingBuilder.title, + meetingBuilder.hostUserId, + meetingBuilder.participantUserIds, + meetingBuilder.topic, + meetingBuilder.introduction, + meetingBuilder.meetingArea, + meetingBuilder.numberOfRecruits, + meetingBuilder.promiseDateTime, + meetingBuilder.imageUrls + ); + } + + @Builder + public static class MeetingBuilder { + @Builder.Default + private Long id = 0L; + + @Builder.Default + private String title = "모임 제목"; + + @Builder.Default + private Long hostUserId = 0L; + + @Builder.Default + private List participantUserIds = new ArrayList<>(List.of(0L)); + + @Builder.Default + private Topic topic = Topic.스터디; + + @Builder.Default + private String introduction = "모임에 대한 간단한 설명입니다."; + + @Builder.Default + private MeetingArea meetingArea = new MeetingArea("서울특별시", "강남구", "강남대로 390"); + + @Builder.Default + private int numberOfRecruits = 3; + + @Builder.Default + private PromiseDateTime promiseDateTime = new PromiseDateTime(LocalDate.of(2023, 1, 1), LocalTime.of(12, 0)); + + @Builder.Default + private List imageUrls = new ArrayList<>(List.of("https://www.google.com")); + } + +} diff --git a/src/test/java/net/teumteum/meeting/domain/MeetingRepositoryTest.java b/src/test/java/net/teumteum/meeting/domain/MeetingRepositoryTest.java new file mode 100644 index 00000000..0e3e8096 --- /dev/null +++ b/src/test/java/net/teumteum/meeting/domain/MeetingRepositoryTest.java @@ -0,0 +1,67 @@ +package net.teumteum.meeting.domain; + +import jakarta.persistence.EntityManager; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; + +import java.util.Optional; + +@DataJpaTest +@DisplayName("MeetingRepository 클래스의") +class MeetingRepositoryTest { + + @Autowired + private MeetingRepository meetingRepository; + + @Autowired + private EntityManager entityManager; + + @Nested + @DisplayName("save 메소드는") + class Save_method { + + @Test + @DisplayName("올바른 MeetingEntity가 들어오면, 모임 저장에 성공한다.") + void Save_success_if_correct_meeting_entered() { + // given + var newMeeting = MeetingFixture.getDefaultMeeting(); + + // when + var result = Assertions.catchException(() -> meetingRepository.saveAndFlush(newMeeting)); + + // then + Assertions.assertThat(result).isNull(); + } + } + + @Nested + @DisplayName("findById 메소드는") + class FindById_method { + + @Test + @DisplayName("저장된 모임의 id로 조회하면, 모임을 반환한다.") + void Find_success_if_exists_meeting_id_input() { + // given + var id = 1L; + var existsMeeting = MeetingFixture.getMeetingWithId(id); + + meetingRepository.saveAndFlush(existsMeeting); + entityManager.clear(); + + // when + var result = meetingRepository.findById(id); + + // then + Assertions.assertThat(result) + .isPresent() + .usingRecursiveComparison() + .ignoringFields("value.createdAt", "value.updatedAt") + .isEqualTo(Optional.of(existsMeeting)); + } + } + +}