-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #460 from depromeet/test/459-following-memory-log-โฆ
โฆdomain test: ํ๋ก์ฐ ์์ ๋๋ฉ์ธ ํ ์คํธ ์ฝ๋ ์์ฑ
- Loading branch information
Showing
17 changed files
with
369 additions
and
91 deletions.
There are no files selected for viewing
81 changes: 81 additions & 0 deletions
81
...omain/src/test/java/com/depromeet/mock/followinglog/FakeFollowingMemoryLogRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
package com.depromeet.mock.followinglog; | ||
|
||
import com.depromeet.fixture.domain.friend.FriendFixture; | ||
import com.depromeet.followinglog.domain.FollowingMemoryLog; | ||
import com.depromeet.followinglog.port.out.persistence.FollowingMemoryLogPersistencePort; | ||
import com.depromeet.friend.domain.Friend; | ||
import com.depromeet.member.domain.Member; | ||
import java.time.LocalDateTime; | ||
import java.util.ArrayList; | ||
import java.util.List; | ||
|
||
public class FakeFollowingMemoryLogRepository implements FollowingMemoryLogPersistencePort { | ||
private Long followingMemoryLogAutoGeneratedId = 1L; | ||
private Long friendAutoGeneratedId = 1L; | ||
private List<FollowingMemoryLog> followingMemoryLogs = new ArrayList<>(); | ||
private List<Friend> friends = new ArrayList<>(); | ||
|
||
@Override | ||
public Long save(FollowingMemoryLog followingMemoryLog) { | ||
if (followingMemoryLog.getId() == null || followingMemoryLog.getId().equals(0L)) { | ||
FollowingMemoryLog newFollowingMemoryLog = | ||
FollowingMemoryLog.builder() | ||
.id(followingMemoryLogAutoGeneratedId++) | ||
.memory(followingMemoryLog.getMemory()) | ||
.createdAt(LocalDateTime.now()) | ||
.build(); | ||
followingMemoryLogs.add(newFollowingMemoryLog); | ||
return newFollowingMemoryLog.getId(); | ||
} else { | ||
followingMemoryLogs.removeIf(item -> item.getId().equals(followingMemoryLog.getId())); | ||
followingMemoryLogs.add(followingMemoryLog); | ||
return followingMemoryLog.getId(); | ||
} | ||
} | ||
|
||
@Override | ||
public List<FollowingMemoryLog> findLogsByMemberIdAndCursorId(Long memberId, Long cursorId) { | ||
List<Long> friendFollowingIds = | ||
friends.stream() | ||
.filter(item -> item.getMember().getId().equals(memberId)) | ||
.map(item -> item.getFollowing().getId()) | ||
.toList(); | ||
|
||
List<FollowingMemoryLog> result = | ||
followingMemoryLogs.stream() | ||
.filter( | ||
item -> | ||
friendFollowingIds.contains( | ||
item.getMemory().getMember().getId())) | ||
.filter(item -> cursorIdLt(cursorId, item)) | ||
.sorted((o1, o2) -> (int) (o2.getId() - o1.getId())) | ||
.toList(); | ||
return result.subList(0, Math.min(result.size(), 11)); | ||
} | ||
|
||
private boolean cursorIdLt(Long cursorId, FollowingMemoryLog followingMemoryLog) { | ||
if (cursorId == null) return true; | ||
return followingMemoryLog.getId() < cursorId; | ||
} | ||
|
||
@Override | ||
public void deleteAllByMemoryIds(List<Long> memoryIds) { | ||
followingMemoryLogs.removeIf(item -> memoryIds.contains(item.getMemory().getId())); | ||
} | ||
|
||
@Override | ||
public void deleteAllByMemoryId(Long memoryId) { | ||
followingMemoryLogs.removeIf(item -> item.getMemory().getId().equals(memoryId)); | ||
} | ||
|
||
public List<FollowingMemoryLog> getFollowingMemoryLogs() { | ||
return this.followingMemoryLogs; | ||
} | ||
|
||
public void saveFriends(Member member, List<Member> followings) { | ||
for (Member following : followings) { | ||
Friend friend = FriendFixture.makeFriends(friendAutoGeneratedId++, member, following); | ||
friends.add(friend); | ||
} | ||
} | ||
} |
164 changes: 164 additions & 0 deletions
164
...omain/src/test/java/com/depromeet/service/followinglog/FollowingMemoryLogServiceTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,164 @@ | ||
package com.depromeet.service.followinglog; | ||
|
||
import static org.assertj.core.api.Assertions.assertThat; | ||
|
||
import com.depromeet.fixture.domain.member.MemberFixture; | ||
import com.depromeet.fixture.domain.memory.MemoryFixture; | ||
import com.depromeet.followinglog.domain.FollowingMemoryLog; | ||
import com.depromeet.followinglog.domain.vo.FollowingLogSlice; | ||
import com.depromeet.followinglog.port.in.command.CreateFollowingMemoryCommand; | ||
import com.depromeet.followinglog.service.FollowingMemoryLogService; | ||
import com.depromeet.member.domain.Member; | ||
import com.depromeet.memory.domain.Memory; | ||
import com.depromeet.mock.followinglog.FakeFollowingMemoryLogRepository; | ||
import java.time.LocalDate; | ||
import java.util.ArrayList; | ||
import java.util.Comparator; | ||
import java.util.List; | ||
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.Test; | ||
|
||
class FollowingMemoryLogServiceTest { | ||
private FakeFollowingMemoryLogRepository followingMemoryLogRepository; | ||
private FollowingMemoryLogService followingMemoryLogService; | ||
|
||
private Long memberId = 1L; | ||
|
||
@BeforeEach | ||
void init() { | ||
followingMemoryLogRepository = new FakeFollowingMemoryLogRepository(); | ||
followingMemoryLogService = new FollowingMemoryLogService(followingMemoryLogRepository); | ||
} | ||
|
||
@Test | ||
void ํ๋ก์_์์_์ถ๊ฐ() { | ||
// given | ||
Member member = MemberFixture.make(1L); | ||
Memory memory = MemoryFixture.make(1L, member, LocalDate.now()); | ||
|
||
// when | ||
followingMemoryLogService.save(new CreateFollowingMemoryCommand(memory)); | ||
|
||
// then | ||
List<FollowingMemoryLog> followingMemoryLogs = | ||
followingMemoryLogRepository.getFollowingMemoryLogs(); | ||
assertThat(followingMemoryLogs).isNotEmpty(); | ||
} | ||
|
||
@Test | ||
void ํ๋ก์_์์_cursorId_์์ด_์กฐํ() { | ||
// given | ||
saveFollowingMemoryLogs(); | ||
|
||
// when | ||
FollowingLogSlice followingLogSlice = | ||
followingMemoryLogService.findLogsByMemberIdAndCursorId(memberId, null); | ||
|
||
// then | ||
List<FollowingMemoryLog> result = followingLogSlice.getContents(); | ||
List<Long> followingMemoryLogIds = | ||
result.stream().mapToLong(FollowingMemoryLog::getId).boxed().toList(); | ||
|
||
assertThat(result.size()).isEqualTo(10); | ||
assertThat(followingMemoryLogIds).isSortedAccordingTo(Comparator.reverseOrder()); | ||
assertThat(followingLogSlice.isHasNext()).isTrue(); | ||
assertThat(followingLogSlice.getCursorId()).isEqualTo(10L); | ||
} | ||
|
||
@Test | ||
void ํ๋ก์_์์_cursorId_์ถ๊ฐํด์_์กฐํ() { | ||
// given | ||
saveFollowingMemoryLogs(); | ||
|
||
// when | ||
FollowingLogSlice followingLogSlice = | ||
followingMemoryLogService.findLogsByMemberIdAndCursorId(memberId, 10L); | ||
|
||
// then | ||
List<FollowingMemoryLog> result = followingLogSlice.getContents(); | ||
List<Long> followingMemoryLogIds = | ||
result.stream().mapToLong(FollowingMemoryLog::getId).boxed().toList(); | ||
|
||
assertThat(result.size()).isEqualTo(9); | ||
assertThat(followingMemoryLogIds).isSortedAccordingTo(Comparator.reverseOrder()); | ||
assertThat(followingLogSlice.isHasNext()).isFalse(); | ||
assertThat(followingLogSlice.getCursorId()).isEqualTo(null); | ||
} | ||
|
||
private void saveFollowingMemoryLogs() { | ||
Member member = MemberFixture.make(memberId); | ||
List<Member> members = getMembers(); | ||
|
||
List<Memory> memories = getMemories(members); | ||
followingMemoryLogRepository.saveFriends(member, members); | ||
|
||
for (Memory m : memories) { | ||
followingMemoryLogService.save(new CreateFollowingMemoryCommand(m)); | ||
} | ||
} | ||
|
||
private List<Member> getMembers() { | ||
List<Member> members = new ArrayList<>(); | ||
long followingMemberId = 2L; | ||
for (int i = 0; i < 19; i++) { | ||
Member followings = MemberFixture.make(followingMemberId++); | ||
members.add(followings); | ||
} | ||
return members; | ||
} | ||
|
||
private List<Memory> getMemories(List<Member> members) { | ||
long memoryId = 1L; | ||
List<Memory> memories = new ArrayList<>(); | ||
for (Member m : members) { | ||
Memory followingsMemory = MemoryFixture.make(memoryId++, m, LocalDate.now()); | ||
memories.add(followingsMemory); | ||
} | ||
return memories; | ||
} | ||
|
||
@Test | ||
void memoryIds๋ก_ํ๋ก์_์์_์ญ์ () { | ||
// given | ||
Member member = MemberFixture.make(memberId); | ||
List<Member> members = getMembers(); | ||
|
||
List<Memory> memories = getMemories(members); | ||
followingMemoryLogRepository.saveFriends(member, members); | ||
|
||
for (Memory m : memories) { | ||
followingMemoryLogService.save(new CreateFollowingMemoryCommand(m)); | ||
} | ||
|
||
// when | ||
List<Long> deleteMemoryIds = | ||
memories.stream() | ||
.mapToLong(Memory::getId) | ||
.boxed() | ||
.filter(id -> id % 2 == 0) | ||
.toList(); | ||
followingMemoryLogService.deleteAllByMemoryIds(deleteMemoryIds); | ||
|
||
// then | ||
int remainFollowingMemoryLogCount = memories.size() - deleteMemoryIds.size(); | ||
List<FollowingMemoryLog> followingMemoryLogs = | ||
followingMemoryLogRepository.getFollowingMemoryLogs(); | ||
assertThat(followingMemoryLogs.size()).isEqualTo(remainFollowingMemoryLogCount); | ||
} | ||
|
||
@Test | ||
void memoryId๋ก_ํ๋ก์_์์_์ญ์ () { | ||
// given | ||
saveFollowingMemoryLogs(); | ||
|
||
// when | ||
int beforeDeleteFollowingMemoryLogCount = | ||
followingMemoryLogRepository.getFollowingMemoryLogs().size(); | ||
followingMemoryLogService.deleteAllByMemoryId(1L); | ||
|
||
// then | ||
List<FollowingMemoryLog> followingMemoryLogs = | ||
followingMemoryLogRepository.getFollowingMemoryLogs(); | ||
assertThat(followingMemoryLogs.size()).isEqualTo(beforeDeleteFollowingMemoryLogCount - 1); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.