Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

좋아요 기능 구현 및 테스트 구현 #73

Merged
merged 10 commits into from
Jun 19, 2024
Prev Previous commit
Next Next commit
test : GroupRoleChecker Test 구현
bandalgomsu committed Jun 11, 2024
commit 70b413773841ebe8a8455f15faa676cb841ff222
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@ public void isMember(GroupExhibit group, User user) {
}

public void isNotMember(GroupExhibit group, User user) {
if (group.checkMember(user) && group.checkManager(user)) {
if (group.checkMember(user) || group.checkManager(user)) {
throw new UserAccessDeniedException();
}
}
360 changes: 196 additions & 164 deletions src/test/java/service/group/GroupExhibitServiceTest.java
Original file line number Diff line number Diff line change
@@ -1,164 +1,196 @@
//package service.group;
//
//import static org.mockito.ArgumentMatchers.any;
//import static org.mockito.ArgumentMatchers.anyLong;
//import static org.mockito.BDDMockito.given;
//import static org.mockito.Mockito.verify;
//
//import com.example.jolvre.exhibition.entity.Exhibit;
//import com.example.jolvre.exhibition.service.ExhibitService;
//import com.example.jolvre.group.GroupRoleChecker;
//import com.example.jolvre.group.dto.GroupExhibitDTO.GroupExhibitCreateRequest;
//import com.example.jolvre.group.dto.GroupExhibitDTO.GroupExhibitInfoResponse;
//import com.example.jolvre.group.dto.GroupExhibitDTO.GroupExhibitInfoResponses;
//import com.example.jolvre.group.dto.GroupExhibitDTO.GroupExhibitUserResponses;
//import com.example.jolvre.group.entity.GroupExhibit;
//import com.example.jolvre.group.entity.Member;
//import com.example.jolvre.group.repository.GroupExhibitRepository;
//import com.example.jolvre.group.repository.MemberRepository;
//import com.example.jolvre.group.service.GroupExhibitService;
//import com.example.jolvre.user.entity.User;
//import com.example.jolvre.user.service.UserService;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Optional;
//import org.junit.jupiter.api.Assertions;
//import org.junit.jupiter.api.DisplayName;
//import org.junit.jupiter.api.Test;
//import org.junit.jupiter.api.extension.ExtendWith;
//import org.mockito.InjectMocks;
//import org.mockito.Mock;
//import org.mockito.junit.jupiter.MockitoExtension;
//
//@ExtendWith(MockitoExtension.class)
//public class GroupExhibitServiceTest {
// @Mock
// GroupExhibitRepository groupExhibitRepository;
// @Mock
// ManagerRepository managerRepository;
// @Mock
// MemberRepository memberRepository;
// @Mock
// UserService userService;
// @Mock
// ExhibitService exhibitService;
// @Mock
// GroupRoleChecker checker;
//
// @InjectMocks
// GroupExhibitService groupExhibitService;
//
// @Test
// @DisplayName("Create Group Exhibit")
// void createGroupExhibit() {
// GroupExhibitCreateRequest request = GroupExhibitCreateRequest.builder()
// .name("test")
// .build();
//
// groupExhibitService.createGroupExhibit(0L, request);
//
// verify(groupExhibitRepository).save(any());
// }
//
// @Test
// @DisplayName("Get All Group Exhibit")
// void getAllGroupExhibit() {
// GroupExhibit test1 = GroupExhibit.builder().name("test1").build();
// GroupExhibit test2 = GroupExhibit.builder().name("test2").build();
// GroupExhibit test3 = GroupExhibit.builder().name("test3").build();
//
// List<GroupExhibit> groupExhibits = new ArrayList<>();
// groupExhibits.add(test1);
// groupExhibits.add(test2);
// groupExhibits.add(test3);
//
// given(groupExhibitRepository.findAll()).willReturn(groupExhibits);
//
// GroupExhibitInfoResponses responses = groupExhibitService.getAllGroupExhibitInfo();
//
// GroupExhibitInfoResponse group = responses.getGroupExhibitResponses().get(0);
//
// Assertions.assertEquals(test1.getName(), group.getName());
// }
//
// @Test
// @DisplayName("Get Group Exhibit")
// void getGroupExhibit() {
// GroupExhibit test = GroupExhibit.builder().name("test").build();
//
// given(groupExhibitRepository.findById(any())).willReturn(Optional.of(test));
//
// GroupExhibitInfoResponse response = groupExhibitService.getGroupExhibitInfo(0L);
//
// Assertions.assertEquals(test.getName(), response.getName());
// }
//
// @Test
// @DisplayName("Get All USer Group Exhibit")
// void getAllUserGroupExhibit() {
// GroupExhibit test = GroupExhibit.builder().name("test").build();
// Member member = Member.builder().groupExhibit(test).build();
// List<Member> members = new ArrayList<>();
// members.add(member);
//
// given(memberRepository.findAllByUserId(anyLong())).willReturn(members);
//
// GroupExhibitInfoResponses responses = groupExhibitService.getAllUserGroupExhibitInfo(0L);
// String name = responses.getGroupExhibitResponses().get(0).getName();
//
// Assertions.assertEquals(test.getName(), name);
// }
//
// @Test
// @DisplayName("Get Group Exhibit Users")
// void getGroupExhibitUsers() {
//
// Member member1 = Member.builder().user(User.builder().name("test1").build()).build();
// Member member2 = Member.builder().user(User.builder().name("test2").build()).build();
// Manager manager = Manager.builder().user(User.builder().name("test3").build()).build();
//
// GroupExhibit test = GroupExhibit.builder().name("test").build();
// test.addMember(member1);
// test.addMember(member2);
// test.addManger(manager);
//
// given(groupExhibitRepository.findById(any())).willReturn(Optional.of(test));
//
// GroupExhibitUserResponses responses = groupExhibitService.getGroupExhibitUsers(0L, 0L);
// String username = responses.getGroupExhibitUserResponses().get(0).getUserInfoResponse().getName();
//
// Assertions.assertEquals("test3", username);
// }
//
// @Test
// @DisplayName("Add Exhibit")
// void addExhibit() {
// GroupExhibit test = GroupExhibit.builder().name("test").build();
// Exhibit exhibit = Exhibit.builder().build();
// User user = User.builder().build();
//
// given(groupExhibitRepository.findById(anyLong())).willReturn(Optional.of(test));
// given(exhibitService.getExhibitById(anyLong())).willReturn(exhibit);
// given(userService.getUserById(anyLong())).willReturn(user);
//
// groupExhibitService.addExhibit(0L, 0L, 0L);
//
// verify(groupExhibitRepository).save(any());
// }
//
// @Test
// @DisplayName("Add Manager")
// void addManager() {
// User fromUser = User.builder().name("from").build();
// User toUser = User.builder().name("to").build();
// GroupExhibit test = GroupExhibit.builder().name("test").build();
//
// given(userService.getUserById(0L)).willReturn(fromUser);
// given(userService.getUserById(1L)).willReturn(toUser);
// given(groupExhibitRepository.findById(anyLong())).willReturn(Optional.of(test));
//
// groupExhibitService.addManager(0L, 1L, 0L);
//
// verify(groupExhibitRepository).save(any());
// }
//}
package service.group;

import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.willThrow;
import static org.mockito.Mockito.verify;

import com.example.jolvre.common.error.user.UserAccessDeniedException;
import com.example.jolvre.common.service.S3Service;
import com.example.jolvre.exhibition.entity.Exhibit;
import com.example.jolvre.exhibition.service.ExhibitService;
import com.example.jolvre.group.GroupRoleChecker;
import com.example.jolvre.group.dto.GroupExhibitDTO.GroupExhibitUserResponses;
import com.example.jolvre.group.dto.GroupExhibitDTO.GroupInvitationResponse;
import com.example.jolvre.group.entity.GroupExhibit;
import com.example.jolvre.group.entity.GroupRole;
import com.example.jolvre.group.entity.Member;
import com.example.jolvre.group.repository.GroupExhibitRepository;
import com.example.jolvre.group.repository.MemberRepository;
import com.example.jolvre.group.repository.RegisteredExhibitRepository;
import com.example.jolvre.group.service.GroupExhibitService;
import com.example.jolvre.user.entity.User;
import com.example.jolvre.user.service.UserService;
import java.util.Optional;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
public class GroupExhibitServiceTest {
@Mock
GroupExhibitRepository groupExhibitRepository;
@Mock
MemberRepository memberRepository;
@Mock
RegisteredExhibitRepository registeredExhibitRepository;
@Mock
UserService userService;
@Mock
ExhibitService exhibitService;
@Mock
GroupRoleChecker checker;
@Mock
S3Service s3Service;

@InjectMocks
GroupExhibitService groupExhibitService;

@DisplayName("Add Exhibit Test")
@Test
void addExhibitTest() {
User test = User.builder().build();

Member manager = Member.builder().user(test).groupRole(GroupRole.MEMBER).build();

Exhibit exhibit = Exhibit.builder()
.title("test")
.user(test)
.build();

GroupExhibit group = GroupExhibit.builder()
.build();
group.addMember(manager);

given(userService.getUserById(0L)).willReturn(test);
given(exhibitService.getExhibitById(0L)).willReturn(exhibit);
given(groupExhibitRepository.findById(0L)).willReturn(Optional.of(group));

groupExhibitService.addExhibit(0L, 0L, 0L);

verify(groupExhibitRepository).save(group);
}

@DisplayName("Add Manager Test")
@Test
void addManagerTest() {
User from = User.builder().build();
User to = User.builder().build();

GroupExhibit group = GroupExhibit.builder().build();

Member manager = Member.builder()
.user(from)
.groupRole(GroupRole.MANAGER)
.build();

Member member = Member.builder()
.user(to)
.groupRole(GroupRole.MEMBER)
.build();

group.addMember(manager);
group.addMember(member);

given(userService.getUserById(0L)).willReturn(from);
given(userService.getUserById(1L)).willReturn(to);
given(groupExhibitRepository.findById(0L)).willReturn(Optional.of(group));
given(memberRepository.findByUserIdAndGroupExhibitId(1L, 0L)).willReturn(Optional.of(member));

groupExhibitService.addManager(0L, 1L, 0L);

verify(groupExhibitRepository).save(group);
}

@DisplayName("Add Manager Exception Test (Access Denied) (From User is not Manager)")
@Test
void addManagerExceptionFromIsNotManagerTest() {
User from = User.builder().build();
User to = User.builder().build();

GroupExhibit group = GroupExhibit.builder().build();

Member manager = Member.builder()
.user(from)
.groupRole(GroupRole.MEMBER) // 초대하는 사람은 매니저여야 함
.build();

Member member = Member.builder()
.user(to)
.groupRole(GroupRole.MEMBER)
.build();

group.addMember(manager);
group.addMember(member);

given(userService.getUserById(0L)).willReturn(from);
given(userService.getUserById(1L)).willReturn(to);
given(groupExhibitRepository.findById(0L)).willReturn(Optional.of(group));

willThrow(new UserAccessDeniedException()).given(checker).isManager(group, from);

Assertions.assertThrows(UserAccessDeniedException.class,
() -> groupExhibitService.addManager(0L, 1L, 0L));
}

@DisplayName("Add Manager Exception Test (Access Denied) (To User is not Member)")
@Test
void addManagerExceptionToIsNotMemberTest() {
User from = User.builder().build();
User to = User.builder().build(); // to 가 멤버여야함

GroupExhibit group = GroupExhibit.builder().build();

Member manager = Member.builder()
.user(from)
.groupRole(GroupRole.MANAGER) // 초대하는 사람은 매니저여야 함
.build();

group.addMember(manager);

given(userService.getUserById(0L)).willReturn(from);
given(userService.getUserById(1L)).willReturn(to);
given(groupExhibitRepository.findById(0L)).willReturn(Optional.of(group));

willThrow(new UserAccessDeniedException()).given(checker).isMember(group, to);

Assertions.assertThrows(UserAccessDeniedException.class,
() -> groupExhibitService.addManager(0L, 1L, 0L));
}

@DisplayName("Get Group Exhibit Users Test")
@Test
void getGroupExhibitUsersTest() {
User user = User.builder().name("test").build();
Member member = Member.builder().user(user).groupRole(GroupRole.MEMBER).build();

GroupExhibit group = GroupExhibit.builder().build();
group.addMember(member);

given(groupExhibitRepository.findById(0L)).willReturn(Optional.of(group));
given(userService.getUserById(0L)).willReturn(user);

GroupExhibitUserResponses responses = groupExhibitService.getGroupExhibitUsers(0L, 0L);

responses.getGroupExhibitUserResponses().forEach(
groupMember -> Assertions.assertEquals("test", groupMember.getUserInfoResponse().getName())
);
}

@DisplayName("Create Invitation Test")
@Test
void createInvitationTest() {
GroupExhibit group = GroupExhibit.builder()
.name("test")
.build();

given(groupExhibitRepository.findById(0L)).willReturn(Optional.of(group));

GroupInvitationResponse response = groupExhibitService.createInvitation(0L);

Assertions.assertEquals("test", response.getName());
}
}
Loading