diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..da88288 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.gradle/ diff --git a/.project b/.project new file mode 100644 index 0000000..27b38db --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + refactor-kata + Project refactor-kata created by Buildship. + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.buildship.core.gradleprojectnature + + diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..e889521 --- /dev/null +++ b/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,2 @@ +connection.project.dir= +eclipse.preferences.version=1 diff --git a/.settings/org.jboss.ide.eclipse.as.core.prefs b/.settings/org.jboss.ide.eclipse.as.core.prefs new file mode 100644 index 0000000..cf3aa3a --- /dev/null +++ b/.settings/org.jboss.ide.eclipse.as.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.jboss.ide.eclipse.as.core.singledeployable.deployableList= 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..9e963e2 --- /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..f59d438 --- /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..091063e 100644 --- a/src/main/java/com/digite/kata/refactoring/Customer.java +++ b/src/main/java/com/digite/kata/refactoring/Customer.java @@ -14,52 +14,14 @@ public Customer(String name) { public void addRental(Rental arg) { _rentals.addElement(arg); } - + + public Vector getRentals() + { + return _rentals; + } + 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; - } } \ 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..a3739b6 --- /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..4202ad8 --- /dev/null +++ b/src/main/java/com/digite/kata/refactoring/JTestMovie.java @@ -0,0 +1,58 @@ +package com.digite.kata.refactoring; + +import static org.junit.Assert.assertEquals; + +import org.junit.jupiter.api.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("Seema"); + cust.addRental(rental); + cust.addRental(rental1); + + String finalResult = "Rental Record for Seema\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("Seema"); + cust.addRental(rental); + cust.addRental(rental1); + cust.addRental(rental3); + + String finalResult = "Rental Record for Seema\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..176e02f 100644 --- a/src/main/java/com/digite/kata/refactoring/Movie.java +++ b/src/main/java/com/digite/kata/refactoring/Movie.java @@ -10,6 +10,7 @@ public class Movie { public Movie(String title, int priceCode) { _title = title; _priceCode = priceCode; + } public String getTitle() { @@ -23,4 +24,6 @@ public int getPriceCode() { 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..e3af26c --- /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..0bb8de0 --- /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..78eb0df 100644 --- a/src/main/java/com/digite/kata/refactoring/Rental.java +++ b/src/main/java/com/digite/kata/refactoring/Rental.java @@ -4,10 +4,12 @@ public class Rental { private Movie _movie; private int _daysRented; - - public Rental(Movie movie, int daysRented) { + private BillingInterface _obj; + + public Rental(Movie movie, int daysRented, BillingInterface obj) { _movie = movie; _daysRented = daysRented; + _obj = obj; } public Movie getMovie() { @@ -17,4 +19,10 @@ public Movie getMovie() { public int getDaysRented() { return _daysRented; } + + public BillingInterface getMovieType() + { + return _obj; + } + }