Skip to content

Commit

Permalink
Create HousekeepingDetailsTest
Browse files Browse the repository at this point in the history
  • Loading branch information
LimZiJia committed Apr 15, 2024
1 parent 54d4a63 commit 0e3fd00
Show file tree
Hide file tree
Showing 2 changed files with 132 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.time.LocalDate;
import java.time.Period;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

Expand Down Expand Up @@ -108,7 +109,7 @@ public static String makeStoredDetailsReadable(String details) {
// Converting Period of preferred interval to a readable format
String[] s = details.split(" ");
// If valid s[0] = lastHousekeepingDate, s[1] = preferredInterval,
// s[2] = booking, s[3] = deferment
// s[2] = booking, s[3?] = am/pm, s[3/4] = deferment
String num = s[1].substring(1, s[1].length() - 1);
String unit = s[1].substring(s[1].length() - 1);
String unitString;
Expand All @@ -130,7 +131,7 @@ public static String makeStoredDetailsReadable(String details) {
}

// Makes null booking readable
String booking = s[2].equals("null") ? "No booking" : s[2];
String booking = s[2].equals("null") ? "No booking" : s[2] + " " + s[3];

return String.format("Last housekeeping: %s\nPreferred interval: %s %s\nBooking date: %s",
s[0], num, unitString, booking);
Expand Down Expand Up @@ -288,14 +289,10 @@ public boolean equals(Object other) {
HousekeepingDetails otherDetails = (HousekeepingDetails) other;

// First predicate of each && is for null values, second predicate is for non-null values
return ((lastHousekeepingDate == otherDetails.lastHousekeepingDate
|| lastHousekeepingDate.equals(otherDetails.lastHousekeepingDate))
&& (preferredInterval == otherDetails.preferredInterval
|| preferredInterval.equals(otherDetails.preferredInterval))
&& (booking == otherDetails.booking
|| booking.equals(otherDetails.booking))
&& (deferment == otherDetails.deferment
|| deferment.equals(otherDetails.deferment)));
return Objects.equals(lastHousekeepingDate, otherDetails.lastHousekeepingDate)
&& Objects.equals(preferredInterval, otherDetails.preferredInterval)
&& Objects.equals(booking, otherDetails.booking)
&& Objects.equals(deferment, otherDetails.deferment);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
package housekeeping.hub.model.person;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

class HousekeepingDetailsTest {
static final HousekeepingDetails HOUSEKEEPING_DETAILS_NULL = new HousekeepingDetails();
static final HousekeepingDetails HOUSEKEEPING_DETAILS_NO_BOOKING_DATE =
new HousekeepingDetails("2024-01-30 P2M null P0D");
static final HousekeepingDetails HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE =
new HousekeepingDetails("2024-01-30 P2M 2024-01-01 am P0D");
static final HousekeepingDetails HOUSEKEEPING_DETAILS_DIFFERENT_PERIOD =
new HousekeepingDetails("2024-01-30 P2M 2024-01-01 am P1D");
static final HousekeepingDetails HOUSEKEEPING_DETAILS_DIFFERENT_BOOKING_DATE =
new HousekeepingDetails("2024-01-30 P2M 2024-01-02 am P0D");
static final HousekeepingDetails HOUSEKEEPING_DETAILS_DIFFERENT_SESSION =
new HousekeepingDetails("2024-01-30 P2M 2024-01-01 pm P0D");
@Test
public void test_storageStringConstructor() {
// Empty details
assertTrue(HOUSEKEEPING_DETAILS_NULL.getBooking() == null);
assertTrue(HOUSEKEEPING_DETAILS_NULL.getDeferment() == null);
assertTrue(HOUSEKEEPING_DETAILS_NULL.getLastHousekeepingDate() == null);
assertTrue(HOUSEKEEPING_DETAILS_NULL.getPreferredInterval() == null);

// Details with no booking date
assertTrue(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE.getBooking() == null);

// Details with booking date
assertEquals("2024-01-01 am", HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.getBooking().toString());
assertEquals("2024-01-30", HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.getLastHousekeepingDate().toString());
assertEquals("P2M", HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.getPreferredInterval().toString());
assertEquals("P0D", HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.getDeferment().toString());
}

@Test
public void test_makeStoredDetailsReadable() {

// Empty details
assertEquals(HousekeepingDetails.NO_DETAILS_PROVIDED, HousekeepingDetails.makeStoredDetailsReadable("null"));

// Details with no booking date
assertEquals("Last housekeeping: 2024-02-28\n"
+ "Preferred interval: 14 days\n"
+ "Booking date: No booking",
HousekeepingDetails.makeStoredDetailsReadable("2024-02-28 P14D null P0D"));

// Details with booking date
assertEquals("Last housekeeping: 2024-01-30\n"
+ "Preferred interval: 2 months\n"
+ "Booking date: 2024-01-01 am",
HousekeepingDetails.makeStoredDetailsReadable("2024-01-30 P2M 2024-01-01 am P0D"));

assertEquals("Last housekeeping: 2024-01-30\n"
+ "Preferred interval: 2 weeks\n"
+ "Booking date: 2024-01-01 am",
HousekeepingDetails.makeStoredDetailsReadable("2024-01-30 P2W 2024-01-01 am P0D"));

assertEquals("Last housekeeping: 2024-01-30\n"
+ "Preferred interval: 2 years\n"
+ "Booking date: 2024-01-01 pm",
HousekeepingDetails.makeStoredDetailsReadable("2024-01-30 P2Y 2024-01-01 pm P0D"));

assertEquals("Last housekeeping: 2025-01-30\n"
+ "Preferred interval: 2 weeks\n"
+ "Booking date: 2024-01-01 pm",
HousekeepingDetails.makeStoredDetailsReadable("2025-01-30 P2W 2024-01-01 pm P0D"));

// Invalid details
assertEquals("Invalid housekeeping details format", HousekeepingDetails.makeStoredDetailsReadable(""));
assertEquals("Invalid housekeeping details format",
HousekeepingDetails.makeStoredDetailsReadable("2024-01-30 P2M"));
assertEquals("Invalid housekeeping details format",
HousekeepingDetails.makeStoredDetailsReadable("2024-01-30 P2M 2024-01-01 am"));
assertEquals("Invalid housekeeping details format",
HousekeepingDetails.makeStoredDetailsReadable("P2M 2024-01-30 2024-01-01 am P0D"));
assertEquals("Invalid housekeeping details format",
HousekeepingDetails.makeStoredDetailsReadable("2024-01-30 P2W 2024-01-01 zm P0D"));
assertEquals("Invalid housekeeping details format",
HousekeepingDetails.makeStoredDetailsReadable("2024-01-30 P2W 2024-01-01 zm P0Z"));
assertEquals("Invalid housekeeping details format",
HousekeepingDetails.makeStoredDetailsReadable("202401-30 P2W 2024-01-01 zm P0D"));
assertEquals("Invalid housekeeping details format",
HousekeepingDetails.makeStoredDetailsReadable("202401-30 P2W nul P0D"));


}

@Test
public void test_Equals() {
// Different types -> returns false
assertFalse(HOUSEKEEPING_DETAILS_NULL.equals(5));

// null -> returns false
assertFalse(HOUSEKEEPING_DETAILS_NULL.equals(null));

// Details should equal themselves
assertTrue(HOUSEKEEPING_DETAILS_NULL.equals(HOUSEKEEPING_DETAILS_NULL));
assertTrue(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE.equals(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE));
assertTrue(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.equals(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE));

// Different detail objects with same fields should be equal
assertTrue(HOUSEKEEPING_DETAILS_NULL.equals(new HousekeepingDetails()));
assertTrue(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE.equals(new HousekeepingDetails("2024-01-30 P2M null P0D")));
assertTrue(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.equals(
new HousekeepingDetails("2024-01-30 P2M 2024-01-01 am P0D")));

// Different fields should not be equal
assertFalse(HOUSEKEEPING_DETAILS_NULL.equals(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE));
assertFalse(HOUSEKEEPING_DETAILS_NULL.equals(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE));
assertFalse(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE.equals(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE));

// Different period should not be equal
assertFalse(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.equals(HOUSEKEEPING_DETAILS_DIFFERENT_PERIOD));

// Different booking date should not be equal
assertFalse(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.equals(HOUSEKEEPING_DETAILS_DIFFERENT_BOOKING_DATE));

// Different session should not be equal
assertFalse(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.equals(HOUSEKEEPING_DETAILS_DIFFERENT_SESSION));
}
}

0 comments on commit 0e3fd00

Please sign in to comment.