Skip to content

Commit 850d919

Browse files
committed
Clean up initial files
1 parent 25f966f commit 850d919

11 files changed

+208
-227
lines changed

src/warranty/Claim.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,23 @@
33
import java.util.ArrayList;
44
import java.util.Date;
55
import java.util.List;
6+
import java.util.UUID;
7+
8+
/**
9+
* Claim represents a request for a benefit on an extended warranty. It contains a
10+
* set of purchase orders that provide information about any repairs and associated costs that may have occurred for a claim.
11+
*/
612

713
public class Claim {
14+
public UUID id;
15+
public double amount;
16+
public Date failureDate;
817

9-
public Claim(int id, double amount, Date date) {
10-
super();
11-
this.id = id;
12-
this.amount = amount;
13-
this.date = date;
14-
}
15-
public int id;
16-
public double amount;
17-
public Date date = new Date();
1818
public List<RepairPO> repairPO = new ArrayList<RepairPO>();
19+
20+
public Claim(double amount, Date failureDate) {
21+
this.id = UUID.randomUUID();
22+
this.amount = amount;
23+
this.failureDate = failureDate;
24+
}
1925
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package warranty;
2+
3+
import warranty.Contract.Status;
4+
5+
/**
6+
* Adjudicate/adjudication - a judgment made on a claim to determine whether
7+
* we are legally obligated to process the claim against the warranty. From
8+
* Wikipedia (https://en.wikipedia.org/wiki/Adjudication):
9+
* "Claims adjudication" is a phrase used in the insurance industry to refer to
10+
* the process of paying claims submitted or denying them after comparing claims
11+
* to the benefit or coverage requirements.
12+
*/
13+
14+
public class ClaimsAdjudication {
15+
16+
public void Adjudicate(Contract contract, Claim newClaim) {
17+
double claimTotal = contract.getClaims().stream().mapToDouble(c -> c.amount).sum();
18+
if (((contract.purchasePrice - claimTotal) * 0.8 > newClaim.amount) &&
19+
(contract.status == Status.ACTIVE) &&
20+
(newClaim.failureDate.compareTo(contract.effectiveDate) >= 0) &&
21+
(newClaim.failureDate.compareTo(contract.expirationDate) <= 0)) {
22+
contract.add(newClaim);
23+
}
24+
}
25+
}

src/warranty/ClaimsAdjudicationService.java

Lines changed: 0 additions & 27 deletions
This file was deleted.
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package warranty;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import java.util.Date;
6+
7+
import static org.junit.jupiter.api.Assertions.*;
8+
9+
class ClaimsAdjudicationTest {
10+
11+
Contract FakeContract()
12+
{
13+
Product product = new Product("dishwasher", "OEUOEU23", "Whirlpool", "7DP840CWDB0");
14+
Contract contract = new Contract(100.0, product, new Date(2010, 5, 7), new Date(2010, 5, 8), new Date(2013, 5, 8));
15+
contract.status = Contract.Status.ACTIVE;
16+
17+
return contract;
18+
}
19+
20+
@Test
21+
void AdjudicateValidClaim() {
22+
Contract contract = FakeContract();
23+
Claim claim = new Claim(79.0, new Date(2010, 5, 8));
24+
25+
new ClaimsAdjudication().Adjudicate(contract, claim);
26+
27+
assertEquals(1, contract.getClaims().size());
28+
assertEquals(79.0, contract.getClaims().get(0).amount);
29+
assertEquals(new Date(2010, 5, 8), contract.getClaims().get(0).failureDate);
30+
}
31+
32+
@Test
33+
void AdjudicateClaimWithInvalidAmount() {
34+
Contract contract = FakeContract();
35+
Claim claim = new Claim(81.0, new Date(2010, 5, 8));
36+
37+
new ClaimsAdjudication().Adjudicate(contract, claim);
38+
39+
assertEquals(0, contract.getClaims().size());
40+
}
41+
42+
@Test
43+
void AdjudicateClaimForPendingContract() {
44+
Contract contract = FakeContract();
45+
contract.status = Contract.Status.PENDING;
46+
Claim claim = new Claim(79.0, new Date(2010, 5, 8));
47+
48+
new ClaimsAdjudication().Adjudicate(contract, claim);
49+
50+
assertEquals(0, contract.getClaims().size());
51+
}
52+
53+
@Test
54+
void AdjudicateClaimForExpiredContract() {
55+
Contract contract = FakeContract();
56+
contract.status = Contract.Status.EXPIRED;
57+
Claim claim = new Claim(79.0, new Date(2010, 5, 8));
58+
59+
new ClaimsAdjudication().Adjudicate(contract, claim);
60+
61+
assertEquals(0, contract.getClaims().size());
62+
}
63+
64+
@Test
65+
void AdjudicateClaimPriorToEffectiveDate() {
66+
Contract contract = FakeContract();
67+
Claim claim = new Claim(79.0, new Date(2010, 5, 7));
68+
69+
new ClaimsAdjudication().Adjudicate(contract, claim);
70+
71+
assertEquals(0, contract.getClaims().size());
72+
}
73+
@Test
74+
void AdjudicateClaimAfterToExpirationDate() {
75+
Contract contract = FakeContract();
76+
Claim claim = new Claim(79.0, new Date(2013, 5, 9));
77+
78+
new ClaimsAdjudication().Adjudicate(contract, claim);
79+
80+
assertEquals(0, contract.getClaims().size());
81+
}
82+
}

src/warranty/ClientCompany.java

Lines changed: 0 additions & 52 deletions
This file was deleted.

src/warranty/Contract.java

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,36 @@
33
import java.util.ArrayList;
44
import java.util.Date;
55
import java.util.List;
6+
import java.util.UUID;
67

7-
import warranty.Claim;
8+
/**
9+
* Contract represents an extended warranty for a covered product.
10+
* A contract is in a PENDING state prior to the effective date,
11+
* ACTIVE between effective and expiration dates, and EXPIRED after
12+
* the expiration date.
13+
*/
814

915
public class Contract {
16+
public UUID id = UUID.randomUUID();;
17+
public double purchasePrice;
18+
public Product coveredProduct;
19+
public Date purchaseDate;
20+
public Date effectiveDate;
21+
public Date expirationDate;
22+
public Status status;
1023

11-
public Contract(int id, double d) {
12-
this.purchasePrice = d;
13-
this.status = Status.PENDING;
14-
}
15-
16-
public int id;
17-
public double purchasePrice;
18-
public Date effectiveDate = new Date();
19-
public Date expirationDate = new Date();
20-
public Date purchaseDate = new Date();
21-
public int inStoreGuaranteeDays;
22-
public Status status;
23-
public Product product;
24-
2524
public enum Status { PENDING, ACTIVE, EXPIRED }
26-
27-
private List<Claim> Claims = new ArrayList<Claim>();
25+
26+
private final List<Claim> Claims = new ArrayList<Claim>();
27+
28+
public Contract(double purchasePrice, Product product, Date purchaseDate, Date effectiveDate, Date expirationDate) {
29+
this.purchasePrice = purchasePrice;
30+
this.coveredProduct = product;
31+
this.status = Status.PENDING;
32+
this.purchaseDate = purchaseDate;
33+
this.effectiveDate = effectiveDate;
34+
this.expirationDate = expirationDate;
35+
}
2836

2937
public void add(Claim Claim)
3038
{
@@ -36,8 +44,11 @@ public List<Claim> getClaims()
3644
return Claims;
3745
}
3846

39-
public void remove(Claim Claim)
40-
{
41-
Claims.remove(Claim);
47+
@Override
48+
public boolean equals(Object o) {
49+
if (this == o) return true;
50+
if (o == null || getClass() != o.getClass()) return false;
51+
Contract contract = (Contract) o;
52+
return id.equals(contract.id);
4253
}
4354
}

src/warranty/ContractTest.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package warranty;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import java.util.Date;
6+
import java.util.UUID;
7+
8+
import static org.junit.jupiter.api.Assertions.*;
9+
10+
class ContractTest {
11+
12+
@Test
13+
public void TestContractIsSetupCorrectly()
14+
{
15+
Product product = new Product("dishwasher", "OEUOEU23", "Whirlpool", "7DP840CWDB0");
16+
Contract contract = new Contract(100.0, product, new Date(2010, 5, 7), new Date(2010, 5, 8), new Date(2013, 5, 8));
17+
18+
assertNotNull(contract.id);
19+
System.out.println(contract.id);
20+
assertEquals(100.0, contract.purchasePrice);
21+
assertEquals(Contract.Status.PENDING, contract.status);
22+
assertEquals(contract.purchaseDate, new Date(2010, 5, 7));
23+
assertEquals(contract.effectiveDate, new Date(2010, 5, 8));
24+
assertEquals(contract.expirationDate, new Date(2013, 5, 8));
25+
assertEquals(product, contract.coveredProduct);
26+
}
27+
28+
// Entities compare by unique IDs, not properties
29+
@Test
30+
public void TestContractEquality()
31+
{
32+
Product product = new Product("dishwasher", "OEUOEU23", "Whirlpool", "7DP840CWDB0");
33+
Contract contract1 = new Contract(100.0, product, new Date(2010, 5, 7), new Date(2010, 5, 8), new Date(2013, 5, 8));
34+
Contract contract2 = new Contract(100.0, product, new Date(2010, 5, 7), new Date(2010, 5, 8), new Date(2013, 5, 8));
35+
Contract contract3 = new Contract(100.0, product, new Date(2010, 5, 7), new Date(2010, 5, 8), new Date(2013, 5, 8));
36+
37+
UUID expectedId = UUID.randomUUID();
38+
contract1.id = expectedId;
39+
contract2.id = expectedId;
40+
41+
assertEquals(contract2, contract1);
42+
assertNotEquals(contract3, contract1);
43+
}
44+
45+
}

src/warranty/LineItem.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package warranty;
22

33
public class LineItem {
4+
public final double amount;
5+
public final String description;
6+
47
public LineItem(double amount, String description) {
5-
super();
68
this.amount = amount;
79
this.description = description;
810
}
9-
10-
public final double amount;
11-
public final String description;
12-
11+
1312
@Override
1413
public int hashCode() {
1514
final int prime = 31;

src/warranty/Product.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
package warranty;
22

33
public class Product {
4+
public final String name;
5+
public final String serialNumber;
6+
public final String make;
7+
public final String model;
8+
49
public Product(String name, String serialNumber, String make, String model) {
5-
super();
610
this.name = name;
711
this.serialNumber = serialNumber;
812
this.make = make;
913
this.model = model;
1014
}
11-
public final String name;
12-
public final String serialNumber;
13-
public final String make;
14-
public final String model;
15-
15+
1616
@Override
1717
public int hashCode() {
1818
final int prime = 31;

0 commit comments

Comments
 (0)