Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions src/main/java/com/digite/kata/refactoring/ChildrenMovie.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
46 changes: 5 additions & 41 deletions src/main/java/com/digite/kata/refactoring/Customer.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,47 +19,11 @@ public String getName() {
return _name;
}

public Vector<Rental> 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);
}
}
15 changes: 5 additions & 10 deletions src/main/java/com/digite/kata/refactoring/Movie.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
18 changes: 18 additions & 0 deletions src/main/java/com/digite/kata/refactoring/NewReleaseMovie.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
16 changes: 16 additions & 0 deletions src/main/java/com/digite/kata/refactoring/RegularMovie.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
36 changes: 36 additions & 0 deletions src/main/java/com/digite/kata/refactoring/Statement.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
63 changes: 63 additions & 0 deletions src/test/com/digite/kata/refactoring/JTestCustomer.java
Original file line number Diff line number Diff line change
@@ -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());
}

}