diff --git a/src/main/java/com/digite/kata/refactoring/ChildrenMovie.java b/src/main/java/com/digite/kata/refactoring/ChildrenMovie.java new file mode 100644 index 0000000..f756e96 --- /dev/null +++ b/src/main/java/com/digite/kata/refactoring/ChildrenMovie.java @@ -0,0 +1,16 @@ +package com.digite.kata.refactoring; + +public class ChildrenMovie extends Movie{ + + public ChildrenMovie(String title) { + super(title); + } + + public double calculateAmt(int daysRented) { + double thisAmount = 1.5; + if (daysRented > 3) + thisAmount += (daysRented - 3) * 1.5; + + return thisAmount; + } +} diff --git a/src/main/java/com/digite/kata/refactoring/Customer.java b/src/main/java/com/digite/kata/refactoring/Customer.java index f13fce0..98ea5a5 100644 --- a/src/main/java/com/digite/kata/refactoring/Customer.java +++ b/src/main/java/com/digite/kata/refactoring/Customer.java @@ -19,47 +19,11 @@ public String getName() { return _name; } + public Vector getRentals() { + return _rentals; + } + public String statement() { - double totalAmount = 0; - int frequentRenterPoints = 0; - Enumeration rentals = _rentals.elements(); - String result = "Rental Record for " + getName() + "\n"; - while (rentals.hasMoreElements()) { - double thisAmount = 0; - Rental each = (Rental) rentals.nextElement(); - //determine amounts for each line - switch (each.getMovie().getPriceCode()) { - case Movie.REGULAR: - thisAmount += 2; - if (each.getDaysRented() > 2) - thisAmount += (each.getDaysRented() - 2) * 1.5; - break; - case Movie.NEW_RELEASE: - thisAmount += each.getDaysRented() * 3; - break; - case Movie.CHILDRENS: - thisAmount += 1.5; - if (each.getDaysRented() > 3) - thisAmount += (each.getDaysRented() - 3) * 1.5; - break; - } - // add frequent renter points - frequentRenterPoints++; - // add bonus for a two day new release rental - if ((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) - && - each.getDaysRented() > 1) frequentRenterPoints++; - //show figures for this rental - result += "\t" + each.getMovie().getTitle() + "\t" + - String.valueOf(thisAmount) + "\n"; - totalAmount += thisAmount; - } - //add footer lines - result += "Amount owed is " + String.valueOf(totalAmount) + - "\n"; - result += "You earned " + String.valueOf(frequentRenterPoints) - + - " frequent renter points"; - return result; + return Statement.getStatement(this); } } \ No newline at end of file diff --git a/src/main/java/com/digite/kata/refactoring/Movie.java b/src/main/java/com/digite/kata/refactoring/Movie.java index 2eb91d5..a5e9027 100644 --- a/src/main/java/com/digite/kata/refactoring/Movie.java +++ b/src/main/java/com/digite/kata/refactoring/Movie.java @@ -1,26 +1,21 @@ package com.digite.kata.refactoring; public class Movie { - public static final int CHILDRENS = 2; - public static final int REGULAR = 0; - public static final int NEW_RELEASE = 1; private String _title; - private int _priceCode; - public Movie(String title, int priceCode) { + public Movie(String title) { _title = title; - _priceCode = priceCode; } public String getTitle() { return _title; } - public int getPriceCode() { - return _priceCode; + public double calculateAmt(int daysRented) { + return 0.0; } - public void setPriceCode(int priceCode) { - _priceCode = priceCode; + public int calculateFrequentRenterPoints(int daysRented) { + return 1; } } \ No newline at end of file diff --git a/src/main/java/com/digite/kata/refactoring/NewReleaseMovie.java b/src/main/java/com/digite/kata/refactoring/NewReleaseMovie.java new file mode 100644 index 0000000..49a70d7 --- /dev/null +++ b/src/main/java/com/digite/kata/refactoring/NewReleaseMovie.java @@ -0,0 +1,18 @@ +package com.digite.kata.refactoring; + +public class NewReleaseMovie extends Movie { + + public NewReleaseMovie(String title) { + super(title); + } + + public double calculateAmt(int daysRented) { + return daysRented * 3; + } + + public int calculateFrequentRenterPoints(int daysRented) { + int frequentRenterPoints = 1; + if (daysRented > 1) frequentRenterPoints++; + return frequentRenterPoints; + } +} diff --git a/src/main/java/com/digite/kata/refactoring/RegularMovie.java b/src/main/java/com/digite/kata/refactoring/RegularMovie.java new file mode 100644 index 0000000..ac72df9 --- /dev/null +++ b/src/main/java/com/digite/kata/refactoring/RegularMovie.java @@ -0,0 +1,16 @@ +package com.digite.kata.refactoring; + +public class RegularMovie extends Movie /*implements MovieInterface*/{ + + public RegularMovie(String title) { + super(title); + } + + @Override + public double calculateAmt(int daysRented) { + double thisAmount = 2; + if (daysRented > 2) + thisAmount += (daysRented - 2) * 1.5; + return thisAmount; + } +} diff --git a/src/main/java/com/digite/kata/refactoring/Statement.java b/src/main/java/com/digite/kata/refactoring/Statement.java new file mode 100644 index 0000000..b915985 --- /dev/null +++ b/src/main/java/com/digite/kata/refactoring/Statement.java @@ -0,0 +1,36 @@ +package com.digite.kata.refactoring; + +import java.util.Enumeration; +import java.util.Vector; + +public class Statement { + + public static String getStatement(Customer customer) { + + double totalAmount = 0; + int frequentRenterPoints = 0; + Enumeration rentals = customer.getRentals().elements(); + String result = "Rental Record for " + customer.getName() + "\n"; + while (rentals.hasMoreElements()) { + double thisAmount = 0; + Rental each = (Rental) rentals.nextElement(); + //determine amounts for each line + thisAmount += each.getMovie().calculateAmt(each.getDaysRented()); + // add frequent renter points + frequentRenterPoints += each.getMovie().calculateFrequentRenterPoints(each.getDaysRented()); + //show figures for this rental + result += "\t" + each.getMovie().getTitle() + "\t" + + String.valueOf(thisAmount) + "\n"; + totalAmount += thisAmount; + } + //add footer lines + result += "Amount owed is " + String.valueOf(totalAmount) + + "\n"; + result += "You earned " + String.valueOf(frequentRenterPoints) + + + " frequent renter points"; + + System.out.println(result); + return result; + } +} diff --git a/src/test/com/digite/kata/refactoring/JTestCustomer.java b/src/test/com/digite/kata/refactoring/JTestCustomer.java new file mode 100644 index 0000000..8320706 --- /dev/null +++ b/src/test/com/digite/kata/refactoring/JTestCustomer.java @@ -0,0 +1,63 @@ +package com.digite.kata.refactoring; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class JTestCustomer { + + @Test + public void testgetName() { + Customer w_cust = new Customer("testcust"); + assertEquals("testcust", w_cust.getName()); + } + + @Test + public void testStatement_RegularMovie() { + Customer w_cust = new Customer("testcust"); + + Movie w_movie = new RegularMovie("abc"); + + Rental w_rental = new Rental(w_movie, 30); + + w_cust.addRental(w_rental); + + assertEquals("Rental Record for testcust\n" + + "\tabc\t44.0\n" + + "Amount owed is 44.0\n" + + "You earned 1 frequent renter points", w_cust.statement()); + } + + @Test + public void testStatement_NewReleaseMovie() { + Customer w_cust = new Customer("testcust"); + + Movie w_movie = new NewReleaseMovie("NewRelease"); + + Rental w_rental = new Rental(w_movie, 30); + + w_cust.addRental(w_rental); + + assertEquals("Rental Record for testcust\n" + + "\tNewRelease\t90.0\n" + + "Amount owed is 90.0\n" + + "You earned 2 frequent renter points", w_cust.statement()); + } + + @Test + public void testStatement_ChildrenMovie() { + Customer w_cust = new Customer("testcust"); + + Movie w_movie = new ChildrenMovie("Children"); + + Rental w_rental = new Rental(w_movie, 30); + + w_cust.addRental(w_rental); + + assertEquals("Rental Record for testcust\n" + + "\tChildren\t42.0\n" + + "Amount owed is 42.0\n" + + "You earned 1 frequent renter points", w_cust.statement()); + } + +}