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

Commit

Permalink
Merge pull request #43 from f-lab-edu/feature/19
Browse files Browse the repository at this point in the history
#42 #30 feature/19
  • Loading branch information
binaryyoung committed Dec 4, 2019
2 parents 518aa07 + dea9db1 commit dfd9740
Show file tree
Hide file tree
Showing 6 changed files with 329 additions and 33 deletions.
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

0 comments on commit dfd9740

Please sign in to comment.