diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 558e0a0..0a91ecc 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,14 +1,20 @@ public class InsuranceCalculator { + private InsuranceStrategy strategy; + public double calculateInsurance(double income) { if (income <= 10000) { - return income*0.365; + strategy = new InsuranceStrategyVeryLowIncome(); + return strategy.calculate(income); } else if (income <= 30000) { - return (income-10000)*0.2+35600; + strategy = new InsuranceStrategyLowIncome(); + return strategy.calculate(income); } else if (income <= 60000) { - return (income-30000)*0.1+76500; + strategy = new InsuranceStrategyMedIncome(); + return strategy.calculate(income); } else { - return (income-60000)*0.02+105600; + strategy = new InsuranceStrategyHighIncome(); + return strategy.calculate(income); } } diff --git a/src/InsuranceStrategy.java b/src/InsuranceStrategy.java new file mode 100644 index 0000000..5b22a73 --- /dev/null +++ b/src/InsuranceStrategy.java @@ -0,0 +1,11 @@ +public abstract class InsuranceStrategy { + double calculate(double income) { + return (income - getAdjustment()) * getWeight() + getConstant(); + } + + public abstract int getConstant(); + + public abstract double getWeight(); + + public abstract int getAdjustment(); +} diff --git a/src/InsuranceStrategyHighIncome.java b/src/InsuranceStrategyHighIncome.java new file mode 100644 index 0000000..3e3a2ed --- /dev/null +++ b/src/InsuranceStrategyHighIncome.java @@ -0,0 +1,20 @@ +public class InsuranceStrategyHighIncome extends InsuranceStrategy { + public InsuranceStrategyHighIncome() { + + } + + @Override + public int getConstant() { + return 105600; + } + + @Override + public double getWeight() { + return 0.02; + } + + @Override + public int getAdjustment() { + return 60000; + } +} \ No newline at end of file diff --git a/src/InsuranceStrategyLowIncome.java b/src/InsuranceStrategyLowIncome.java new file mode 100644 index 0000000..161acf1 --- /dev/null +++ b/src/InsuranceStrategyLowIncome.java @@ -0,0 +1,16 @@ +public class InsuranceStrategyLowIncome extends InsuranceStrategy { + @Override + public int getConstant() { + return 35600; + } + + @Override + public double getWeight() { + return 0.2; + } + + @Override + public int getAdjustment() { + return 10000; + } +} diff --git a/src/InsuranceStrategyMedIncome.java b/src/InsuranceStrategyMedIncome.java new file mode 100644 index 0000000..5e0ddcd --- /dev/null +++ b/src/InsuranceStrategyMedIncome.java @@ -0,0 +1,16 @@ +public class InsuranceStrategyMedIncome extends InsuranceStrategy { + @Override + public int getConstant() { + return 76500; + } + + @Override + public double getWeight() { + return 0.1; + } + + @Override + public int getAdjustment() { + return 30000; + } +} diff --git a/src/InsuranceStrategyVeryLowIncome.java b/src/InsuranceStrategyVeryLowIncome.java new file mode 100644 index 0000000..ba00986 --- /dev/null +++ b/src/InsuranceStrategyVeryLowIncome.java @@ -0,0 +1,16 @@ +public class InsuranceStrategyVeryLowIncome extends InsuranceStrategy { + @Override + public int getConstant() { + return 0; + } + + @Override + public double getWeight() { + return 0.365; + } + + @Override + public int getAdjustment() { + return 0; + } +} 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..4d99cd4 --- /dev/null +++ b/test/InsuranceCalculatorTest.java @@ -0,0 +1,27 @@ +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class InsuranceCalculatorTest { + + @Test + public void CalculateVeryLowIncome() { + assertEquals(730, calculateInsurance(2000)); + } + @Test + public void CalculateLowIncome() { + assertEquals(39600, calculateInsurance(30000)); + } + @Test + public void CalculateMedIncome() { + assertEquals(79500, calculateInsurance(60000)); + } + + @Test + public void CalculateHighIncome() { + assertEquals(106200, calculateInsurance(90000)); + } + private double calculateInsurance(double income) { + return new InsuranceCalculator().calculateInsurance(income); + } +} \ No newline at end of file