Skip to content
This repository has been archived by the owner on Aug 13, 2022. It is now read-only.

[#42] Owner 단위테스트 작성 및 코드 리팩토링 #43

Merged
merged 2 commits into from
Dec 4, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,14 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>

</dependencies>

<build>
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/delfood/dto/ShopDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

import java.time.LocalDateTime;
import java.util.List;
import lombok.Builder;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
import lombok.ToString;

@Builder
@Getter
@Setter
@ToString
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.delfood.error.exception;

public class DuplicateException extends RuntimeException{
public DuplicateException(String msg) {
super(msg);
}
}
33 changes: 19 additions & 14 deletions src/main/java/com/delfood/service/OwnerService.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
package com.delfood.service;

import com.delfood.dto.OwnerDTO;
import com.delfood.error.exception.DuplicateException;
import com.delfood.error.exception.DuplicateIdException;
import com.delfood.mapper.OwnerMapper;
import com.delfood.utils.SHA256Util;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.HttpStatusCodeException;


@Service
Expand Down Expand Up @@ -86,8 +84,9 @@ public OwnerDTO getOwner(String id) {
@Transactional(rollbackFor = RuntimeException.class)
public void updateOwnerMailAndTel(String id, String password, String mail, String tel) {
// 정보 변경시 패스워드를 입력받는다. 해당 패스워드가 틀릴 시 정보는 변경되지 않는다.
if (ownerMapper.findByIdAndPassword(id, password) == null) {
throw new IllegalArgumentException("패스워드가 일치하지 않습니다");
if (ownerMapper.findByIdAndPassword(id, SHA256Util.encryptSHA256(password)) == null) {
log.error("password does not match");
throw new IllegalArgumentException("password does not match");
}

int result = ownerMapper.updateMailAndTel(id, mail, tel);
Expand All @@ -101,20 +100,26 @@ public void updateOwnerMailAndTel(String id, String password, String mail, Strin
* 사장 비밀번호 수정.
*
* @param id 아이디
* @param passwordAfterChange 변경할 비밀번호
* @param beforePassword 변경전 비밀번호
* @param afterPassword 변경할 비밀번호
* @return
*/
@Transactional(rollbackFor = RuntimeException.class) // runtimeException이 발생하면 rollback을 수행한다.
public void updateOwnerPassword(String id, String passwordBeforeChange, String passwordAfterChange) {
if (ownerMapper.findByIdAndPassword(id, SHA256Util.encryptSHA256(passwordBeforeChange)) == null) { // 아이디와 비밀번호 불일치
throw new IllegalArgumentException();
} else if (passwordBeforeChange.equals(SHA256Util.encryptSHA256(passwordAfterChange))) { // 이전 패스워드와 동일한 경우
throw new HttpStatusCodeException(HttpStatus.CONFLICT, "변경 전 패스워드와 중복됩니다") {};
public void updateOwnerPassword(String id, String beforePassword, String afterPassword) {

if (ownerMapper.findByIdAndPassword(id, SHA256Util.encryptSHA256(beforePassword))
== null) {
log.error("id and password do not match id : {}, password : {}",id,beforePassword);
throw new IllegalArgumentException("id and password do not match");
} else if (StringUtils.equals(beforePassword, afterPassword)) {
log.error("password duplication before: {}, after : {}",
beforePassword, afterPassword);
throw new DuplicateException("password duplication");
}
String cryptoPassword = SHA256Util.encryptSHA256(passwordAfterChange);
String cryptoPassword = SHA256Util.encryptSHA256(afterPassword);
int result = ownerMapper.updatePassword(id, cryptoPassword);
if (result != 1) {
log.error("updateOwnerPassword ERROR! id : {}, password : {}", id, passwordAfterChange);
log.error("updateOwnerPassword ERROR! id : {}, password : {}", id, afterPassword);
throw new RuntimeException("password update error");
}

Expand Down
200 changes: 181 additions & 19 deletions src/test/java/com/delfood/service/OwnerServiceTest.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
package com.delfood.service;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertThat;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import com.delfood.dto.OwnerDTO;
import com.delfood.error.exception.DuplicateException;
import com.delfood.mapper.OwnerMapper;
import com.delfood.utils.SHA256Util;
import org.junit.Test;
Expand All @@ -26,38 +23,203 @@ public class OwnerServiceTest {
@Mock // mock 생성
OwnerMapper mapper;

/**
* owner 정보 생성.
* @return
*/
public OwnerDTO generateOwner() {
return OwnerDTO.builder()
.id("ljy2134")
.password(SHA256Util.encryptSHA256("2134"))
.name("이진영")
.mail("asdf@naver.com")
.tel("010-3333-3333")
.build();
}

/**
* 회원가입 성공 테스트.
*/
@Test
public void signUp_success() {
OwnerDTO ownerInfo = OwnerDTO.builder()
.id("ljy2134")
.password(SHA256Util.encryptSHA256("2134"))
.name("이진영")
.mail("asdf@naver.com")
.tel("010-3333-3333")
.build();
OwnerDTO ownerInfo = generateOwner();

given(mapper.insertOwner(ownerInfo)).willReturn(1);
given(mapper.idCheck(ownerInfo.getId())).willReturn(0);

service.signUp(ownerInfo);
}

/**
* 회원가입 실패 테스트.
* 회원가입 실패 테스트. (DB insert 실패)
*/
@Test(expected = RuntimeException.class)
public void signUp_fail() {
OwnerDTO ownerInfo = OwnerDTO.builder()
.id("ljy2134")
.password(SHA256Util.encryptSHA256("2134"))
.name("이진영")
.mail("asdf@naver.com")
.tel("010-3333-3333")
.build();
OwnerDTO ownerInfo = generateOwner();

given(mapper.idCheck(ownerInfo.getId())).willReturn(0);
given(mapper.insertOwner(ownerInfo)).willReturn(0);

service.signUp(ownerInfo);
}

/**
* 회원가입 실패 테스트. (아이디 중복 발생)
*/
@Test(expected = RuntimeException.class)
public void signUp_fail2() {
OwnerDTO ownerInfo = generateOwner();

given(mapper.idCheck(ownerInfo.getId())).willReturn(1);

service.signUp(ownerInfo);
}

/**
* 아이디 중복 체크 성공 테스트.
*/
@Test
public void isDuplicatedId_success() {
String duplicatedId = "duplicatedId";
String noDuplicatedId = "noDuplicatedId";
given(mapper.idCheck(duplicatedId)).willReturn(1);
given(mapper.idCheck(noDuplicatedId)).willReturn(0);

assertThat(service.isDuplicatedId(duplicatedId)).isTrue();
assertThat(service.isDuplicatedId(noDuplicatedId)).isFalse();
}

/**
* 사장 정보 조회 성공 테스트.
*/
@Test
public void getOwner_success() {
OwnerDTO ownerInfo = generateOwner();
String id = ownerInfo.getId();
String password = ownerInfo.getPassword();

given(mapper.findByIdAndPassword(id, SHA256Util.encryptSHA256(password)))
.willReturn(ownerInfo);
given(mapper.findById(id)).willReturn(ownerInfo);

assertThat(service.getOwner(id, password)).isEqualTo(ownerInfo);
assertThat(service.getOwner(id)).isEqualTo(ownerInfo);
}

/**
* 사장 이메일, 전화번호 수정 성공 테스트.
*/
@Test
public void updateOwnerMailAndTel_success() {
OwnerDTO ownerInfo = generateOwner();
String id = ownerInfo.getId();
String password = ownerInfo.getPassword();
String mail = ownerInfo.getMail();
String tel = ownerInfo.getTel();

given(mapper.findByIdAndPassword(id, SHA256Util.encryptSHA256(password))).willReturn(ownerInfo);
given(mapper.updateMailAndTel(id, mail, tel)).willReturn(1);

service.updateOwnerMailAndTel(id, password, mail, tel);
}

/**
* 사장 이메일, 전화번호 수정 실패 테스트. (아이디, 패스워드 검증 실패)
*/
@Test(expected = IllegalArgumentException.class)
public void updateOwnerMailAndTel_fail() {
OwnerDTO ownerInfo = generateOwner();
String id = ownerInfo.getId();
String password = ownerInfo.getPassword();
String mail = ownerInfo.getMail();
String tel = ownerInfo.getTel();

given(mapper.findByIdAndPassword(id, SHA256Util.encryptSHA256(password))).willReturn(null);

service.updateOwnerMailAndTel(id, password, mail, tel);
}

/**
* 사장 이메일, 전화번호 수정 실패 테스트. (DB update 실패)
*/
@Test(expected = RuntimeException.class)
public void updateOwnerMailAndTel_fail2() {
OwnerDTO ownerInfo = generateOwner();
String id = ownerInfo.getId();
String password = ownerInfo.getPassword();
String mail = ownerInfo.getMail();
String tel = ownerInfo.getTel();

given(mapper.findByIdAndPassword(id, SHA256Util.encryptSHA256(password))).willReturn(ownerInfo);
given(mapper.updateMailAndTel(id, mail, tel)).willReturn(0);

service.updateOwnerMailAndTel(id, password, mail, tel);
}


/**
* 사장 비밀번호 수정 성공 테스트.
*/
@Test
public void updateOwnerPassword_success() {
OwnerDTO ownerInfo = generateOwner();
String id = ownerInfo.getId();
String beforePassword = ownerInfo.getPassword();
String afterPassword = "asdfasdf";

given(mapper.findByIdAndPassword(id, SHA256Util.encryptSHA256(beforePassword)))
.willReturn(ownerInfo);
given(mapper.updatePassword(id, SHA256Util.encryptSHA256(afterPassword))).willReturn(1);

service.updateOwnerPassword(id, beforePassword, afterPassword);
}

/**
* 사장 비밀번호 수정 실패 테스트. (아이디와 기존 패스워드 매칭 실패)
*/
@Test(expected = IllegalArgumentException.class)
public void updateOwnerPassword_fail() {
OwnerDTO ownerInfo = generateOwner();
String id = ownerInfo.getId();
String beforePassword = "strangePassword";
String afterPassword = "asdfasdf";

given(mapper.findByIdAndPassword(id, SHA256Util.encryptSHA256(beforePassword)))
.willReturn(null);

service.updateOwnerPassword(id, beforePassword, afterPassword);
}

/**
* 사장 비밀번호 수정 실패 테스트. (변경 전 패스워드와 변경 후 패스워드가 일치)
*/
@Test(expected = DuplicateException.class)
public void updateOwnerPassword_fail2() {
OwnerDTO ownerInfo = generateOwner();
String id = ownerInfo.getId();
String beforePassword = ownerInfo.getPassword();
String afterPassword = ownerInfo.getPassword();

given(mapper.findByIdAndPassword(id, SHA256Util.encryptSHA256(beforePassword)))
.willReturn(ownerInfo);

service.updateOwnerPassword(id, beforePassword, afterPassword);
}

/**
* 사장 비밀번호 수정 실패 테스트. (변경 전 패스워드와 변경 후 패스워드가 일치)
*/
@Test(expected = RuntimeException.class)
public void updateOwnerPassword_fail3() {
OwnerDTO ownerInfo = generateOwner();
String id = ownerInfo.getId();
String beforePassword = ownerInfo.getPassword();
String afterPassword = "afterPassword";

given(mapper.findByIdAndPassword(id, SHA256Util.encryptSHA256(beforePassword)))
.willReturn(ownerInfo);
given(mapper.updatePassword(id, SHA256Util.encryptSHA256(afterPassword))).willReturn(0);

service.updateOwnerPassword(id, beforePassword, afterPassword);
}
}
Loading