Modify user to member

This commit is contained in:
MangKyu
2022-02-04 00:16:10 +09:00
parent e8aa8df6af
commit 742f48dbd4
21 changed files with 208 additions and 210 deletions

14
LICENSE
View File

@@ -97,16 +97,16 @@ distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
parties to make or receive copies. Mere interaction with a member through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
An interactive member interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
tells the member that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
the interface presents a list of member commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
@@ -227,7 +227,7 @@ terms of section 4, provided that you also meet all of these conditions:
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
d) If the work has interactive member interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
@@ -299,9 +299,9 @@ tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
product received by a particular member, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
of the particular member or of the way in which the particular member
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent

View File

@@ -1,7 +1,7 @@
package com.mangkyu.employment.interview.app.user.controller;
package com.mangkyu.employment.interview.app.member.controller;
import com.mangkyu.employment.interview.app.user.dto.AddUserRequest;
import com.mangkyu.employment.interview.app.user.service.UserService;
import com.mangkyu.employment.interview.app.member.dto.AddMemberRequest;
import com.mangkyu.employment.interview.app.member.service.MemberService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -13,13 +13,13 @@ import javax.validation.Valid;
@RestController
@RequiredArgsConstructor
public class UserController {
public class MemberController {
private final UserService userService;
private final MemberService memberService;
@PostMapping("/user")
public ResponseEntity<Void> addUser(@RequestBody @Valid final AddUserRequest addUserRequest) {
userService.addUser(addUserRequest);
public ResponseEntity<Void> addUser(@RequestBody @Valid final AddMemberRequest addMemberRequest) {
memberService.addUser(addMemberRequest);
return ResponseEntity.status(HttpStatus.CREATED)
.build();

View File

@@ -1,4 +1,4 @@
package com.mangkyu.employment.interview.app.user.dto;
package com.mangkyu.employment.interview.app.member.dto;
import com.mangkyu.employment.interview.enums.value.QuizCategory;
import com.mangkyu.employment.interview.enums.value.QuizDay;
@@ -22,7 +22,7 @@ import static com.mangkyu.employment.interview.app.quiz.constants.QuizConstants.
@Builder
@RequiredArgsConstructor
@NoArgsConstructor(force = true)
public class AddUserRequest {
public class AddMemberRequest {
private final String resourceId = String.valueOf(UUID.randomUUID());

View File

@@ -1,4 +1,4 @@
package com.mangkyu.employment.interview.app.user.entity;
package com.mangkyu.employment.interview.app.member.entity;
import com.mangkyu.employment.interview.app.common.entity.BaseEntity;
import com.mangkyu.employment.interview.app.solvedquiz.entity.SolvedQuiz;
@@ -18,12 +18,12 @@ import java.util.Set;
import static com.mangkyu.employment.interview.app.quiz.constants.QuizConstants.DEFAULT_QUIZ_SIZE;
@Entity
@Table(name = "user")
@Table(name = "member")
@Getter
@Builder
@NoArgsConstructor(force = true)
@AllArgsConstructor
public class User extends BaseEntity {
public class Member extends BaseEntity {
@Column(nullable = false)
private String resourceId;
@@ -48,7 +48,7 @@ public class User extends BaseEntity {
private Integer quizSize = DEFAULT_QUIZ_SIZE;
@Builder.Default
@OneToMany(mappedBy = "user")
@OneToMany(mappedBy = "member")
private List<SolvedQuiz> solvedQuizList = new ArrayList<>();
}

View File

@@ -0,0 +1,13 @@
package com.mangkyu.employment.interview.app.member.repository;
import com.mangkyu.employment.interview.app.member.entity.Member;
import com.mangkyu.employment.interview.enums.value.QuizDay;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface MemberRepository extends JpaRepository <Member, Long> {
List<Member> findAllByIsEnableTrueAndQuizDaySetIs(final QuizDay QuizDay);
}

View File

@@ -0,0 +1,37 @@
package com.mangkyu.employment.interview.app.member.service;
import com.mangkyu.employment.interview.app.member.dto.AddMemberRequest;
import com.mangkyu.employment.interview.app.member.entity.Member;
import com.mangkyu.employment.interview.app.member.repository.MemberRepository;
import com.mangkyu.employment.interview.enums.value.QuizDay;
import lombok.RequiredArgsConstructor;
import org.modelmapper.ModelMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class MemberService {
private final MemberRepository memberRepository;
private final ModelMapper modelMapper;
@Transactional
public void addUser(final AddMemberRequest addMemberRequest) {
final Member member = modelMapper.map(addMemberRequest, Member.class);
memberRepository.save(member);
}
@Transactional
public void disableUser(final Member member) {
member.setIsEnable(false);
memberRepository.save(member);
}
public List<Member> getEnabledUserList(final QuizDay QuizDay) {
return memberRepository.findAllByIsEnableTrueAndQuizDaySetIs(QuizDay);
}
}

View File

@@ -70,7 +70,7 @@ public class QuizService {
}
public List<Quiz> getUnsolvedQuizList(final Long userId, final QuizLevel quizLevel, final Set<QuizCategory> quizCategorySet) {
final Set<Long> solvedQuizIdList = solvedQuizRepository.findAllByUser_Id(userId)
final Set<Long> solvedQuizIdList = solvedQuizRepository.findAllByMember_Id(userId)
.stream()
.map(v -> v.getQuiz().getId())
.collect(Collectors.toSet());

View File

@@ -1,8 +1,8 @@
package com.mangkyu.employment.interview.app.solvedquiz.entity;
import com.mangkyu.employment.interview.app.common.entity.BaseEntity;
import com.mangkyu.employment.interview.app.member.entity.Member;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.app.user.entity.User;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
@@ -19,8 +19,8 @@ import javax.persistence.*;
public class SolvedQuiz extends BaseEntity {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
@JoinColumn(name = "member_id")
private Member member;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "quiz_id")

View File

@@ -7,6 +7,6 @@ import java.util.List;
public interface SolvedQuizRepository extends JpaRepository <SolvedQuiz, Long> {
List<SolvedQuiz> findAllByUser_Id(Long userId);
List<SolvedQuiz> findAllByMember_Id(Long userId);
}

View File

@@ -1,9 +1,9 @@
package com.mangkyu.employment.interview.app.solvedquiz.service;
import com.mangkyu.employment.interview.app.member.entity.Member;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.app.solvedquiz.entity.SolvedQuiz;
import com.mangkyu.employment.interview.app.solvedquiz.repository.SolvedQuizRepository;
import com.mangkyu.employment.interview.app.user.entity.User;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -20,17 +20,17 @@ public class SolvedQuizService {
private final SolvedQuizRepository solvedQuizRepository;
@Transactional
public void addSolvedQuizList(final User user, final List<Quiz> quizList) {
public void addSolvedQuizList(final Member member, final List<Quiz> quizList) {
final List<SolvedQuiz> solvedQuizList = quizList.stream()
.map(quiz -> createSolvedQuizEntity(user, quiz))
.map(quiz -> createSolvedQuizEntity(member, quiz))
.collect(Collectors.toList());
solvedQuizRepository.saveAll(solvedQuizList);
}
private SolvedQuiz createSolvedQuizEntity(final User user, final Quiz quiz) {
private SolvedQuiz createSolvedQuizEntity(final Member member, final Quiz quiz) {
return SolvedQuiz.builder()
.user(user)
.member(member)
.quiz(quiz).build();
}

View File

@@ -1,13 +0,0 @@
package com.mangkyu.employment.interview.app.user.repository;
import com.mangkyu.employment.interview.app.user.entity.User;
import com.mangkyu.employment.interview.enums.value.QuizDay;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface UserRepository extends JpaRepository <User, Long> {
List<User> findAllByIsEnableTrueAndQuizDaySetIs(final QuizDay QuizDay);
}

View File

@@ -1,37 +0,0 @@
package com.mangkyu.employment.interview.app.user.service;
import com.mangkyu.employment.interview.app.user.dto.AddUserRequest;
import com.mangkyu.employment.interview.app.user.entity.User;
import com.mangkyu.employment.interview.app.user.repository.UserRepository;
import com.mangkyu.employment.interview.enums.value.QuizDay;
import lombok.RequiredArgsConstructor;
import org.modelmapper.ModelMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class UserService {
private final UserRepository userRepository;
private final ModelMapper modelMapper;
@Transactional
public void addUser(final AddUserRequest addUserRequest) {
final User user = modelMapper.map(addUserRequest, User.class);
userRepository.save(user);
}
@Transactional
public void disableUser(final User user) {
user.setIsEnable(false);
userRepository.save(user);
}
public List<User> getEnabledUserList(final QuizDay QuizDay) {
return userRepository.findAllByIsEnableTrueAndQuizDaySetIs(QuizDay);
}
}

View File

@@ -1,11 +1,11 @@
package com.mangkyu.employment.interview.cron;
import com.mangkyu.employment.interview.app.mail.service.MailService;
import com.mangkyu.employment.interview.app.member.entity.Member;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
import com.mangkyu.employment.interview.app.solvedquiz.service.SolvedQuizService;
import com.mangkyu.employment.interview.app.user.entity.User;
import com.mangkyu.employment.interview.app.user.service.UserService;
import com.mangkyu.employment.interview.app.member.service.MemberService;
import com.mangkyu.employment.interview.enums.value.QuizDay;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -22,7 +22,7 @@ import java.util.List;
@Slf4j
public class SendQuizCronJob {
private final UserService userService;
private final MemberService memberService;
private final QuizService quizService;
private final MailService mailService;
private final SolvedQuizService solvedQuizService;
@@ -37,23 +37,23 @@ public class SendQuizCronJob {
@Transactional
public void sendQuizMail() {
final DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
final List<User> userList = userService.getEnabledUserList(QuizDay.findQuizDay(dayOfWeek));
for (final User user : userList) {
sendUnsolvedQuizForUser(user);
final List<Member> memberList = memberService.getEnabledUserList(QuizDay.findQuizDay(dayOfWeek));
for (final Member member : memberList) {
sendUnsolvedQuizForUser(member);
}
}
private void sendUnsolvedQuizForUser(final User user) {
final List<Quiz> unsolvedQuizList = quizService.getUnsolvedQuizList(user.getId(), user.getQuizLevel(), user.getQuizCategorySet());
final boolean isLastMail = isLastMail(unsolvedQuizList, user.getQuizSize());
private void sendUnsolvedQuizForUser(final Member member) {
final List<Quiz> unsolvedQuizList = quizService.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
final boolean isLastMail = isLastMail(unsolvedQuizList, member.getQuizSize());
final List<Quiz> randomQuizList = quizService.getRandomQuizListUnderLimit(unsolvedQuizList, user.getQuizSize());
final List<Quiz> randomQuizList = quizService.getRandomQuizListUnderLimit(unsolvedQuizList, member.getQuizSize());
if (isLastMail) {
userService.disableUser(user);
memberService.disableUser(member);
}
mailService.sendMail(user.getEmail(), randomQuizList, isLastMail);
solvedQuizService.addSolvedQuizList(user, randomQuizList);
mailService.sendMail(member.getEmail(), randomQuizList, isLastMail);
solvedQuizService.addSolvedQuizList(member, randomQuizList);
}
private boolean isLastMail(final List<Quiz> quizList, final Integer quizSize) {

View File

@@ -1,8 +1,8 @@
package com.mangkyu.employment.interview.app.user.controller;
package com.mangkyu.employment.interview.app.member.controller;
import com.google.gson.Gson;
import com.mangkyu.employment.interview.app.user.dto.AddUserRequest;
import com.mangkyu.employment.interview.app.user.service.UserService;
import com.mangkyu.employment.interview.app.member.dto.AddMemberRequest;
import com.mangkyu.employment.interview.app.member.service.MemberService;
import com.mangkyu.employment.interview.enums.value.QuizCategory;
import com.mangkyu.employment.interview.enums.value.QuizDay;
import com.mangkyu.employment.interview.enums.value.QuizLevel;
@@ -20,11 +20,11 @@ import java.util.Set;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@WebMvcTest(UserController.class)
class UserControllerTest {
@WebMvcTest(MemberController.class)
class MemberControllerTest {
@MockBean
private UserService userService;
private MemberService memberService;
@Autowired
private MockMvc mockMvc;
@@ -32,7 +32,7 @@ class UserControllerTest {
@Test
public void addUserFail_EmailIsEmpty() throws Exception {
// given
final AddUserRequest addUserRequest = AddUserRequest.builder()
final AddMemberRequest addMemberRequest = AddMemberRequest.builder()
.email("")
.quizLevel(QuizLevel.JUNIOR)
.build();
@@ -40,7 +40,7 @@ class UserControllerTest {
// when
final ResultActions result = mockMvc.perform(
MockMvcRequestBuilders.post("/user")
.content(new Gson().toJson(addUserRequest))
.content(new Gson().toJson(addMemberRequest))
.contentType(MediaType.APPLICATION_JSON)
);
@@ -51,7 +51,7 @@ class UserControllerTest {
@Test
public void addUserFail_NotEmailFormat() throws Exception {
// given
final AddUserRequest addUserRequest = AddUserRequest.builder()
final AddMemberRequest addMemberRequest = AddMemberRequest.builder()
.email("asdas")
.quizLevel(QuizLevel.JUNIOR)
.build();
@@ -59,7 +59,7 @@ class UserControllerTest {
// when
final ResultActions result = mockMvc.perform(
MockMvcRequestBuilders.post("/user")
.content(new Gson().toJson(addUserRequest))
.content(new Gson().toJson(addMemberRequest))
.contentType(MediaType.APPLICATION_JSON)
);
@@ -70,7 +70,7 @@ class UserControllerTest {
@Test
public void addUserFail_QuizLevelIsNull() throws Exception {
// given
final AddUserRequest addUserRequest = AddUserRequest.builder()
final AddMemberRequest addMemberRequest = AddMemberRequest.builder()
.email("whalsrb1226@gmail.com")
.quizLevel(null)
.build();
@@ -78,7 +78,7 @@ class UserControllerTest {
// when
final ResultActions result = mockMvc.perform(
MockMvcRequestBuilders.post("/user")
.content(new Gson().toJson(addUserRequest))
.content(new Gson().toJson(addMemberRequest))
.contentType(MediaType.APPLICATION_JSON)
);
@@ -90,7 +90,7 @@ class UserControllerTest {
@Test
public void addUserFail_QuizDaySetIsEmpty() throws Exception {
// given
final AddUserRequest addUserRequest = AddUserRequest.builder()
final AddMemberRequest addMemberRequest = AddMemberRequest.builder()
.email("whalsrb1226@gmail.com")
.quizLevel(QuizLevel.NEW)
.build();
@@ -98,7 +98,7 @@ class UserControllerTest {
// when
final ResultActions result = mockMvc.perform(
MockMvcRequestBuilders.post("/user")
.content(new Gson().toJson(addUserRequest))
.content(new Gson().toJson(addMemberRequest))
.contentType(MediaType.APPLICATION_JSON)
);
@@ -115,7 +115,7 @@ class UserControllerTest {
quizDaySet.add(QuizDay.WEDNESDAY);
quizDaySet.add(QuizDay.FRIDAY);
final AddUserRequest addUserRequest = AddUserRequest.builder()
final AddMemberRequest addMemberRequest = AddMemberRequest.builder()
.email("whalsrb1226@gmail.com")
.quizLevel(QuizLevel.JUNIOR)
.quizDaySet(quizDaySet)
@@ -124,7 +124,7 @@ class UserControllerTest {
// when
final ResultActions result = mockMvc.perform(
MockMvcRequestBuilders.post("/user")
.content(new Gson().toJson(addUserRequest))
.content(new Gson().toJson(addMemberRequest))
.contentType(MediaType.APPLICATION_JSON)
);
@@ -145,7 +145,7 @@ class UserControllerTest {
quizCategorySet.add(QuizCategory.DATABASE);
quizCategorySet.add(QuizCategory.EXPERIENCE);
final AddUserRequest addUserRequest = AddUserRequest.builder()
final AddMemberRequest addMemberRequest = AddMemberRequest.builder()
.email("whalsrb1226@gmail.com")
.quizLevel(QuizLevel.JUNIOR)
.quizDaySet(quizDaySet)
@@ -155,7 +155,7 @@ class UserControllerTest {
// when
final ResultActions result = mockMvc.perform(
MockMvcRequestBuilders.post("/user")
.content(new Gson().toJson(addUserRequest))
.content(new Gson().toJson(addMemberRequest))
.contentType(MediaType.APPLICATION_JSON)
);

View File

@@ -1,7 +1,7 @@
package com.mangkyu.employment.interview.app.user.repository;
package com.mangkyu.employment.interview.app.member.repository;
import com.mangkyu.employment.interview.JpaTestConfig;
import com.mangkyu.employment.interview.app.user.entity.User;
import com.mangkyu.employment.interview.app.member.entity.Member;
import com.mangkyu.employment.interview.enums.value.QuizCategory;
import com.mangkyu.employment.interview.enums.value.QuizDay;
import com.mangkyu.employment.interview.testutils.EntityCreationUtils;
@@ -15,13 +15,13 @@ import java.util.Set;
import static org.assertj.core.api.Assertions.assertThat;
@JpaTestConfig
class UserRepositoryTest {
class MemberRepositoryTest {
@Autowired
private UserRepository userRepository;
private MemberRepository memberRepository;
@Test
public void selectUserListByCycle() {
public void selectMemberListByCycle() {
// given
final Set<QuizDay> quizDaySet = new HashSet<>();
quizDaySet.add(QuizDay.MONDAY);
@@ -33,14 +33,14 @@ class UserRepositoryTest {
quizCategorySet.add(QuizCategory.DATABASE);
quizCategorySet.add(QuizCategory.EXPERIENCE);
final User user = EntityCreationUtils.user(5, quizDaySet, quizCategorySet);
final Member member = EntityCreationUtils.member(5, quizDaySet, quizCategorySet);
final User savedUser = userRepository.save(user);
userRepository.save(savedUser);
final Member savedMember = memberRepository.save(member);
memberRepository.save(savedMember);
// when
final List<User> dailyResult = userRepository.findAllByIsEnableTrueAndQuizDaySetIs(QuizDay.MONDAY);
final List<User> regularResult = userRepository.findAllByIsEnableTrueAndQuizDaySetIs(QuizDay.THURSDAY);
final List<Member> dailyResult = memberRepository.findAllByIsEnableTrueAndQuizDaySetIs(QuizDay.MONDAY);
final List<Member> regularResult = memberRepository.findAllByIsEnableTrueAndQuizDaySetIs(QuizDay.THURSDAY);
// then
assertThat(dailyResult.size()).isOne();
@@ -48,7 +48,7 @@ class UserRepositoryTest {
}
@Test
public void insertUser() {
public void insertMember() {
// given
final Set<QuizDay> quizDaySet = new HashSet<>();
quizDaySet.add(QuizDay.MONDAY);
@@ -60,19 +60,19 @@ class UserRepositoryTest {
quizCategorySet.add(QuizCategory.DATABASE);
quizCategorySet.add(QuizCategory.EXPERIENCE);
final User user = EntityCreationUtils.user(5, quizDaySet, quizCategorySet);
final Member member = EntityCreationUtils.member(5, quizDaySet, quizCategorySet);
// when
final User result = userRepository.save(user);
final Member result = memberRepository.save(member);
// then
assertThat(result.getEmail()).isEqualTo(user.getEmail());
assertThat(result.getQuizLevel()).isEqualTo(user.getQuizLevel());
assertThat(result.getQuizSize()).isEqualTo(user.getQuizSize());
assertThat(result.getEmail()).isEqualTo(member.getEmail());
assertThat(result.getQuizLevel()).isEqualTo(member.getQuizLevel());
assertThat(result.getQuizSize()).isEqualTo(member.getQuizSize());
}
@Test
public void updateUserDisabled() {
public void updateMemberDisabled() {
// given
final Set<QuizDay> quizDaySet = new HashSet<>();
quizDaySet.add(QuizDay.MONDAY);
@@ -84,14 +84,14 @@ class UserRepositoryTest {
quizCategorySet.add(QuizCategory.DATABASE);
quizCategorySet.add(QuizCategory.EXPERIENCE);
final User user = EntityCreationUtils.user(3, quizDaySet, quizCategorySet);
final Member member = EntityCreationUtils.member(3, quizDaySet, quizCategorySet);
final User savedUser = userRepository.save(user);
savedUser.setIsEnable(false);
userRepository.save(savedUser);
final Member savedMember = memberRepository.save(member);
savedMember.setIsEnable(false);
memberRepository.save(savedMember);
// when
final List<User> result = userRepository.findAllByIsEnableTrueAndQuizDaySetIs(QuizDay.MONDAY);
final List<Member> result = memberRepository.findAllByIsEnableTrueAndQuizDaySetIs(QuizDay.MONDAY);
// then
assertThat(result.size()).isZero();

View File

@@ -1,12 +1,11 @@
package com.mangkyu.employment.interview.app.user.service;
package com.mangkyu.employment.interview.app.member.service;
import com.mangkyu.employment.interview.app.user.dto.AddUserRequest;
import com.mangkyu.employment.interview.app.user.entity.User;
import com.mangkyu.employment.interview.app.user.repository.UserRepository;
import com.mangkyu.employment.interview.app.member.dto.AddMemberRequest;
import com.mangkyu.employment.interview.app.member.entity.Member;
import com.mangkyu.employment.interview.app.member.repository.MemberRepository;
import com.mangkyu.employment.interview.config.modelmapper.ModelMapperConfig;
import com.mangkyu.employment.interview.enums.value.QuizDay;
import com.mangkyu.employment.interview.enums.value.QuizLevel;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
@@ -14,7 +13,6 @@ import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.jupiter.MockitoExtension;
import org.modelmapper.ModelMapper;
import org.modelmapper.config.Configuration;
import java.util.Arrays;
import java.util.HashSet;
@@ -25,13 +23,13 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
class MemberServiceTest {
@InjectMocks
private UserService target;
private MemberService target;
@Mock
private UserRepository userRepository;
private MemberRepository memberRepository;
@Spy
private ModelMapper modelMapper = new ModelMapperConfig().modelMapper();
@@ -45,14 +43,14 @@ class UserServiceTest {
quizDaySet.add(QuizDay.WEDNESDAY);
quizDaySet.add(QuizDay.SATURDAY);
final AddUserRequest addUserRequest = AddUserRequest.builder()
final AddMemberRequest addMemberRequest = AddMemberRequest.builder()
.email("whalsrb1226@gmail.com")
.quizLevel(QuizLevel.JUNIOR)
.quizDaySet(quizDaySet)
.build();
// when
target.addUser(addUserRequest);
target.addUser(addMemberRequest);
// then
}
@@ -60,40 +58,40 @@ class UserServiceTest {
@Test
public void disableUserSuccess() {
// given
final User user = user(true);
final Member member = user(true);
// when
target.disableUser(user);
target.disableUser(member);
// then
// verify
verify(userRepository, times(1)).save(user);
verify(memberRepository, times(1)).save(member);
}
@Test
public void getEnabledUserListSuccess() {
// given
final List<User> enabledUserList = Arrays.asList(user(true), user(true));
doReturn(enabledUserList).when(userRepository).findAllByIsEnableTrueAndQuizDaySetIs(quizDay);
final List<Member> enabledMemberList = Arrays.asList(user(true), user(true));
doReturn(enabledMemberList).when(memberRepository).findAllByIsEnableTrueAndQuizDaySetIs(quizDay);
// when
final List<User> result = target.getEnabledUserList(quizDay);
final List<Member> result = target.getEnabledUserList(quizDay);
// then
assertThat(result.size()).isEqualTo(enabledUserList.size());
assertThat(result.size()).isEqualTo(enabledMemberList.size());
// verify
verify(userRepository, times(1)).findAllByIsEnableTrueAndQuizDaySetIs(quizDay);
verify(memberRepository, times(1)).findAllByIsEnableTrueAndQuizDaySetIs(quizDay);
}
private User user(final boolean isEnable) {
final User user = User.builder()
private Member user(final boolean isEnable) {
final Member member = Member.builder()
.email("minkyu@test.com")
.quizLevel(QuizLevel.JUNIOR)
.build();
user.setIsEnable(isEnable);
return user;
member.setIsEnable(isEnable);
return member;
}

View File

@@ -202,7 +202,7 @@ class QuizServiceTest {
quizCategorySet.add(QuizCategory.DATABASE);
quizCategorySet.add(QuizCategory.EXPERIENCE);
doReturn(solvedQuizList).when(solvedQuizRepository).findAllByUser_Id(userId);
doReturn(solvedQuizList).when(solvedQuizRepository).findAllByMember_Id(userId);
doReturn(unsolvedQuizList).when(quizRepository).customFindByIdNotInAndQuizCategoryInAndQuizLevel(solvedQuizIdList, quizCategorySet, quizLevel);
// when
@@ -223,7 +223,7 @@ class QuizServiceTest {
quizCategorySet.add(QuizCategory.DATABASE);
quizCategorySet.add(QuizCategory.EXPERIENCE);
doReturn(solvedQuizList).when(solvedQuizRepository).findAllByUser_Id(userId);
doReturn(solvedQuizList).when(solvedQuizRepository).findAllByMember_Id(userId);
doReturn(unsolvedQuizList).when(quizRepository).customFindByIdNotInAndQuizCategoryInAndQuizLevel(Collections.emptySet(), quizCategorySet, quizLevel);
// when

View File

@@ -4,8 +4,8 @@ import com.mangkyu.employment.interview.JpaTestConfig;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.app.quiz.repository.QuizRepository;
import com.mangkyu.employment.interview.app.solvedquiz.entity.SolvedQuiz;
import com.mangkyu.employment.interview.app.user.entity.User;
import com.mangkyu.employment.interview.app.user.repository.UserRepository;
import com.mangkyu.employment.interview.app.member.entity.Member;
import com.mangkyu.employment.interview.app.member.repository.MemberRepository;
import com.mangkyu.employment.interview.testutils.EntityCreationUtils;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -22,25 +22,25 @@ class SolvedQuizRepositoryTest {
private QuizRepository quizRepository;
@Autowired
private UserRepository userRepository;
private MemberRepository memberRepository;
@Test
public void insertQuiz() {
// given
final User user = EntityCreationUtils.user();
final Member member = EntityCreationUtils.member();
final Quiz quiz = EntityCreationUtils.quiz();
final Quiz quizResult = quizRepository.save(quiz);
final User userResult = userRepository.save(user);
final Member memberResult = memberRepository.save(member);
final SolvedQuiz solvedQuiz = EntityCreationUtils.solvedQuiz(quiz, user);
final SolvedQuiz solvedQuiz = EntityCreationUtils.solvedQuiz(quiz, member);
// when
final SolvedQuiz result = solvedQuizRepository.save(solvedQuiz);
// then
assertThat(result.getQuiz()).isEqualTo(quizResult);
assertThat(result.getUser()).isEqualTo(userResult);
assertThat(result.getMember()).isEqualTo(memberResult);
}
}

View File

@@ -1,10 +1,10 @@
package com.mangkyu.employment.interview.app.solvedquiz.service;
import com.mangkyu.employment.interview.app.member.entity.Member;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.enums.value.QuizCategory;
import com.mangkyu.employment.interview.enums.value.QuizLevel;
import com.mangkyu.employment.interview.app.solvedquiz.repository.SolvedQuizRepository;
import com.mangkyu.employment.interview.app.user.entity.User;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
@@ -27,19 +27,19 @@ class SolvedQuizServiceTest {
@Test
public void addSolvedQuizListSuccess() {
// given
final User user = user();
final Member member = user();
final List<Quiz> quizList = quizList();
// when
target.addSolvedQuizList(user, quizList);
target.addSolvedQuizList(member, quizList);
// then
// verify
}
private User user() {
return User.builder()
private Member user() {
return Member.builder()
.email("minkyu@test.com")
.quizLevel(QuizLevel.JUNIOR)
.build();

View File

@@ -1,11 +1,11 @@
package com.mangkyu.employment.interview.cron;
import com.mangkyu.employment.interview.app.mail.service.MailService;
import com.mangkyu.employment.interview.app.member.entity.Member;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
import com.mangkyu.employment.interview.app.solvedquiz.service.SolvedQuizService;
import com.mangkyu.employment.interview.app.user.entity.User;
import com.mangkyu.employment.interview.app.user.service.UserService;
import com.mangkyu.employment.interview.app.member.service.MemberService;
import com.mangkyu.employment.interview.enums.value.QuizDay;
import com.mangkyu.employment.interview.enums.value.QuizLevel;
import org.junit.jupiter.api.BeforeEach;
@@ -29,7 +29,7 @@ class SendQuizCronJobTest {
private SendQuizCronJob target;
@Mock
private UserService userService;
private MemberService memberService;
@Mock
private QuizService quizService;
@Mock
@@ -37,19 +37,19 @@ class SendQuizCronJobTest {
@Mock
private SolvedQuizService solvedQuizService;
private User user;
private List<User> userList;
private Member member;
private List<Member> memberList;
private QuizDay quizDay;
@BeforeEach
public void init() {
user = User.builder()
member = Member.builder()
.email("minkyu@test.com")
.quizLevel(QuizLevel.JUNIOR)
.quizSize(3)
.build();
userList = Collections.singletonList(user);
memberList = Collections.singletonList(member);
quizDay = QuizDay.findQuizDay(LocalDate.now().getDayOfWeek());
}
@@ -57,7 +57,7 @@ class SendQuizCronJobTest {
public void sendQuizMailDaily_UserNotExists() {
// given
doReturn(Collections.emptyList())
.when(userService)
.when(memberService)
.getEnabledUserList(quizDay);
// when
@@ -66,11 +66,11 @@ class SendQuizCronJobTest {
// then
// verify
verify(quizService, times(0)).getUnsolvedQuizList(user.getId(), user.getQuizLevel(), user.getQuizCategorySet());
verify(quizService, times(0)).getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
verify(quizService, times(0)).getRandomQuizListUnderLimit(anyList(), anyInt());
verify(userService, times(0)).disableUser(user);
verify(memberService, times(0)).disableUser(member);
verify(mailService, times(0)).sendMail(anyString(), anyList(), anyBoolean());
verify(solvedQuizService, times(0)).addSolvedQuizList(any(User.class), anyList());
verify(solvedQuizService, times(0)).addSolvedQuizList(any(Member.class), anyList());
}
@Test
@@ -79,15 +79,15 @@ class SendQuizCronJobTest {
final List<Quiz> unsolvedQuizList = quizList(5);
final List<Quiz> randomQuizList = unsolvedQuizList.subList(0, 3);
doReturn(userList)
.when(userService)
doReturn(memberList)
.when(memberService)
.getEnabledUserList(quizDay);
doReturn(unsolvedQuizList)
.when(quizService)
.getUnsolvedQuizList(user.getId(), user.getQuizLevel(), user.getQuizCategorySet());
.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
doReturn(randomQuizList)
.when(quizService)
.getRandomQuizListUnderLimit(unsolvedQuizList, user.getQuizSize());
.getRandomQuizListUnderLimit(unsolvedQuizList, member.getQuizSize());
// when
target.sendQuizMail();
@@ -95,11 +95,11 @@ class SendQuizCronJobTest {
// then
// verify
verify(quizService, times(1)).getUnsolvedQuizList(user.getId(), user.getQuizLevel(), user.getQuizCategorySet());
verify(quizService, times(1)).getRandomQuizListUnderLimit(unsolvedQuizList, user.getQuizSize());
verify(userService, times(0)).disableUser(user);
verify(mailService, times(1)).sendMail(user.getEmail(), randomQuizList, false);
verify(solvedQuizService, times(1)).addSolvedQuizList(user, randomQuizList);
verify(quizService, times(1)).getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
verify(quizService, times(1)).getRandomQuizListUnderLimit(unsolvedQuizList, member.getQuizSize());
verify(memberService, times(0)).disableUser(member);
verify(mailService, times(1)).sendMail(member.getEmail(), randomQuizList, false);
verify(solvedQuizService, times(1)).addSolvedQuizList(member, randomQuizList);
}
@Test
@@ -108,15 +108,15 @@ class SendQuizCronJobTest {
final List<Quiz> unsolvedQuizList = quizList(3);
final List<Quiz> randomQuizList = unsolvedQuizList.subList(0, 3);
doReturn(userList)
.when(userService)
doReturn(memberList)
.when(memberService)
.getEnabledUserList(quizDay);
doReturn(unsolvedQuizList)
.when(quizService)
.getUnsolvedQuizList(user.getId(), user.getQuizLevel(), user.getQuizCategorySet());
.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
doReturn(randomQuizList)
.when(quizService)
.getRandomQuizListUnderLimit(unsolvedQuizList, user.getQuizSize());
.getRandomQuizListUnderLimit(unsolvedQuizList, member.getQuizSize());
// when
target.sendQuizMail();
@@ -124,11 +124,11 @@ class SendQuizCronJobTest {
// then
// verify
verify(quizService, times(1)).getUnsolvedQuizList(user.getId(), user.getQuizLevel(), user.getQuizCategorySet());
verify(quizService, times(1)).getRandomQuizListUnderLimit(unsolvedQuizList, user.getQuizSize());
verify(userService, times(1)).disableUser(user);
verify(mailService, times(1)).sendMail(user.getEmail(), randomQuizList, true);
verify(solvedQuizService, times(1)).addSolvedQuizList(user, randomQuizList);
verify(quizService, times(1)).getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
verify(quizService, times(1)).getRandomQuizListUnderLimit(unsolvedQuizList, member.getQuizSize());
verify(memberService, times(1)).disableUser(member);
verify(mailService, times(1)).sendMail(member.getEmail(), randomQuizList, true);
verify(solvedQuizService, times(1)).addSolvedQuizList(member, randomQuizList);
}
private List<Quiz> quizList(final int size) {

View File

@@ -3,7 +3,7 @@ package com.mangkyu.employment.interview.testutils;
import com.mangkyu.employment.interview.app.answer.entity.Answer;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.app.solvedquiz.entity.SolvedQuiz;
import com.mangkyu.employment.interview.app.user.entity.User;
import com.mangkyu.employment.interview.app.member.entity.Member;
import com.mangkyu.employment.interview.enums.value.QuizCategory;
import com.mangkyu.employment.interview.enums.value.QuizDay;
import com.mangkyu.employment.interview.enums.value.QuizLevel;
@@ -38,20 +38,20 @@ public final class EntityCreationUtils {
return quiz;
}
public static User user() {
final User user = User.builder()
public static Member member() {
final Member member = Member.builder()
.resourceId(UUID.randomUUID().toString())
.email("minkyu@test.com")
.quizLevel(QuizLevel.JUNIOR)
.solvedQuizList(Collections.emptyList())
.build();
ReflectionTestUtils.setField(user, "createdAt", LocalDateTime.now());
ReflectionTestUtils.setField(member, "createdAt", LocalDateTime.now());
return user;
return member;
}
public static User user(final int quizSize, final Set<QuizDay> daySet, final Set<QuizCategory> categorySet) {
final User user = User.builder()
public static Member member(final int quizSize, final Set<QuizDay> daySet, final Set<QuizCategory> categorySet) {
final Member member = Member.builder()
.resourceId( UUID.randomUUID().toString())
.email("minkyu@test.com")
.quizLevel(QuizLevel.JUNIOR)
@@ -60,15 +60,15 @@ public final class EntityCreationUtils {
.quizDaySet(daySet)
.quizCategorySet(categorySet)
.build();
ReflectionTestUtils.setField(user, "createdAt", LocalDateTime.now());
ReflectionTestUtils.setField(member, "createdAt", LocalDateTime.now());
return user;
return member;
}
public static SolvedQuiz solvedQuiz(final Quiz quiz, final User user) {
public static SolvedQuiz solvedQuiz(final Quiz quiz, final Member member) {
return SolvedQuiz.builder()
.quiz(quiz)
.user(user)
.member(member)
.build();
}