diff --git a/sdd/Software_Detail_Design.docx b/sdd/Software_Detail_Design.docx index 677b78e..d420704 100644 Binary files a/sdd/Software_Detail_Design.docx and b/sdd/Software_Detail_Design.docx differ diff --git a/src/java/lodge/TestReservations.java b/src/java/lodge/TestReservations.java index 16faf82..b0b0323 100644 --- a/src/java/lodge/TestReservations.java +++ b/src/java/lodge/TestReservations.java @@ -7,104 +7,110 @@ package lodge; import java.time.ZoneId; import java.time.ZonedDateTime; +import java.time.temporal.ChronoUnit; import lodge.data.Account; import lodge.data.Address; import lodge.data.DuplicateObjectException; import lodge.data.EmailAddress; - import lodge.data.ReservationStatusEnum; +import lodge.reservation.IReservation; +import lodge.reservation.Reservation; import lodge.reservationsystem.AccomodationManager; import lodge.reservationsystem.CabinReservation; import lodge.reservationsystem.HotelReservation; import lodge.reservationsystem.HouseReservation; -import lodge.reservation.Reservation; -import lodge.reservation.IReservation; +/** + * The Tests for the ReservationSystem Module + * + *
+ * This class main function acts as a driver function to run the test functions. + *
+ * + * @author Sherwin Price + * @version 1.0 + * @since 2025 + */ public final class TestReservations { + // Request that Manager updates specific account’s files with data stored in + static void Test_AddAccount(AccomodationManager mgr, Account acct) throws Exception { + mgr.AddAccount(acct); + + // 4. Request that Manager updates specific account’s files with data stored in + // memory + mgr.UpdateAccount(acct); + } + + static void Test_AddReservation(AccomodationManager mgr, Account acct, Reservation rsrv, Address mlAddr, + ZonedDateTime zdtStrt) + throws Exception { + + rsrv.setMailing_address(mlAddr); + rsrv.setNumberOfBeds(2); + rsrv.setNumberOfFloors(1); + rsrv.setNumberOfBedRooms(1); + rsrv.setSquareFeet(450); + rsrv.setReservation_start_date(zdtStrt); + rsrv.setReservation_end_date(zdtStrt.plus(4, ChronoUnit.DAYS)); + + mgr.addReservation(acct, rsrv); + + mgr.UpdateAccount(acct); + } + public static void main(String[] args) throws Exception { + // Configure data repository AccomodationManager mgr = new AccomodationManager(getRepositoryConfig.getPath()); - // 1. Get the list of loaded accounts from Manager + // 1. Get the list of loaded accounts from Manager mgr.loadAll(); // 2. Retrieve a loaded account object that matches a specific account number - mgr.retrieveAccount("A1450981765"); // 3. Add new account object to the list managed by Manager (if account object // already exists on add action with the same account number, it is considered // an error) - Account acct = mgr.newAccount("701-456-7890", + Test_AddAccount(mgr, mgr.newAccount("701-456-7890", new Address("10 wilco ave", "wilco", "WY", "82801"), - new EmailAddress("wilco@wyommin.net")); - mgr.AddAccount(acct); + new EmailAddress("wilco@wyommin.net"))); - // 4. Request that Manager updates specific account’s files with data stored in - // memory - mgr.UpdateAccount(acct); - - Account acct2 = mgr.newAccount("301-356-3890", + Test_AddAccount(mgr, mgr.newAccount("301-356-3890", new Address("30 Amstadam ave", "New York", "NY", "12010"), - new EmailAddress("newbee952@aol.com")); - mgr.AddAccount(acct2); + new EmailAddress("newbee952@aol.com"))); + // 5. Add draft lodging reservation to an account (if reservation object already // exists with the same reservation number, it is considered an error) + Account acct2 = mgr.retrieveLoadedAccounts().get(1); + Test_AddReservation(mgr, acct2, + new HotelReservation( + new Address("400 hotel ave", "Maryland City", "MD", "20723")), + new Address("400 hotel ave", "Maryland City", "MD", "20723"), + ZonedDateTime.of(2025, 9, 05, 10, 0, 0, 0, ZoneId.of("UTC"))); - HotelReservation hotel = new HotelReservation( - new Address("400 hotel ave", "Maryland City", "CA", "20723")); - hotel.setMailing_address(new Address("400 hotel ave", "Maryland City", "MD", "20723")); - hotel.setNumberOfBeds(2); - hotel.setNumberOfFloors(1); - hotel.setNumberOfBedRooms(1); - hotel.setSquareFeet(450); - hotel.setReservation_start_date(ZonedDateTime.of(2025, 07, 05, 10, 0, 0, 0, ZoneId.of("UTC"))); - hotel.setReservation_end_date(ZonedDateTime.of(2025, 07, 07, 22, 0, 0, 0, ZoneId.of("UTC"))); - mgr.addReservation(acct, hotel); + Account acct1 = mgr.retrieveLoadedAccounts().get(0); + Test_AddReservation(mgr, acct2, + new CabinReservation(new Address("30 cabin ave", "Carnelian", "CA", "96140")), + new Address("30 cabin ave", "Carnelian Bay", "CA", "96140"), + ZonedDateTime.of(2025, 9, 05, 10, 0, 0, 0, ZoneId.of("UTC"))); - mgr.UpdateAccount(acct); + Test_AddReservation(mgr, acct1, + new CabinReservation(new Address("40 cabin ave", "Carnelian", "CA", "96140")), + new Address("40 cabin ave", "Carnelian Bay", "CA", "96140"), + ZonedDateTime.of(2025, 9, 05, 10, 0, 0, 0, ZoneId.of("UTC"))); - CabinReservation cabin2 = new CabinReservation(new Address("30 cabin ave", "Carnelian", "CA", "96140")); - cabin2.setMailing_address(new Address("30 cabin ave", "Carnelian Bay", "CA", "96140")); - cabin2.setNumberOfBeds(4); - cabin2.setNumberOfFloors(2); - cabin2.setNumberOfBedRooms(3); - cabin2.setSquareFeet(806); - cabin2.setReservation_start_date(ZonedDateTime.of(2025, 9, 05, 10, 0, 0, 0, ZoneId.of("UTC"))); - cabin2.setReservation_end_date(ZonedDateTime.of(2025, 11, 30, 22, 0, 0, 0, ZoneId.of("UTC"))); - mgr.addReservation(acct2, cabin2); - mgr.UpdateAccount(acct2); - - CabinReservation cabin = new CabinReservation(new Address("40 cabin ave", "Carnelian", "CA", "96140")); - cabin.setMailing_address(new Address("40 cabin ave", "Carnelian Bay", "CA", "96140")); - cabin.setNumberOfBeds(4); - cabin.setNumberOfFloors(2); - cabin.setNumberOfBedRooms(3); - cabin.setSquareFeet(806); - cabin.setReservation_start_date(ZonedDateTime.of(2025, 9, 05, 10, 0, 0, 0, ZoneId.of("UTC"))); - cabin.setReservation_end_date(ZonedDateTime.of(2025, 11, 30, 22, 0, 0, 0, ZoneId.of("UTC"))); - mgr.addReservation(acct, cabin); - - mgr.UpdateAccount(acct); - - HouseReservation house = new HouseReservation( - new Address("3000 Osage ave", "GreenBelt", "MD", "20740")); - house.setMailing_address(new Address("40012 College ave", "College Park", "MD", "20740")); - house.setNumberOfBeds(4); - house.setNumberOfFloors(3); - house.setNumberOfBedRooms(3); - house.setSquareFeet(1400); - house.setReservation_start_date(ZonedDateTime.of(2025, 11, 5, 10, 0, 0, 0, ZoneId.of("UTC"))); - house.setReservation_end_date(ZonedDateTime.of(2025, 11, 15, 22, 0, 0, 0, ZoneId.of("UTC"))); - mgr.addReservation(acct, house); - - mgr.UpdateAccount(acct); + Test_AddReservation(mgr, acct1, + new HouseReservation(new Address("3000 Osage ave", "GreenBelt", "MD", "20740")), + new Address("40012 College ave", "College Park", "MD", "20740"), + ZonedDateTime.of(2025, 9, 05, 10, 0, 0, 0, ZoneId.of("UTC"))); try { - if( mgr.addReservation(acct, cabin) ){ - mgr.UpdateAccount(mgr.retrieveAccount(acct.getAccount_number())); + IReservation irsrv = acct1.getAllReservations().next(); + if (mgr.addReservation(acct1, acct1.findReservation(irsrv.getReservation_number()))) { + mgr.UpdateAccount(mgr.retrieveAccount(irsrv.getAccountNumber())); } } catch (DuplicateObjectException e) { System.out.println(e.getMessage()); @@ -113,21 +119,22 @@ public final class TestReservations { Account account = mgr.retrieveLoadedAccounts().get(0); // 6. Complete reservation that is associated with an account - Reservation rsrv = account.findReservation(house.getReservation_number()); - house.Change(rsrv, ReservationStatusEnum.Completed); - mgr.UpdateAccount(mgr.retrieveAccount(acct.getAccount_number())); + IReservation irsrv = account.getAllReservations().next(); + Reservation rsrv = account.findReservation(irsrv.getReservation_number()); + rsrv.Change(rsrv, ReservationStatusEnum.Completed); + mgr.UpdateAccount(mgr.retrieveAccount(account.getAccount_number())); // 7. Cancel reservation that is associated with an account account = mgr.retrieveLoadedAccounts().getLast(); IReservation ir = account.getAllReservations().next(); - rsrv = (Reservation)ir; + rsrv = (Reservation) ir; rsrv.Change(rsrv, ReservationStatusEnum.Canceled); mgr.UpdateAccount(mgr.retrieveAccount(rsrv.getAccountNumber())); // 8. Change reservation values that can be changed (if reservation is // cancelled, completed, or for past date, it is considered an error) rsrv.Change(rsrv, ReservationStatusEnum.Completed); - house.update(house); + rsrv.update(rsrv); // 9. Request for price per night to be calculated and returned for a // per night @@ -135,8 +142,8 @@ public final class TestReservations { // 10. Request for total reservation price to be calculated and returned for // specific reservation - account.findReservation(house.getReservation_number()); - house.calculatePrice(); + rsrv = account.findReservation(rsrv.getReservation_number()); + rsrv.calculatePrice(); mgr.showReservationList(); diff --git a/src/resources/acc-A1450981765.json b/src/resources/acc-A1450981765.json old mode 100644 new mode 100755 index d5e1691..cc2dbd5 --- a/src/resources/acc-A1450981765.json +++ b/src/resources/acc-A1450981765.json @@ -1,36 +1,41 @@ -{ - "Account": { - "account_number": "A1450981765", - "phone_number": "701-456-7890", - "mailing_address": { - "Address": { - "street": "10 wilco ave", - "city": "wilco", - "state": "WY", - "zip": "82801" - } - }, - "email_address": { - "EmailAddress": { - "email": "wilco@wyommin.net" - } - }, - "reservations": [ - { - "HotelReservation": { - "reservation_number": "R0123077641" - } - }, - { - "CabinReservation": { - "reservation_number": "R0535276622" - } - }, - { - "HouseReservation": { - "reservation_number": "R0499811708" - } - } - ] - } +{ + "Account": { + "account_number": "A1450981765", + "phone_number": "701-456-7890", + "mailing_address": { + "Address": { + "street": "10 wilco ave", + "city": "wilco", + "state": "WY", + "zip": "82801" + } + }, + "email_address": { + "EmailAddress": { + "email": "wilco@wyommin.net" + } + }, + "reservations": [ + { + "CabinReservation": { + "reservation_number": "R0535276622" + } + }, + { + "HouseReservation": { + "reservation_number": "R0499811708" + } + }, + { + "CabinReservation": { + "reservation_number": "R0535276622" + } + }, + { + "HouseReservation": { + "reservation_number": "R0499811708" + } + } + ] + } } \ No newline at end of file diff --git a/src/resources/acc-A2074212339.json b/src/resources/acc-A2074212339.json old mode 100644 new mode 100755 index 88c61cd..17d6d23 --- a/src/resources/acc-A2074212339.json +++ b/src/resources/acc-A2074212339.json @@ -1 +1,41 @@ -{ "Account":{"account_number": "A2074212339","phone_number": "301-356-3890","mailing_address": { "Address":{"street": "30 Amstadam ave","city": "New York","state": "NY","zip": "12010"}},"email_address": { "EmailAddress":{"email": "newbee952@aol.com"}},"reservations":[{"CabinReservation":{"reservation_number":"R2042828431"}}]}} \ No newline at end of file +{ + "Account": { + "account_number": "A2074212339", + "phone_number": "301-356-3890", + "mailing_address": { + "Address": { + "street": "30 Amstadam ave", + "city": "New York", + "state": "NY", + "zip": "12010" + } + }, + "email_address": { + "EmailAddress": { + "email": "newbee952@aol.com" + } + }, + "reservations": [ + { + "HotelReservation": { + "reservation_number": "R0123087344" + } + }, + { + "CabinReservation": { + "reservation_number": "R2042828431" + } + }, + { + "HotelReservation": { + "reservation_number": "R0123087344" + } + }, + { + "CabinReservation": { + "reservation_number": "R2042828431" + } + } + ] + } +} \ No newline at end of file diff --git a/src/resources/rsv-R0123077641.json b/src/resources/rsv-R0123077641.json deleted file mode 100644 index 3e82b0d..0000000 --- a/src/resources/rsv-R0123077641.json +++ /dev/null @@ -1 +0,0 @@ -{ "HotelReservation":{"reservation_type": "HotelReservation","reservation_number": "R0123077641","reservation_status": "Draft","reservation_start_date": "2025-07-05T10:00Z[UTC]","reservation_end_date": "2025-07-07T22:00Z[UTC]","account_number": "A1450981765","physical_address": { "Address":{"street": "400 hotel ave","city": "Maryland City","state": "CA","zip": "20723"}},"mailing_address": { "Address":{"street": "400 hotel ave","city": "Maryland City","state": "MD","zip": "20723"}},"kitchen": "Kitchenette","numberOfBeds": "2","numberOfBedRooms": "1","numberOfBathRooms": "1","numberOfFloors": "1","squareFeet": "450","price": "290.0"}} \ No newline at end of file diff --git a/src/resources/rsv-R0123087344.json b/src/resources/rsv-R0123087344.json new file mode 100755 index 0000000..e0097f5 --- /dev/null +++ b/src/resources/rsv-R0123087344.json @@ -0,0 +1 @@ +{ "HotelReservation":{"reservation_type": "HotelReservation","reservation_number": "R0123087344","reservation_status": "Draft","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-09-09T10:00Z[UTC]","account_number": "A2074212339","physical_address": { "Address":{"street": "400 hotel ave","city": "Maryland City","state": "MD","zip": "20723"}},"mailing_address": { "Address":{"street": "400 hotel ave","city": "Maryland City","state": "MD","zip": "20723"}},"kitchen": "Kitchenette","numberOfBeds": "2","numberOfBedRooms": "1","numberOfBathRooms": "1","numberOfFloors": "1","squareFeet": "450","price": "410.0"}} \ No newline at end of file diff --git a/src/resources/rsv-R0499811708.json b/src/resources/rsv-R0499811708.json old mode 100644 new mode 100755 index fdb62ed..d09837e --- a/src/resources/rsv-R0499811708.json +++ b/src/resources/rsv-R0499811708.json @@ -1 +1 @@ -{ "HouseReservation":{"reservation_type": "HouseReservation","reservation_number": "R0499811708","reservation_status": "Completed","reservation_start_date": "2025-11-05T10:00Z[UTC]","reservation_end_date": "2025-11-15T22:00Z[UTC]","account_number": "A1450981765","physical_address": { "Address":{"street": "3000 Osage ave","city": "GreenBelt","state": "MD","zip": "20740"}},"mailing_address": { "Address":{"street": "40012 College ave","city": "College Park","state": "MD","zip": "20740"}},"kitchen": "Kitchenette","numberOfBeds": "4","numberOfBedRooms": "3","numberOfBathRooms": "1","numberOfFloors": "3","squareFeet": "1400","price": "1215.0"}} \ No newline at end of file +{ "HouseReservation":{"reservation_type": "HouseReservation","reservation_number": "R0499811708","reservation_status": "Draft","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-09-09T10:00Z[UTC]","account_number": "A1450981765","physical_address": { "Address":{"street": "3000 Osage ave","city": "GreenBelt","state": "MD","zip": "20740"}},"mailing_address": { "Address":{"street": "40012 College ave","city": "College Park","state": "MD","zip": "20740"}},"kitchen": "Kitchenette","numberOfBeds": "2","numberOfBedRooms": "1","numberOfBathRooms": "1","numberOfFloors": "1","squareFeet": "450","price": "360.0"}} \ No newline at end of file diff --git a/src/resources/rsv-R0535276622.json b/src/resources/rsv-R0535276622.json old mode 100644 new mode 100755 index 3e99f9a..42a2f8c --- a/src/resources/rsv-R0535276622.json +++ b/src/resources/rsv-R0535276622.json @@ -1 +1 @@ -{ "CabinReservation":{"reservation_type": "CabinReservation","reservation_number": "R0535276622","reservation_status": "Draft","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-11-30T22:00Z[UTC]","account_number": "A1450981765","physical_address": { "Address":{"street": "40 cabin ave","city": "Carnelian","state": "CA","zip": "96140"}},"mailing_address": { "Address":{"street": "40 cabin ave","city": "Carnelian Bay","state": "CA","zip": "96140"}},"kitchen": "Kitchenette","numberOfBeds": "4","numberOfBedRooms": "3","numberOfBathRooms": "1","numberOfFloors": "2","squareFeet": "806","price": "10200.0"}} \ No newline at end of file +{ "CabinReservation":{"reservation_type": "CabinReservation","reservation_number": "R0535276622","reservation_status": "Draft","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-09-09T10:00Z[UTC]","account_number": "A1450981765","physical_address": { "Address":{"street": "40 cabin ave","city": "Carnelian","state": "CA","zip": "96140"}},"mailing_address": { "Address":{"street": "40 cabin ave","city": "Carnelian Bay","state": "CA","zip": "96140"}},"kitchen": "Kitchenette","numberOfBeds": "2","numberOfBedRooms": "1","numberOfBathRooms": "1","numberOfFloors": "1","squareFeet": "450","price": "360.0"}} \ No newline at end of file diff --git a/src/resources/rsv-R2042828431.json b/src/resources/rsv-R2042828431.json old mode 100644 new mode 100755 index 5c10356..94b082b --- a/src/resources/rsv-R2042828431.json +++ b/src/resources/rsv-R2042828431.json @@ -1 +1 @@ -{ "CabinReservation":{"reservation_type": "CabinReservation","reservation_number": "R2042828431","reservation_status": "Canceled","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-11-30T22:00Z[UTC]","account_number": "A2074212339","physical_address": { "Address":{"street": "30 cabin ave","city": "Carnelian","state": "CA","zip": "96140"}},"mailing_address": { "Address":{"street": "30 cabin ave","city": "Carnelian Bay","state": "CA","zip": "96140"}},"kitchen": "Kitchenette","numberOfBeds": "4","numberOfBedRooms": "3","numberOfBathRooms": "1","numberOfFloors": "2","squareFeet": "806","price": "10200.0"}} \ No newline at end of file +{ "CabinReservation":{"reservation_type": "CabinReservation","reservation_number": "R2042828431","reservation_status": "Draft","reservation_start_date": "2025-09-05T10:00Z[UTC]","reservation_end_date": "2025-09-09T10:00Z[UTC]","account_number": "A2074212339","physical_address": { "Address":{"street": "30 cabin ave","city": "Carnelian","state": "CA","zip": "96140"}},"mailing_address": { "Address":{"street": "30 cabin ave","city": "Carnelian Bay","state": "CA","zip": "96140"}},"kitchen": "Kitchenette","numberOfBeds": "2","numberOfBedRooms": "1","numberOfBathRooms": "1","numberOfFloors": "1","squareFeet": "450","price": "360.0"}} \ No newline at end of file