diff --git a/.idea/misc.xml b/.idea/misc.xml
index 0792e77..537356d 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/RefactoringAssignment.iml b/RefactoringAssignment.iml
index 7e880ab..454125c 100644
--- a/RefactoringAssignment.iml
+++ b/RefactoringAssignment.iml
@@ -24,5 +24,15 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java
index 558e0a0..1dd1d3b 100644
--- a/src/InsuranceCalculator.java
+++ b/src/InsuranceCalculator.java
@@ -1,5 +1,7 @@
public class InsuranceCalculator {
+ private InsuranceStrategy strategy;
+
public double calculateInsurance(double income) {
if (income <= 10000) {
return income*0.365;
@@ -8,7 +10,8 @@ public double calculateInsurance(double income) {
} else if (income <= 60000) {
return (income-30000)*0.1+76500;
} else {
- return (income-60000)*0.02+105600;
+ strategy = new InsuranceStrategyVeryHigh();
+ return InsuranceStrategy.calculateInsuranceVeryHigh(income);
}
}
diff --git a/src/InsuranceStrategy.java b/src/InsuranceStrategy.java
new file mode 100644
index 0000000..621cc38
--- /dev/null
+++ b/src/InsuranceStrategy.java
@@ -0,0 +1,17 @@
+public abstract class InsuranceStrategy {
+ public static double calculateInsuranceVeryHigh(double income) {
+ return (income - InsuranceStrategy.getAdjustment()) * InsuranceStrategy.getWeight() + InsuranceStrategy.getConstant();
+ }
+
+ public static int getConstant() {
+ return 105600;
+ }
+
+ public static double getWeight() {
+ return 0.02;
+ }
+
+ public static int getAdjustment() {
+ return 60000;
+ }
+}
diff --git a/src/InsuranceStrategyHigh.java b/src/InsuranceStrategyHigh.java
new file mode 100644
index 0000000..404f980
--- /dev/null
+++ b/src/InsuranceStrategyHigh.java
@@ -0,0 +1,2 @@
+public class InsuranceStrategyHigh extends InsuranceStrategy {
+}
diff --git a/src/InsuranceStrategyLow.java b/src/InsuranceStrategyLow.java
new file mode 100644
index 0000000..973bb9a
--- /dev/null
+++ b/src/InsuranceStrategyLow.java
@@ -0,0 +1,2 @@
+public class InsuranceStrategyLow extends InsuranceStrategy {
+}
diff --git a/src/InsuranceStrategyMedium.java b/src/InsuranceStrategyMedium.java
new file mode 100644
index 0000000..e4c2f05
--- /dev/null
+++ b/src/InsuranceStrategyMedium.java
@@ -0,0 +1,2 @@
+public class InsuranceStrategyMedium extends InsuranceStrategy {
+}
diff --git a/src/InsuranceStrategyVeryHigh.java b/src/InsuranceStrategyVeryHigh.java
new file mode 100644
index 0000000..591707e
--- /dev/null
+++ b/src/InsuranceStrategyVeryHigh.java
@@ -0,0 +1,7 @@
+public class InsuranceStrategyVeryHigh extends InsuranceStrategy {
+
+ public InsuranceStrategyVeryHigh() {
+
+ }
+
+}
\ No newline at end of file
diff --git a/test/EMPTY b/test/EMPTY
deleted file mode 100644
index e69de29..0000000
diff --git a/test/InsuranceCalculatorTest.java b/test/InsuranceCalculatorTest.java
new file mode 100644
index 0000000..9a0b197
--- /dev/null
+++ b/test/InsuranceCalculatorTest.java
@@ -0,0 +1,29 @@
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class InsuranceCalculatorTest {
+ @Test
+ public void low() {
+ assertEquals(1825, insuranceFor(5000), 0.01);
+ }
+
+ @Test
+ public void medium() {
+ assertEquals(38600, insuranceFor(25000), 0.01);
+ }
+
+ @Test
+ public void high() {
+ assertEquals(78500, insuranceFor(50000), 0.01);
+ }
+
+ @Test
+ public void veryHigh() {
+ assertEquals(106400, insuranceFor(100_000), 0.01);
+ }
+
+ private double insuranceFor(double income) {
+ return new InsuranceCalculator().calculateInsurance(income);
+ }
+}