Skip to content

Commit

Permalink
[test] 구독에 대한 가짜 리포지토리 및 서비스 테스트 추가 (#47)
Browse files Browse the repository at this point in the history
  • Loading branch information
jinkonu committed Jul 14, 2024
1 parent 03abbbd commit 7657eac
Show file tree
Hide file tree
Showing 3 changed files with 170 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/test/java/org/recordy/server/mock/FakeContainer.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.recordy.server.auth.service.impl.token.AuthTokenParser;
import org.recordy.server.auth.service.impl.token.AuthTokenServiceImpl;
import org.recordy.server.auth.service.impl.token.AuthTokenSigningKeyProvider;
import org.recordy.server.mock.subscribe.FakeSubscribeRepository;
import org.recordy.server.record.service.S3Service;
import org.recordy.server.keyword.repository.KeywordRepository;
import org.recordy.server.keyword.service.KeywordService;
Expand All @@ -34,6 +35,9 @@
import org.recordy.server.record_stat.repository.ViewRepository;
import org.recordy.server.record_stat.service.RecordStatService;
import org.recordy.server.record_stat.service.impl.RecordStatServiceImpl;
import org.recordy.server.subscribe.repository.SubscribeRepository;
import org.recordy.server.subscribe.service.SubscribeService;
import org.recordy.server.subscribe.service.impl.SubscribeServiceImpl;
import org.recordy.server.user.controller.UserController;
import org.recordy.server.user.repository.UserRepository;
import org.recordy.server.user.service.UserService;
Expand All @@ -53,6 +57,7 @@ public class FakeContainer {
public final KeywordRepository keywordRepository;
public final BookmarkRepository bookmarkRepository;
public final ViewRepository viewRepository;
public final SubscribeRepository subscribeRepository;

// infrastructure
public final AuthTokenSigningKeyProvider authTokenSigningKeyProvider;
Expand All @@ -72,6 +77,7 @@ public class FakeContainer {
public final KeywordService keywordService;
public final RecordStatService recordStatService;
public final S3Service s3Service;
public final SubscribeService subscribeService;

// security
public final AuthFilterExceptionHandler authFilterExceptionHandler;
Expand All @@ -87,6 +93,7 @@ public FakeContainer() {
this.keywordRepository = new FakeKeywordRepository();
this.bookmarkRepository = new FakeBookmarkRepository();
this.viewRepository = new FakeViewRepository();
this.subscribeRepository = new FakeSubscribeRepository();

this.authTokenSigningKeyProvider = new AuthTokenSigningKeyProvider(DomainFixture.TOKEN_SECRET);
this.authTokenGenerator = new AuthTokenGenerator(authTokenSigningKeyProvider);
Expand Down Expand Up @@ -115,6 +122,7 @@ public FakeContainer() {
this.recordService = new RecordServiceImpl(recordRepository, viewRepository, fileService, userService);
this.keywordService = new KeywordServiceImpl(keywordRepository);
this.recordStatService = new RecordStatServiceImpl(userRepository, recordRepository, bookmarkRepository);
this.subscribeService = new SubscribeServiceImpl(subscribeRepository, userRepository);

this.s3Service = mock(S3Service.class); // S3Service mock 사용

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package org.recordy.server.mock.subscribe;

import org.recordy.server.subscribe.domain.Subscribe;
import org.recordy.server.subscribe.repository.SubscribeRepository;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.data.domain.SliceImpl;

import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class FakeSubscribeRepository implements SubscribeRepository {

public long subscribeAutoIncrementId = 1L;
private final Map<Long, Subscribe> subscribes = new HashMap<>();

@Override
public void save(Subscribe subscribe) {
Subscribe realSubscribe = Subscribe.builder()
.id(subscribeAutoIncrementId)
.subscribingUser(subscribe.getSubscribingUser())
.subscribedUser(subscribe.getSubscribedUser())
.build();
subscribes.put(subscribeAutoIncrementId++, realSubscribe);
}

@Override
public void delete(long subscribingUserId, long subscribedUserId) {
subscribes.values()
.removeIf(subscribe ->
subscribe.getSubscribingUser().getId() == subscribingUserId &&
subscribe.getSubscribedUser().getId() == subscribedUserId
);
}

@Override
public Slice<Subscribe> findAllBySubscribingUserId(long subscribingUserId, long cursor, Pageable pageable) {
List<Subscribe> content = subscribes.values().stream()
.filter(subscribe ->
subscribe.getSubscribingUser().getId() == subscribingUserId &&
subscribe.getSubscribedUser().getId() < cursor
)
.sorted(Comparator.comparing(Subscribe::getId).reversed())
.toList();

if (content.size() <= pageable.getPageSize()) {
return new SliceImpl<>(content, pageable, false);
}

return new SliceImpl<>(content, pageable, true);
}

@Override
public boolean existsBySubscribingUserIdAndSubscribedUserId(long subscribingUserId, long subscribedUserId) {
return subscribes.values().stream()
.anyMatch(subscribe ->
subscribe.getSubscribingUser().getId() == subscribingUserId &&
subscribe.getSubscribedUser().getId() == subscribedUserId
);
}

@Override
public long countSubscribingUsers(long subscribedUserId) {
return subscribes.values().stream()
.filter(subscribe -> subscribe.getSubscribedUser().getId() == subscribedUserId)
.count();
}

@Override
public long countSubscribedUsers(long subscribingUserId) {
return subscribes.values().stream()
.filter(subscribe -> subscribe.getSubscribingUser().getId() == subscribingUserId)
.count();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package org.recordy.server.subscribe.service;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.recordy.server.mock.FakeContainer;
import org.recordy.server.subscribe.domain.Subscribe;
import org.recordy.server.subscribe.domain.usecase.SubscribeCreate;
import org.recordy.server.subscribe.repository.SubscribeRepository;
import org.recordy.server.user.domain.User;
import org.recordy.server.user.repository.UserRepository;
import org.recordy.server.util.DomainFixture;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Slice;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertAll;

class SubscribeServiceTest {

private SubscribeService subscribeService;
private SubscribeRepository subscribeRepository;
private UserRepository userRepository;

@BeforeEach
void init() {
FakeContainer fakeContainer = new FakeContainer();
subscribeService = fakeContainer.subscribeService;
subscribeRepository = fakeContainer.subscribeRepository;
userRepository = fakeContainer.userRepository;
}

@Test
void subscribe_통해_사용자__구독할__있다() {
// given
userRepository.save(DomainFixture.createUser(1));
userRepository.save(DomainFixture.createUser(2));

// when
subscribeService.subscribe(new SubscribeCreate(1, 2));
Slice<Subscribe> result = subscribeRepository.findAllBySubscribingUserId(1, 20, PageRequest.ofSize(3));

// then
assertAll(
() -> assertThat(result.getContent().size()).isEqualTo(1),
() -> assertThat(result.getContent().get(0).getSubscribedUser().getId()).isEqualTo(2)
);
}

@Test
void unsubscribe_통해_사용자__구독을_취소할__있다() {
// given
userRepository.save(DomainFixture.createUser(1));
userRepository.save(DomainFixture.createUser(2));
subscribeService.subscribe(new SubscribeCreate(1, 2));

// when
subscribeService.unsubscribe(1, 2);

// then
assertAll(
() -> assertThat(subscribeRepository.existsBySubscribingUserIdAndSubscribedUserId(1, 2)).isFalse()
);
}

@Test
void getSubscribedUsers_통해_구독한_사용자를_조회할__있다() {
// given
userRepository.save(DomainFixture.createUser(1));
userRepository.save(DomainFixture.createUser(2));
userRepository.save(DomainFixture.createUser(3));

subscribeService.subscribe(new SubscribeCreate(1, 2));
subscribeService.subscribe(new SubscribeCreate(1, 3));

// when
Slice<User> result = subscribeService.getSubscribedUsers(1, 20, 3);

// then
assertAll(
() -> assertThat(result.getContent().size()).isEqualTo(2),
() -> assertThat(result.getContent().get(0).getId()).isEqualTo(3),
() -> assertThat(result.getContent().get(1).getId()).isEqualTo(2)
);
}
}

0 comments on commit 7657eac

Please sign in to comment.