spring core : 할인정책 변경(OCP, DIP 위반)
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
package com.example.basic.discount;
|
||||
|
||||
import com.example.basic.member.Grade;
|
||||
import com.example.basic.member.Member;
|
||||
|
||||
public class RateDiscountPolicy implements DiscountPolicy {
|
||||
|
||||
private final int discountPercent = 10;
|
||||
|
||||
@Override
|
||||
public int discount(Member member, int price) {
|
||||
if (member.getGrade() == Grade.VIP) {
|
||||
return price * discountPercent / 100;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package com.example.basic.order;
|
||||
|
||||
import com.example.basic.discount.DiscountPolicy;
|
||||
import com.example.basic.discount.FixDiscountPolicy;
|
||||
import com.example.basic.discount.RateDiscountPolicy;
|
||||
import com.example.basic.member.Member;
|
||||
import com.example.basic.member.MemberRepository;
|
||||
import com.example.basic.member.MemoryMemberRepository;
|
||||
@@ -9,7 +10,8 @@ import com.example.basic.member.MemoryMemberRepository;
|
||||
public class OrderServiceImpl implements OrderService {
|
||||
|
||||
private final MemberRepository memberRepository = new MemoryMemberRepository();
|
||||
private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
|
||||
// private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
|
||||
private final DiscountPolicy discountPolicy = new RateDiscountPolicy();
|
||||
|
||||
@Override
|
||||
public Order createOrder(Long memberId, String itemName, int itemPrice) {
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.example.basic.discount;
|
||||
|
||||
import com.example.basic.member.Grade;
|
||||
import com.example.basic.member.Member;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class RateDiscountPolicyTest {
|
||||
|
||||
RateDiscountPolicy discountPolicy = new RateDiscountPolicy();
|
||||
|
||||
@Test
|
||||
@DisplayName("VIP는 10% 할인이 적용되어야 한다.")
|
||||
void vip_o() {
|
||||
//given
|
||||
Member member = new Member(1L, "memberVIP", Grade.VIP);
|
||||
//when
|
||||
int discount = discountPolicy.discount(member, 10000);
|
||||
//then
|
||||
assertThat(discount).isEqualTo(1000);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("VIP가 아니면 할인이 적용되지 않아야 한다.")
|
||||
void vip_x() {
|
||||
//given
|
||||
Member member = new Member(1L, "memberVIP", Grade.BASIC);
|
||||
//when
|
||||
int discount = discountPolicy.discount(member, 10000);
|
||||
//then
|
||||
assertThat(discount).isEqualTo(0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user