diff --git a/src/main/java/com/digite/kata/refactoring/BillingInterface.java b/src/main/java/com/digite/kata/refactoring/BillingInterface.java new file mode 100644 index 0000000..d233656 --- /dev/null +++ b/src/main/java/com/digite/kata/refactoring/BillingInterface.java @@ -0,0 +1,8 @@ +package com.digite.kata.refactoring; + +public interface BillingInterface { + + public double getRentAmount(int rentDays); + public int getEarnedPoints(int rentDays); + +} diff --git a/src/main/java/com/digite/kata/refactoring/Children.java b/src/main/java/com/digite/kata/refactoring/Children.java new file mode 100644 index 0000000..a62d448 --- /dev/null +++ b/src/main/java/com/digite/kata/refactoring/Children.java @@ -0,0 +1,20 @@ +package com.digite.kata.refactoring; + +public class Children implements BillingInterface{ + + public double getRentAmount(int rentDays) + { + double amount = 1.5; + + if (rentDays > 3) + amount += (rentDays - 3) * 1.5; + + return amount; + + } + + public int getEarnedPoints(int rentDays) { + int count = 0; + return count++; + } +} diff --git a/src/main/java/com/digite/kata/refactoring/Customer.java b/src/main/java/com/digite/kata/refactoring/Customer.java index f13fce0..f897f6c 100644 --- a/src/main/java/com/digite/kata/refactoring/Customer.java +++ b/src/main/java/com/digite/kata/refactoring/Customer.java @@ -1,65 +1,27 @@ -package com.digite.kata.refactoring; - -import java.util.Enumeration; -import java.util.Vector; - -class Customer { - private String _name; - private Vector _rentals = new Vector(); - - public Customer(String name) { - _name = name; - } - - public void addRental(Rental arg) { - _rentals.addElement(arg); - } - - public String getName() { - return _name; - } - - 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; - } +package com.digite.kata.refactoring; + +import java.util.Enumeration; +import java.util.Vector; + +class Customer { + private String _name; + private Vector _rentals = new Vector(); + + public Customer(String name) { + _name = name; + } + + public void addRental(Rental arg) { + _rentals.addElement(arg); + } + + public Vector getRentals() + { + return _rentals; + } + + public String getName() { + return _name; + } + } \ No newline at end of file diff --git a/src/main/java/com/digite/kata/refactoring/Invoice.java b/src/main/java/com/digite/kata/refactoring/Invoice.java new file mode 100644 index 0000000..219fc51 --- /dev/null +++ b/src/main/java/com/digite/kata/refactoring/Invoice.java @@ -0,0 +1,34 @@ +package com.digite.kata.refactoring; + +import java.util.Enumeration; +import java.util.Vector; + +public class Invoice { + + public static String getInvoice(String w_custName, Vector _rentals) { + double totalAmount = 0; + int frequentRenterPoints = 0; + Enumeration rentals = _rentals.elements(); + String result = "Rental Record for " + w_custName + "\n"; + while (rentals.hasMoreElements()) + { + double thisAmount = 0; + Rental each = (Rental) rentals.nextElement(); + //determine amounts for each line + + thisAmount = each.getMovieType().getRentAmount(each.getDaysRented()); + frequentRenterPoints += each.getMovieType().getEarnedPoints(each.getDaysRented()); + + result += each.getMovie().getTitle()+ " " + + 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; + } +} diff --git a/src/main/java/com/digite/kata/refactoring/JTestMovie.java b/src/main/java/com/digite/kata/refactoring/JTestMovie.java new file mode 100644 index 0000000..2d6e7d5 --- /dev/null +++ b/src/main/java/com/digite/kata/refactoring/JTestMovie.java @@ -0,0 +1,56 @@ +package com.digite.kata.refactoring; +import static org.junit.Assert.assertEquals; +import org.junit.Test; + +public class JTestMovie { + + @Test + public void testForSameType() + { + Movie obj = new Movie("Movie1", Movie.REGULAR); + Movie obj1 = new Movie("Movie2", Movie.REGULAR); + BillingInterface regular = new Regular(); + + Rental rental = new Rental(obj, 10, regular); + Rental rental1 = new Rental(obj1, 20, regular); + + Customer cust = new Customer("Pravin"); + cust.addRental(rental); + cust.addRental(rental1); + + String finalResult = "Rental Record for Pravin\nMovie1 14.0\nMovie2 29.0\nAmount owed is 43.0\nYou earned 2 frequent renter points"; + + String w_bill = Invoice.getInvoice(cust.getName(), cust.getRentals()); + assertEquals(finalResult, w_bill); + System.out.println(w_bill); + + } + + @Test + public void testForDifferntType() + { + Movie obj = new Movie("Movie1", Movie.REGULAR); + Movie obj1 = new Movie("Movie2", Movie.NEW_RELEASE); + Movie obj2 = new Movie("Movie3", Movie.CHILDRENS); + BillingInterface regular = new Regular(); + BillingInterface newRelease = new NewRelease(); + BillingInterface children = new Children(); + + Rental rental = new Rental(obj, 10, regular); + Rental rental1 = new Rental(obj1, 20, newRelease); + Rental rental3 = new Rental(obj2, 30, children); + + Customer cust = new Customer("Pravin"); + cust.addRental(rental); + cust.addRental(rental1); + cust.addRental(rental3); + + String finalResult = "Rental Record for Pravin\nMovie1 14.0\nMovie2 60.0\nMovie3 42.0\nAmount owed is 116.0\nYou earned 3 frequent renter points"; + + String w_bill = Invoice.getInvoice(cust.getName(), cust.getRentals()); + assertEquals(finalResult, w_bill); + System.out.println(w_bill); + + } + +} diff --git a/src/main/java/com/digite/kata/refactoring/Movie.java b/src/main/java/com/digite/kata/refactoring/Movie.java index 2eb91d5..05fdee4 100644 --- a/src/main/java/com/digite/kata/refactoring/Movie.java +++ b/src/main/java/com/digite/kata/refactoring/Movie.java @@ -1,26 +1,29 @@ -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) { - _title = title; - _priceCode = priceCode; - } - - public String getTitle() { - return _title; - } - - public int getPriceCode() { - return _priceCode; - } - - public void setPriceCode(int priceCode) { - _priceCode = priceCode; - } +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) { + _title = title; + _priceCode = priceCode; + + } + + public String getTitle() { + return _title; + } + + public int getPriceCode() { + return _priceCode; + } + + public void setPriceCode(int priceCode) { + _priceCode = priceCode; + } + + } \ No newline at end of file diff --git a/src/main/java/com/digite/kata/refactoring/NewRelease.java b/src/main/java/com/digite/kata/refactoring/NewRelease.java new file mode 100644 index 0000000..8b9c4c6 --- /dev/null +++ b/src/main/java/com/digite/kata/refactoring/NewRelease.java @@ -0,0 +1,24 @@ +package com.digite.kata.refactoring; + +public class NewRelease implements BillingInterface { + public double getRentAmount(int rentDays) + { + double amount = 0; + + amount += rentDays * 3; + + return amount; + + } + + public int getEarnedPoints(int rentDays) { + int count = 0; + count++; + + if (rentDays > 1) + count++; + + return count; + } + +} diff --git a/src/main/java/com/digite/kata/refactoring/Regular.java b/src/main/java/com/digite/kata/refactoring/Regular.java new file mode 100644 index 0000000..c187be2 --- /dev/null +++ b/src/main/java/com/digite/kata/refactoring/Regular.java @@ -0,0 +1,21 @@ +package com.digite.kata.refactoring; + + +public class Regular implements BillingInterface{ + + public double getRentAmount(int rentDays) + { + double amount = 2; + + if (rentDays > 2) + amount += (rentDays - 2) * 1.5; + + return amount; + + } + + public int getEarnedPoints(int rentDays) { + int count = 0; + return ++count; + } +} diff --git a/src/main/java/com/digite/kata/refactoring/Rental.java b/src/main/java/com/digite/kata/refactoring/Rental.java index 4d17895..54b1207 100644 --- a/src/main/java/com/digite/kata/refactoring/Rental.java +++ b/src/main/java/com/digite/kata/refactoring/Rental.java @@ -1,20 +1,28 @@ -package com.digite.kata.refactoring; - -public class Rental { - - private Movie _movie; - private int _daysRented; - - public Rental(Movie movie, int daysRented) { - _movie = movie; - _daysRented = daysRented; - } - - public Movie getMovie() { - return _movie; - } - - public int getDaysRented() { - return _daysRented; - } -} +package com.digite.kata.refactoring; + +public class Rental { + + private Movie _movie; + private int _daysRented; + private BillingInterface _obj; + + public Rental(Movie movie, int daysRented, BillingInterface obj) { + _movie = movie; + _daysRented = daysRented; + _obj = obj; + } + + public Movie getMovie() { + return _movie; + } + + public int getDaysRented() { + return _daysRented; + } + + public BillingInterface getMovieType() + { + return _obj; + } + +}