Skip to content

Commit

Permalink
adds handling for EligibilityService FailureException, plus cleanup, …
Browse files Browse the repository at this point in the history
…type fixes
  • Loading branch information
pafciu17 committed Feb 26, 2014
1 parent 4c95f90 commit 4b5b092
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 13 deletions.
2 changes: 1 addition & 1 deletion src/main/java/EligibilityService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* Created by pawel on 2/26/14.
*/
public class EligibilityService {
public boolean isEligible(String accountNumber) {
public boolean isEligible(String accountNumber) throws InvalidAccountNumberException, FailureException {
return true;
}
}
5 changes: 5 additions & 0 deletions src/main/java/FailureException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
/**
* Created by pawel on 2/27/14.
*/
public class FailureException extends Throwable {
}
2 changes: 1 addition & 1 deletion src/main/java/InvalidAccountNumberException.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
* Created by pawel on 2/26/14.
*/
public class InvalidAccountNumberException extends Exception {
public class InvalidAccountNumberException extends Throwable {
}
9 changes: 5 additions & 4 deletions src/main/java/PrizeService.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,12 @@ public class PrizeService {
* @throws InvalidAccountNumberException
*/
public List<String> getPrizes(String accountNumber, List<String> packages) throws InvalidAccountNumberException {
if (!this.isValidAccountNumber(accountNumber)) {
throw new InvalidAccountNumberException();
}
List<String> prizes = new ArrayList<String>();
if (!this.eligibilityService.isEligible(accountNumber)) {
try {
if (!this.eligibilityService.isEligible(accountNumber)) {
return prizes;
}
} catch (FailureException e) {
return prizes;
}

Expand Down
50 changes: 43 additions & 7 deletions src/test/java/PrizeServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,17 @@
public class PrizeServiceTest {

@Test
public void testGetPrizesAgainstIncorrectInput() {
public void testGetPrizesAgainstIncorrectAccountNumber() {
try {
PrizeService prizeService = new PrizeService();
EligibilityService eligibilityService = mock(EligibilityService.class);
when(eligibilityService.isEligible("")).thenThrow(new InvalidAccountNumberException());
prizeService.setEligibilityService(eligibilityService);
prizeService.getPrizes("", Arrays.<String>asList());
fail("PrizeService did not throw InvalidAccountNumberException");
} catch (InvalidAccountNumberException e) {
} catch (FailureException e) {
e.printStackTrace();
}
}

Expand All @@ -47,7 +52,7 @@ public void testGetPrizeForEligibleCustomer() {
List<String> prizeList = this.getPrizeListForCustomerByEligibility(prizeService, prizes, true);
assertEquals("For eligible customer with SPORTS " +
"package prize list contains 1 prize", 1, prizeList.size());
assertEquals("FREE SPORTING EVENT TICKET is the price for customer with SPORTS package",
assertEquals("FREE SPORTING EVENT TICKET is the prize for customer with SPORTS package",
"FREE SPORTING EVENT TICKETS", prizeList.get(0));

prizes = Arrays.<String>asList("KIDS");
Expand All @@ -65,34 +70,65 @@ public void testGetPrizeForEligibleCustomer() {
assertEquals("For eligible customer with MOVIES and GOSSIP " +
"packages prize list contains 1 prize", 1, prizeList.size());

assertEquals("FREE MOVIE TICKETS is the price for customer with GOSSIP and/or MOVIES package",
assertEquals("FREE MOVIE TICKETS is the prize for customer with GOSSIP and/or MOVIES package",
"FREE MOVIE TICKETS", prizeList.get(0));

}

@Test
public void testEligibilityServiceFailure() {
String accountNumber = "1234567890";
PrizeService prizeService = new PrizeService();
prizeService.setPackagePrizeMapping(this.getPrizeMapping());

EligibilityService eligibilityService = mock(EligibilityService.class);
List<String> prizes = Arrays.<String>asList("SPORTS");
try {
when(eligibilityService.isEligible(accountNumber)).thenThrow(new FailureException());
} catch (InvalidAccountNumberException e) {
} catch (FailureException e) {
e.printStackTrace();
}
prizeService.setEligibilityService(eligibilityService);
List<String> prizeList = null;
try {
prizeList = prizeService.getPrizes(accountNumber, prizes);
assertEquals("In case of EligibilityService failure exception prize empty list should be returned",
0, prizeList.size());
} catch (InvalidAccountNumberException e) {
fail("Invalid account exception should not be thrown for proper account number");
}
}


private List<String> getPrizeListForCustomerByEligibility(PrizeService prizeService,
List<String> prizes, boolean isEligible) {
String accountNumber = "1234567890";
prizeService.setPackagePrizeMapping(this.getPrizeMapping());
EligibilityService eligibilityService = mock(EligibilityService.class);
when(eligibilityService.isEligible(accountNumber)).thenReturn(isEligible);
try {
when(eligibilityService.isEligible(accountNumber)).thenReturn(isEligible);
} catch (InvalidAccountNumberException e) {
} catch (FailureException e) {
e.printStackTrace();
}
prizeService.setEligibilityService(eligibilityService);
List<String> prizeList = null;
try {
prizeList = prizeService.getPrizes(accountNumber, prizes);
} catch (InvalidAccountNumberException e) {
fail("InvalidAcountNumberException has been thrown for correct account number");
fail("InvalidAccountNumberException has been thrown for correct account number");
}
return prizeList;
}


/**
* prepare used mapping for package -> price
* prepare used mapping for package -> prize
*
* @return
*/
public Map<String,String> getPrizeMapping() {
private Map<String,String> getPrizeMapping() {
HashMap<String, String> packagePrizeMap = new HashMap<String, String>();
packagePrizeMap.put("SPORTS", "FREE SPORTING EVENT TICKETS");
packagePrizeMap.put("MOVIES", "FREE MOVIE TICKETS");
Expand Down

0 comments on commit 4b5b092

Please sign in to comment.