Skip to content
Open
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
2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 10 additions & 5 deletions src/InsuranceCalculator.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
public class InsuranceCalculator {

private InsuranceStrategy strategy;

public double calculateInsurance(double income) {
if (income <= 10000) {
return income*0.365;
strategy = new InsuranceStrategyLow();
return strategy.calculate(income);
} else if (income <= 30000) {
return (income-10000)*0.2+35600;
strategy = new InsuranceStrategyMedium();
return strategy.calculate(income);
} else if (income <= 60000) {
return (income-30000)*0.1+76500;
strategy = new InsuranceStrategyHigh();
return strategy.calculate(income);
} else {
return (income-60000)*0.02+105600;
strategy = new InsuranceStrategyVeryHigh();
return strategy.calculate(income);
}
}

}
11 changes: 11 additions & 0 deletions src/InsuranceStrategy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
public abstract class InsuranceStrategy {
public double calculate(double income) {
return (income - getAdjustment()) * getWeight() + getConstant();
}

protected abstract int getConstant();

protected abstract double getWeight();

protected abstract int getAdjustment();
}
16 changes: 16 additions & 0 deletions src/InsuranceStrategyHigh.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
public class InsuranceStrategyHigh extends InsuranceStrategy {
@Override
protected int getConstant() {
return 76_500;
}

@Override
protected double getWeight() {
return 0.1;
}

@Override
protected int getAdjustment() {
return 30_000;
}
}
16 changes: 16 additions & 0 deletions src/InsuranceStrategyLow.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
public class InsuranceStrategyLow extends InsuranceStrategy {
@Override
protected int getConstant() {
return 0;
}

@Override
protected double getWeight() {
return 0.365;
}

@Override
protected int getAdjustment() {
return 0;
}
}
16 changes: 16 additions & 0 deletions src/InsuranceStrategyMedium.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
public class InsuranceStrategyMedium extends InsuranceStrategy {
@Override
protected int getConstant() {
return 35_600;
}

@Override
protected double getWeight() {
return 0.2;
}

@Override
protected int getAdjustment() {
return 10_000;
}
}
19 changes: 19 additions & 0 deletions src/InsuranceStrategyVeryHigh.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
public class InsuranceStrategyVeryHigh extends InsuranceStrategy {
public InsuranceStrategyVeryHigh() {
}

@Override
protected int getConstant() {
return 105600;
}

@Override
protected double getWeight() {
return 0.02;
}

@Override
protected int getAdjustment() {
return 60000;
}
}
29 changes: 29 additions & 0 deletions test/IfElseDemoTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class InsuranceCalculatorTest {
@Test
public void lowIncomeInsuranceIsCorrect() {
assertEquals(1825, insuranceFor(5000), 0.01);
}

@Test
public void mediumIncomeInsuranceIsCorrect() {
assertEquals(38600, insuranceFor(25000), 0.01);
}

@Test
public void highIncomeInsuranceIsCorrect() {
assertEquals(78500, insuranceFor(50000), 0.01);
}

@Test
public void veryHighIncomeInsuranceIsCorrect() {
assertEquals(106400, insuranceFor(100_000), 0.01);
}

private double insuranceFor(double income) {
return new InsuranceCalculator().calculateInsurance(income);
}
}