From ec2dcde61df3e0662740104d7a384cfdf84771e3 Mon Sep 17 00:00:00 2001 From: ddingmin Date: Fri, 29 Dec 2023 03:23:54 +0900 Subject: [PATCH] =?UTF-8?q?test:=20MeetingFixture=EB=A5=BC=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=ED=95=98=EA=B3=A0,=20MeetingRepository=EB=A5=BC=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../meeting/domain/MeetingFixture.java | 70 +++++++++++++++++++ .../meeting/domain/MeetingRepositoryTest.java | 67 ++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 src/test/java/net/teumteum/meeting/domain/MeetingFixture.java create mode 100644 src/test/java/net/teumteum/meeting/domain/MeetingRepositoryTest.java 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)); + } + } + +}