admin: 관리자 등록/수정/삭제 테스트 코드 추가

This commit is contained in:
geonhos 2024-05-14 16:50:14 +09:00
parent 5c319a2ae3
commit bb7a218161
15 changed files with 257 additions and 129 deletions

View File

@ -1,7 +1,8 @@
package com.bpgroup.poc.admin.domain.admin.service;
package com.bpgroup.poc.admin.domain.admin.command;
import com.bpgroup.poc.admin.domain.admin.entity.Administrator;
import jakarta.validation.constraints.NotBlank;
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
@ -21,6 +22,7 @@ public class AdministratorCreateCommand {
@NotBlank
private String name;
@Builder
public static AdministratorCreateCommand of(String loginId, String password, String email, String name) {
AdministratorCreateCommand command = new AdministratorCreateCommand();
command.loginId = loginId;

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.domain.admin.service;
package com.bpgroup.poc.admin.domain.admin.command;
import com.bpgroup.poc.admin.domain.admin.entity.Administrator;
import jakarta.validation.constraints.NotBlank;

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.domain.admin.service;
package com.bpgroup.poc.admin.domain.admin.command;
import com.bpgroup.poc.admin.domain.admin.entity.Role;
import jakarta.validation.constraints.NotBlank;

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.domain.admin.service;
package com.bpgroup.poc.admin.domain.admin.command;
import com.bpgroup.poc.admin.domain.admin.entity.Role;
import jakarta.validation.constraints.NotBlank;

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.domain.admin.service;
package com.bpgroup.poc.admin.domain.admin.exception;
public class DuplicationAdministratorException extends RuntimeException {
public DuplicationAdministratorException(String loginId) {

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.domain.admin.service;
package com.bpgroup.poc.admin.domain.admin.exception;
import com.bpgroup.poc.admin.domain.DomainException;

View File

@ -1,51 +0,0 @@
package com.bpgroup.poc.admin.domain.admin.service;
import com.bpgroup.poc.admin.domain.admin.entity.Administrator;
import com.bpgroup.poc.admin.domain.admin.entity.AdministratorRepository;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import java.util.Optional;
@Service
@RequiredArgsConstructor
@Validated
@Transactional
public class AdministratorService {
private final AdministratorRepository administratorRepository;
public Long create(
@NotNull @Valid AdministratorCreateCommand command
) {
// 대소문자 구별이 필요한 경우 인증 부분과 유효성 검사 부분 모두 변경이 필요하다.
Optional<Administrator> administrator = administratorRepository.findByLoginId(command.getLoginId());
if (administrator.isPresent()) {
throw new DuplicationAdministratorException(command.getLoginId());
}
Administrator createAdministrator = administratorRepository.save(command.toEntity());
return createAdministrator.getId();
}
public void update(
@NotNull @Valid AdministratorUpdateCommand command
) {
Optional<Administrator> administrator = administratorRepository.findById(command.getId());
if (administrator.isEmpty()) {
throw new NotFoundAdministratorException();
}
administrator.get().update(command.toEntity());
}
public void delete(
@NotNull Long id
) {
administratorRepository.deleteById(id);
}
}

View File

@ -7,6 +7,7 @@ import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorUpdat
import jakarta.validation.constraints.NotBlank;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -18,7 +19,8 @@ import java.util.List;
@RequestMapping("/admin/management")
public class AdministratorManagementRestController {
private final AdministratorManagementWebService administratorManagementWebService;
private final PasswordEncoder passwordEncoder;
private final AdministratorManagementService administratorManagementService;
/**
* 전체 조회
@ -26,7 +28,7 @@ public class AdministratorManagementRestController {
*/
@GetMapping("/list")
public ResponseEntity<?> getAdministrators() {
List<AdministratorFind.Response> response = administratorManagementWebService.findAll();
List<AdministratorFind.Response> response = administratorManagementService.findAll();
return ResponseEntity.ok(response);
}
@ -37,7 +39,7 @@ public class AdministratorManagementRestController {
*/
@GetMapping("/{loginId}")
public ResponseEntity<?> getAdministrator(@PathVariable @NotBlank String loginId) {
AdministratorFind.Response response = administratorManagementWebService.find(loginId);
AdministratorFind.Response response = administratorManagementService.find(loginId);
return ResponseEntity.ok(response);
}
@ -52,7 +54,8 @@ public class AdministratorManagementRestController {
@RequestBody @Validated AdministratorCreate.Request request,
BindingResult bindingResult
) {
AdministratorCreate.Response response = administratorManagementWebService.create(request);
request.setPassword(passwordEncoder.encode(request.getPassword()));
AdministratorCreate.Response response = administratorManagementService.create(request);
return ResponseEntity.ok(response);
}
@ -61,8 +64,9 @@ public class AdministratorManagementRestController {
@RequestBody @Validated AdministratorUpdate.Request request,
BindingResult bindingResult
) {
administratorManagementWebService.update(request);
return ResponseEntity.ok().build();
request.setPassword(passwordEncoder.encode(request.getPassword()));
AdministratorUpdate.Response response = administratorManagementService.update(request);
return ResponseEntity.ok(response);
}
/**
@ -76,8 +80,8 @@ public class AdministratorManagementRestController {
@RequestBody @Validated AdministratorDelete.Request request,
BindingResult bindingResult
) {
administratorManagementWebService.delete(request);
return ResponseEntity.ok().build();
AdministratorDelete.Response response = administratorManagementService.delete(request);
return ResponseEntity.ok(response);
}
}

View File

@ -0,0 +1,72 @@
package com.bpgroup.poc.admin.web.main.admin.management;
import com.bpgroup.poc.admin.domain.admin.command.AdministratorCreateCommand;
import com.bpgroup.poc.admin.domain.admin.command.AdministratorUpdateCommand;
import com.bpgroup.poc.admin.domain.admin.entity.Administrator;
import com.bpgroup.poc.admin.domain.admin.entity.AdministratorRepository;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorCreate;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorDelete;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorFind;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorUpdate;
import jakarta.validation.constraints.NotBlank;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Optional;
@Service
@RequiredArgsConstructor
@Transactional
public class AdministratorManagementService {
private final AdministratorManagementQueryRepository queryRepository;
private final AdministratorRepository repository;
public List<AdministratorFind.Response> findAll() {
return queryRepository.findAll();
}
public AdministratorFind.Response find(@NotBlank String loginId) {
return queryRepository.findByLoginId(loginId);
}
public AdministratorCreate.Response create(AdministratorCreate.Request request) {
Administrator admin = repository.save(
AdministratorCreateCommand.builder()
.loginId(request.getLoginId())
.password(request.getPassword())
.email(request.getEmail())
.name(request.getName())
.build()
.toEntity()
);
return AdministratorCreate.Response.success(admin.getId());
}
public AdministratorUpdate.Response update(AdministratorUpdate.Request request) {
Optional<Administrator> findAdministrator = repository.findById(request.getId());
if (findAdministrator.isEmpty()) {
return AdministratorUpdate.Response.fail("ADMINISTRATOR_NOT_FOUND");
}
Administrator administrator = findAdministrator.get();
administrator.update(
AdministratorUpdateCommand.of(
request.getId(),
request.getPassword(),
request.getEmail(),
request.getName()
).toEntity()
);
return AdministratorUpdate.Response.success();
}
public AdministratorDelete.Response delete(AdministratorDelete.Request request) {
repository.deleteById(request.getId());
return AdministratorDelete.Response.success();
}
}

View File

@ -1,61 +0,0 @@
package com.bpgroup.poc.admin.web.main.admin.management;
import com.bpgroup.poc.admin.domain.admin.service.AdministratorCreateCommand;
import com.bpgroup.poc.admin.domain.admin.service.AdministratorService;
import com.bpgroup.poc.admin.domain.admin.service.AdministratorUpdateCommand;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorCreate;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorDelete;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorFind;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorUpdate;
import jakarta.validation.constraints.NotBlank;
import lombok.RequiredArgsConstructor;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@RequiredArgsConstructor
@Transactional
public class AdministratorManagementWebService {
private final PasswordEncoder passwordEncoder;
private final AdministratorService administratorService;
private final AdministratorManagementQueryRepository administratorManagementQueryRepository;
public AdministratorCreate.Response create(AdministratorCreate.Request request) {
Long id = administratorService.create(AdministratorCreateCommand.of(
request.getLoginId(),
passwordEncoder.encode(request.getPassword()),
request.getEmail(),
request.getName()
));
return AdministratorCreate.Response.builder()
.id(id)
.build();
}
public AdministratorFind.Response find(@NotBlank String loginId) {
return administratorManagementQueryRepository.findByLoginId(loginId);
}
public void delete(AdministratorDelete.Request request) {
administratorService.delete(request.getId());
}
public void update(AdministratorUpdate.Request request) {
administratorService.update(AdministratorUpdateCommand.of(
request.getId(),
passwordEncoder.encode(request.getPassword()),
request.getEmail(),
request.getName()
));
}
public List<AdministratorFind.Response> findAll() {
return administratorManagementQueryRepository.findAll();
}
}

View File

@ -1,7 +1,11 @@
package com.bpgroup.poc.admin.web.main.admin.management.reqres;
import com.bpgroup.poc.admin.web.common.CommonResponse;
import jakarta.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.ToString;
public class AdministratorDelete {
@ -11,4 +15,24 @@ public class AdministratorDelete {
private Long id;
}
@Getter
@ToString
public static class Response extends CommonResponse {
@Builder
public static AdministratorDelete.Response success() {
AdministratorDelete.Response response = new AdministratorDelete.Response();
response.resultCode = "0000";
response.resultMessage = "Success";
return response;
}
@Builder
public static AdministratorDelete.Response fail(String resultMessage) {
AdministratorDelete.Response response = new AdministratorDelete.Response();
response.resultCode = "9999";
response.resultMessage = resultMessage;
return response;
}
}
}

View File

@ -1,8 +1,12 @@
package com.bpgroup.poc.admin.web.main.admin.management.reqres;
import com.bpgroup.poc.admin.web.common.CommonResponse;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.ToString;
public class AdministratorUpdate {
@ -24,4 +28,23 @@ public class AdministratorUpdate {
private String name;
}
@Getter
@ToString
public static class Response extends CommonResponse {
@Builder
public static AdministratorUpdate.Response success() {
AdministratorUpdate.Response response = new AdministratorUpdate.Response();
response.resultCode = "0000";
response.resultMessage = "Success";
return response;
}
@Builder
public static AdministratorUpdate.Response fail(String resultMessage) {
AdministratorUpdate.Response response = new AdministratorUpdate.Response();
response.resultCode = "9999";
response.resultMessage = resultMessage;
return response;
}
}
}

View File

@ -2,8 +2,8 @@ package com.bpgroup.poc.admin.web.main.admin.role;
import com.bpgroup.poc.admin.domain.admin.entity.Role;
import com.bpgroup.poc.admin.domain.admin.entity.RoleRepository;
import com.bpgroup.poc.admin.domain.admin.service.RoleCreateCommand;
import com.bpgroup.poc.admin.domain.admin.service.RoleUpdateCommand;
import com.bpgroup.poc.admin.domain.admin.command.RoleCreateCommand;
import com.bpgroup.poc.admin.domain.admin.command.RoleUpdateCommand;
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleCreate;
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleDelete;
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleUpdate;

View File

@ -0,0 +1,115 @@
package com.bpgroup.poc.admin.web.main.admin.administrator;
import com.bpgroup.poc.admin.domain.admin.command.AdministratorCreateCommand;
import com.bpgroup.poc.admin.domain.admin.entity.Administrator;
import com.bpgroup.poc.admin.domain.admin.entity.AdministratorRepository;
import com.bpgroup.poc.admin.env.MariaDBTestEnv;
import com.bpgroup.poc.admin.web.main.admin.management.AdministratorManagementQueryRepository;
import com.bpgroup.poc.admin.web.main.admin.management.AdministratorManagementService;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorCreate;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorDelete;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorUpdate;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import static org.assertj.core.api.Assertions.assertThat;
@Transactional
@DisplayName("AdministratorService 테스트")
public class AdministratorServiceTest extends MariaDBTestEnv {
@Autowired
private AdministratorManagementService service;
@Autowired
private AdministratorRepository repository;
@Autowired
private AdministratorManagementQueryRepository queryRepository;
@BeforeEach
void setUp() {
repository.deleteAll();
}
@DisplayName("Administrator 등록 테스트")
@Test
public void createAdministratorTest() {
// given
AdministratorCreate.Request request = new AdministratorCreate.Request();
request.setLoginId("test");
request.setPassword("test");
request.setEmail("test");
request.setName("test");
// when
AdministratorCreate.Response response = service.create(request);
// then
assertThat(response.getResultCode()).isEqualTo("0000");
}
@DisplayName("Administrator 수정 테스트")
@Test
public void updateAdministratorTest() {
// given
Administrator administrator = repository.save(
AdministratorCreateCommand.builder()
.loginId("test")
.password("test")
.email("test")
.name("test")
.build()
.toEntity()
);
AdministratorUpdate.Request updateRequest = new AdministratorUpdate.Request();
updateRequest.setId(administrator.getId());
updateRequest.setPassword("test2");
updateRequest.setEmail("test2");
updateRequest.setName("test2");
// when
AdministratorUpdate.Response updateResponse = service.update(updateRequest);
// then
assertThat(updateResponse.getResultCode()).isEqualTo("0000");
flushAndClear();
Administrator findAdministrator = repository.findById(administrator.getId()).orElseThrow();
assertThat(findAdministrator.getPassword()).isEqualTo("test2");
assertThat(findAdministrator.getEmail()).isEqualTo("test2");
assertThat(findAdministrator.getName()).isEqualTo("test2");
}
@DisplayName("Administrator 삭제 테스트")
@Test
public void deleteAdministratorTest() {
// given
Administrator administrator = repository.save(
AdministratorCreateCommand.builder()
.loginId("test")
.password("test")
.email("test")
.name("test")
.build()
.toEntity()
);
AdministratorDelete.Request request = new AdministratorDelete.Request();
request.setId(administrator.getId());
// when
AdministratorDelete.Response deleteResponse = service.delete(request);
// then
assertThat(deleteResponse.getResultCode()).isEqualTo("0000");
flushAndClear();
assertThat(repository.findById(administrator.getId())).isEmpty();
}
}

View File

@ -2,7 +2,7 @@ package com.bpgroup.poc.admin.web.main.admin.role;
import com.bpgroup.poc.admin.domain.admin.entity.Role;
import com.bpgroup.poc.admin.domain.admin.entity.RoleRepository;
import com.bpgroup.poc.admin.domain.admin.service.RoleCreateCommand;
import com.bpgroup.poc.admin.domain.admin.command.RoleCreateCommand;
import com.bpgroup.poc.admin.env.MariaDBTestEnv;
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleCreate;
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleDelete;