diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index e708b1c..0000000 Binary files a/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index be52383..0000000 --- a/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew deleted file mode 100644 index 4f906e0..0000000 --- a/gradlew +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat deleted file mode 100644 index 107acd3..0000000 --- a/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..3d005bb --- /dev/null +++ b/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + + groupId + refactor-kata + 1.0-SNAPSHOT + + http://www.digite.com + + + UTF-8 + + + + + + org.junit + junit-bom + 5.7.0 + pom + import + + + + \ No newline at end of file diff --git a/src/main/java/com/digite/kata/refactoring/ChildMovie.java b/src/main/java/com/digite/kata/refactoring/ChildMovie.java new file mode 100644 index 0000000..3ff594d --- /dev/null +++ b/src/main/java/com/digite/kata/refactoring/ChildMovie.java @@ -0,0 +1,18 @@ +package com.digite.kata.refactoring; + +public class ChildMovie extends Movie { + + + public ChildMovie(String title) { + super(title); + + } + public double calculateAmt(int a_daysRented) { + double w_amt = 0; + w_amt += 1.5; + if (a_daysRented > 3) + w_amt += (a_daysRented - 3) * 1.5; + return w_amt; + } + +} diff --git a/src/main/java/com/digite/kata/refactoring/Customer.java b/src/main/java/com/digite/kata/refactoring/Customer.java index f13fce0..a10c5c7 100644 --- a/src/main/java/com/digite/kata/refactoring/Customer.java +++ b/src/main/java/com/digite/kata/refactoring/Customer.java @@ -1,9 +1,8 @@ package com.digite.kata.refactoring; -import java.util.Enumeration; import java.util.Vector; -class Customer { +public class Customer { private String _name; private Vector _rentals = new Vector(); @@ -15,51 +14,16 @@ public void addRental(Rental arg) { _rentals.addElement(arg); } + public Vector getRental() { + 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; + Invoice w_invoice = new Invoice(); + return Invoice.generateInvoice(_name, _rentals); } } \ 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..ccfe5f3 --- /dev/null +++ b/src/main/java/com/digite/kata/refactoring/Invoice.java @@ -0,0 +1,47 @@ +package com.digite.kata.refactoring; + +import java.util.Enumeration; +import java.util.Vector; + +public class Invoice +{ + public static String generateInvoice(String _name, Vector _rentals) + { + double totalAmount = 0; + int frequentRenterPoints = 0; + Enumeration rentals = _rentals.elements(); + String result = "Rental Record for " + _name + "\n"; + while (rentals.hasMoreElements()) { + double thisAmount = 0; + Rental each = (Rental) rentals.nextElement(); + + thisAmount += calculateAmnt(thisAmount, each); + // add frequent renter points + frequentRenterPoints += calculateFrqRenter(frequentRenterPoints,each); + + //show figures for this rental + result += "\t" + each.getMovie().getTitle() + "\t" + + thisAmount + "\n"; + totalAmount += thisAmount; + } + //add footer lines + result += "Amount owed is " + totalAmount + + "\n"; + result += "You earned " + frequentRenterPoints + + + " frequent renter points"; + return result; + } + + + + public static double calculateAmnt(double thisAmount, Rental each) + { + return each.getMovie().calculateAmt(each.getDaysRented()); + } + + public static double calculateFrqRenter(int a_freq, Rental each) + { + return each.getMovie().AddBonusPoint(a_freq, each.getDaysRented()); + } +} \ 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..2865257 100644 --- a/src/main/java/com/digite/kata/refactoring/Movie.java +++ b/src/main/java/com/digite/kata/refactoring/Movie.java @@ -1,26 +1,26 @@ 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; +public class Movie implements PriceCalculater{ 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 daysRented; } - public void setPriceCode(int priceCode) { - _priceCode = priceCode; + public int AddBonusPoint(int a_existingBonus, int daysRented) + { + a_existingBonus++; + return a_existingBonus; } + } \ No newline at end of file diff --git a/src/main/java/com/digite/kata/refactoring/NewMovie.java b/src/main/java/com/digite/kata/refactoring/NewMovie.java new file mode 100644 index 0000000..c517aa9 --- /dev/null +++ b/src/main/java/com/digite/kata/refactoring/NewMovie.java @@ -0,0 +1,24 @@ +package com.digite.kata.refactoring; + +public class NewMovie extends Movie { + public NewMovie(String title) { + super(title); + } + + public double calculateAmt(int a_daysRented) + { + double w_amt = 0; + w_amt += a_daysRented * 3; + return w_amt; + } + + @Override + public int AddBonusPoint(int a_existingBonus, int a_daysRented) { + a_existingBonus++; + // add bonus for a two day new release rental + if (a_daysRented > 1) + a_existingBonus++; + + return a_existingBonus; + } +} diff --git a/src/main/java/com/digite/kata/refactoring/PriceCalculater.java b/src/main/java/com/digite/kata/refactoring/PriceCalculater.java new file mode 100644 index 0000000..6346802 --- /dev/null +++ b/src/main/java/com/digite/kata/refactoring/PriceCalculater.java @@ -0,0 +1,7 @@ +package com.digite.kata.refactoring; + +public interface PriceCalculater +{ + public double calculateAmt(int a_daysRented); + +} 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..177cacf --- /dev/null +++ b/src/main/java/com/digite/kata/refactoring/RegularMovie.java @@ -0,0 +1,20 @@ +package com.digite.kata.refactoring; + +public class RegularMovie extends Movie +{ + public RegularMovie(String title) { + super(title); + } + + public double calculateAmt(int a_daysRented) { + double w_amt = 0; + w_amt += 2; + if (a_daysRented > 2) + w_amt += (a_daysRented - 2) * 1.5; + return w_amt; + } + @Override + public int AddBonusPoint(int a_existingBonus, int daysRented) { + return super.AddBonusPoint(a_existingBonus, daysRented); + } +} diff --git a/src/main/java/com/digite/kata/refactoring/Rental.java b/src/main/java/com/digite/kata/refactoring/Rental.java index 4d17895..c089766 100644 --- a/src/main/java/com/digite/kata/refactoring/Rental.java +++ b/src/main/java/com/digite/kata/refactoring/Rental.java @@ -5,6 +5,7 @@ public class Rental { private Movie _movie; private int _daysRented; + public Rental(Movie movie, int daysRented) { _movie = movie; _daysRented = daysRented; diff --git a/src/test/java/TestCustomer.java b/src/test/java/TestCustomer.java new file mode 100644 index 0000000..9ce2353 --- /dev/null +++ b/src/test/java/TestCustomer.java @@ -0,0 +1,48 @@ +import com.digite.kata.refactoring.*; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + + +class TestCustomer { + + @Test + public void testStatementForChildMovie() + { + Customer w_customer = new Customer("shraddha"); + Rental w_rental1 = new Rental(new ChildMovie("Dumbo"), 7); + w_customer.addRental(w_rental1); + String w_receipt = w_customer.statement(); + Assertions.assertEquals(w_receipt, "Rental Record for shraddha\n" + + "\tDumbo\t7.5\n" + + "Amount owed is 7.5\n" + + "You earned 1 frequent renter points"); + } + + @Test + public void testStatementForREGULARMovie() + { + Customer w_customer = new Customer("shraddha"); + Rental w_rental1 = new Rental(new RegularMovie("Fast&Furious"), 7); + w_customer.addRental(w_rental1); + String w_receipt = w_customer.statement(); + Assertions.assertEquals(w_receipt, "Rental Record for shraddha\n" + + "\tFast&Furious\t9.5\n" + + "Amount owed is 9.5\n" + + "You earned 1 frequent renter points"); + } + + @Test + public void testStatementForNewMovie() + { + Customer w_customer = new Customer("shraddha"); + Rental w_rental1 = new Rental(new NewMovie("Avengers"), 7); + w_customer.addRental(w_rental1); + String w_receipt = w_customer.statement(); + Assertions.assertEquals(w_receipt, "Rental Record for shraddha\n" + + "\tAvengers\t21.0\n" + + "Amount owed is 21.0\n" + + "You earned 2 frequent renter points"); + } + + +} \ No newline at end of file