diff --git a/src/main/java/com/example/roommate/application/services/AdminApplicationService.java b/src/main/java/com/example/roommate/application/services/AdminApplicationService.java index 80c164ba..e7dd57ee 100644 --- a/src/main/java/com/example/roommate/application/services/AdminApplicationService.java +++ b/src/main/java/com/example/roommate/application/services/AdminApplicationService.java @@ -2,7 +2,8 @@ import com.example.roommate.annotations.ApplicationService; import com.example.roommate.application.data.RoomApplicationData; -import com.example.roommate.domain.services.RoomDomainService; +import com.example.roommate.interfaces.application.services.IAdminApplicationService; +import com.example.roommate.interfaces.domain.services.IRoomDomainService; import com.example.roommate.values.domainValues.RoomNumber; import com.example.roommate.values.forms.RoomDataForm; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; @@ -12,11 +13,11 @@ @SuppressFBWarnings(value="EI2", justification="RoomDomainService is properly injected") @ApplicationService -public class AdminApplicationService { +public class AdminApplicationService implements IAdminApplicationService { - final RoomDomainService roomDomainService; + final IRoomDomainService roomDomainService; - public AdminApplicationService(RoomDomainService roomDomainService) { + public AdminApplicationService(IRoomDomainService roomDomainService) { this.roomDomainService = roomDomainService; } diff --git a/src/main/java/com/example/roommate/application/services/BookingApplicationService.java b/src/main/java/com/example/roommate/application/services/BookingApplicationService.java index 402e2bd8..39949ab3 100644 --- a/src/main/java/com/example/roommate/application/services/BookingApplicationService.java +++ b/src/main/java/com/example/roommate/application/services/BookingApplicationService.java @@ -3,6 +3,7 @@ import com.example.roommate.annotations.ApplicationService; import com.example.roommate.application.data.RoomApplicationData; import com.example.roommate.exceptions.domainService.GeneralDomainException; +import com.example.roommate.interfaces.application.services.IBookingApplicationService; import com.example.roommate.utility.IterableSupport; import com.example.roommate.values.domainValues.BookedTimeframe; import com.example.roommate.values.domainValues.IntermediateBookDataForm; @@ -24,7 +25,7 @@ import java.time.DayOfWeek; @ApplicationService @SuppressFBWarnings(value="EI2", justification="RoomDomainService is properly injected") -public class BookingApplicationService { +public class BookingApplicationService implements IBookingApplicationService { RoomDomainService roomDomainService; diff --git a/src/main/java/com/example/roommate/controller/HomeController.java b/src/main/java/com/example/roommate/controller/HomeController.java index 2524d1dc..ec2255e8 100644 --- a/src/main/java/com/example/roommate/controller/HomeController.java +++ b/src/main/java/com/example/roommate/controller/HomeController.java @@ -1,6 +1,6 @@ package com.example.roommate.controller; -import com.example.roommate.application.services.BookingApplicationService; +import com.example.roommate.interfaces.application.services.IBookingApplicationService; import com.example.roommate.utility.IterableSupport; import com.example.roommate.values.domainValues.DayTimeFrame; import com.example.roommate.values.models.RoomHomeModel; @@ -16,9 +16,9 @@ @Controller() @SuppressFBWarnings(value="EI2", justification="BookingApplicationService is properly injected") public class HomeController { - private final BookingApplicationService bookingApplicationService; + private final IBookingApplicationService bookingApplicationService; @Autowired - public HomeController(BookingApplicationService bookingApplicationService) { + public HomeController(IBookingApplicationService bookingApplicationService) { this.bookingApplicationService = bookingApplicationService; } diff --git a/src/main/java/com/example/roommate/controller/RoomController.java b/src/main/java/com/example/roommate/controller/RoomController.java index cbd0b39f..50f8e79f 100644 --- a/src/main/java/com/example/roommate/controller/RoomController.java +++ b/src/main/java/com/example/roommate/controller/RoomController.java @@ -1,16 +1,16 @@ package com.example.roommate.controller; import com.example.roommate.annotations.AdminOnly; -import com.example.roommate.application.services.AdminApplicationService; import com.example.roommate.exceptions.ArgumentValidationException; import com.example.roommate.exceptions.persistence.NotFoundRepositoryException; +import com.example.roommate.interfaces.application.services.IAdminApplicationService; +import com.example.roommate.interfaces.application.services.IBookingApplicationService; import com.example.roommate.utility.IterableSupport; import com.example.roommate.values.domainValues.*; import com.example.roommate.exceptions.applicationService.NotFoundException; import com.example.roommate.interfaces.entities.IRoom; import com.example.roommate.exceptions.domainService.GeneralDomainException; import com.example.roommate.values.forms.BookDataForm; -import com.example.roommate.application.services.BookingApplicationService; import com.example.roommate.values.forms.RoomDataForm; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import jakarta.validation.Valid; @@ -30,12 +30,12 @@ @SuppressFBWarnings(value="EI2", justification="BookingApplicationService & AdminApplicationService are properly injected") public class RoomController { - private final BookingApplicationService bookingApplicationService; + private final IBookingApplicationService bookingApplicationService; - private final AdminApplicationService adminApplicationService; + private final IAdminApplicationService adminApplicationService; @Autowired - public RoomController(BookingApplicationService bookingApplicationService, AdminApplicationService adminApplicationService) { + public RoomController(IBookingApplicationService bookingApplicationService, IAdminApplicationService adminApplicationService) { this.bookingApplicationService = bookingApplicationService; this.adminApplicationService = adminApplicationService; } diff --git a/src/main/java/com/example/roommate/domain/services/RoomDomainService.java b/src/main/java/com/example/roommate/domain/services/RoomDomainService.java index ff064cdc..7d7d662a 100644 --- a/src/main/java/com/example/roommate/domain/services/RoomDomainService.java +++ b/src/main/java/com/example/roommate/domain/services/RoomDomainService.java @@ -2,6 +2,7 @@ import com.example.roommate.annotations.DomainService; import com.example.roommate.application.data.RoomApplicationData; +import com.example.roommate.interfaces.domain.services.IRoomDomainService; import com.example.roommate.interfaces.entities.IRoom; import com.example.roommate.interfaces.repositories.IItemRepository; import com.example.roommate.interfaces.repositories.IRoomRepository; @@ -23,7 +24,7 @@ @DomainService //mediate between Repository, domain; map forms to domain-objects/data @SuppressFBWarnings(value="EI2", justification="Repositories are properly injected, @Lazy self is required for transactions") -public class RoomDomainService { +public class RoomDomainService implements IRoomDomainService { IRoomRepository roomRepository; IItemRepository itemRepository; @@ -35,10 +36,10 @@ public RoomDomainService(IRoomRepository roomRepository, IItemRepository itemRep this.self = this; } @Autowired - public RoomDomainService(IRoomRepository roomRepository, IItemRepository itemRepository, @Lazy RoomDomainService self) { + public RoomDomainService(IRoomRepository roomRepository, IItemRepository itemRepository, @Lazy IRoomDomainService self) { this.roomRepository = roomRepository; this.itemRepository = itemRepository; - this.self = self; + this.self = (RoomDomainService) self; } public void addDummyDummy(){ diff --git a/src/main/java/com/example/roommate/interfaces/application/services/IAdminApplicationService.java b/src/main/java/com/example/roommate/interfaces/application/services/IAdminApplicationService.java new file mode 100644 index 00000000..ee3cde8e --- /dev/null +++ b/src/main/java/com/example/roommate/interfaces/application/services/IAdminApplicationService.java @@ -0,0 +1,7 @@ +package com.example.roommate.interfaces.application.services; + +import com.example.roommate.values.forms.RoomDataForm; + +public interface IAdminApplicationService { + void addRoom(RoomDataForm roomDataForm); +} diff --git a/src/main/java/com/example/roommate/interfaces/application/services/IBookingApplicationService.java b/src/main/java/com/example/roommate/interfaces/application/services/IBookingApplicationService.java new file mode 100644 index 00000000..7dd3caea --- /dev/null +++ b/src/main/java/com/example/roommate/interfaces/application/services/IBookingApplicationService.java @@ -0,0 +1,25 @@ +package com.example.roommate.interfaces.application.services; + +import com.example.roommate.exceptions.applicationService.NotFoundException; +import com.example.roommate.exceptions.domainService.GeneralDomainException; +import com.example.roommate.exceptions.persistence.NotFoundRepositoryException; +import com.example.roommate.interfaces.entities.IRoom; +import com.example.roommate.values.domainValues.IntermediateBookDataForm; +import com.example.roommate.values.domainValues.ItemName; +import com.example.roommate.values.models.RoomBookingModel; + +import java.util.Collection; +import java.util.List; +import java.util.UUID; + +public interface IBookingApplicationService { + void addBookEntry(IntermediateBookDataForm form) throws NotFoundException, GeneralDomainException; + Collection getItems(); + Collection getRooms(); + void addRoom(IRoom room); + IRoom findRoomByID(UUID roomID) throws NotFoundException; + List findAvailableRoomsWithItems(List items, String dateString, String startTimeString, String endTimeString); + void removeItemFromRoom(UUID roomID, String itemName) throws NotFoundRepositoryException; + void addItemToRoom(UUID roomID, String itemName) throws NotFoundRepositoryException; + void createItem(String itemName); +} diff --git a/src/main/java/com/example/roommate/interfaces/domain/services/IRoomDomainService.java b/src/main/java/com/example/roommate/interfaces/domain/services/IRoomDomainService.java new file mode 100644 index 00000000..a12139ae --- /dev/null +++ b/src/main/java/com/example/roommate/interfaces/domain/services/IRoomDomainService.java @@ -0,0 +1,23 @@ +package com.example.roommate.interfaces.domain.services; + +import com.example.roommate.application.data.RoomApplicationData; +import com.example.roommate.exceptions.persistence.NotFoundRepositoryException; +import com.example.roommate.interfaces.entities.IRoom; +import com.example.roommate.values.domainValues.BookedTimeframe; +import com.example.roommate.values.domainValues.ItemName; + +import java.util.Collection; +import java.util.List; +import java.util.UUID; + +public interface IRoomDomainService { + void addBooking(BookedTimeframe bookedTimeframe, UUID roomID) throws NotFoundRepositoryException; + void addRoom(RoomApplicationData roomApplicationData); + void removeRoom(RoomApplicationData room); + Collection getRooms(); + IRoom findRoomByID(UUID roomID) throws NotFoundRepositoryException; + List getItems(); + void removeItemFromRoom(UUID roomID, String itemName) throws NotFoundRepositoryException; + void addItemToRoom(UUID roomID, String itemName) throws NotFoundRepositoryException; + void createItem(String itemName); +} diff --git a/src/test/java/com/example/roommate/stubs/AdminApplicationServiceDummy.java b/src/test/java/com/example/roommate/stubs/AdminApplicationServiceDummy.java new file mode 100644 index 00000000..6dc7b6d6 --- /dev/null +++ b/src/test/java/com/example/roommate/stubs/AdminApplicationServiceDummy.java @@ -0,0 +1,11 @@ +package com.example.roommate.stubs; + +import com.example.roommate.interfaces.application.services.IAdminApplicationService; +import com.example.roommate.values.forms.RoomDataForm; + +public class AdminApplicationServiceDummy implements IAdminApplicationService { + @Override + public void addRoom(RoomDataForm roomDataForm) { + + } +} diff --git a/src/test/java/com/example/roommate/stubs/BookingApplicationServiceDummy.java b/src/test/java/com/example/roommate/stubs/BookingApplicationServiceDummy.java new file mode 100644 index 00000000..4466fb06 --- /dev/null +++ b/src/test/java/com/example/roommate/stubs/BookingApplicationServiceDummy.java @@ -0,0 +1,61 @@ +package com.example.roommate.stubs; + +import com.example.roommate.exceptions.applicationService.NotFoundException; +import com.example.roommate.exceptions.domainService.GeneralDomainException; +import com.example.roommate.exceptions.persistence.NotFoundRepositoryException; +import com.example.roommate.interfaces.application.services.IBookingApplicationService; +import com.example.roommate.interfaces.entities.IRoom; +import com.example.roommate.values.domainValues.IntermediateBookDataForm; +import com.example.roommate.values.domainValues.ItemName; +import com.example.roommate.values.models.RoomBookingModel; + +import java.util.Collection; +import java.util.List; +import java.util.UUID; + +public class BookingApplicationServiceDummy implements IBookingApplicationService { + @Override + public void addBookEntry(IntermediateBookDataForm form) throws NotFoundException, GeneralDomainException { + + } + + @Override + public Collection getItems() { + return null; + } + + @Override + public Collection getRooms() { + return null; + } + + @Override + public void addRoom(IRoom room) { + + } + + @Override + public IRoom findRoomByID(UUID roomID) throws NotFoundException { + return null; + } + + @Override + public List findAvailableRoomsWithItems(List items, String dateString, String startTimeString, String endTimeString) { + return null; + } + + @Override + public void removeItemFromRoom(UUID roomID, String itemName) throws NotFoundRepositoryException { + + } + + @Override + public void addItemToRoom(UUID roomID, String itemName) throws NotFoundRepositoryException { + + } + + @Override + public void createItem(String itemName) { + + } +} diff --git a/src/test/java/com/example/roommate/stubs/RoomDomainServiceDummy.java b/src/test/java/com/example/roommate/stubs/RoomDomainServiceDummy.java new file mode 100644 index 00000000..1576a205 --- /dev/null +++ b/src/test/java/com/example/roommate/stubs/RoomDomainServiceDummy.java @@ -0,0 +1,59 @@ +package com.example.roommate.stubs; + +import com.example.roommate.application.data.RoomApplicationData; +import com.example.roommate.exceptions.persistence.NotFoundRepositoryException; +import com.example.roommate.interfaces.domain.services.IRoomDomainService; +import com.example.roommate.interfaces.entities.IRoom; +import com.example.roommate.values.domainValues.BookedTimeframe; +import com.example.roommate.values.domainValues.ItemName; + +import java.util.Collection; +import java.util.List; +import java.util.UUID; + +public class RoomDomainServiceDummy implements IRoomDomainService { + @Override + public void addBooking(BookedTimeframe bookedTimeframe, UUID roomID) throws NotFoundRepositoryException { + + } + + @Override + public void addRoom(RoomApplicationData roomApplicationData) { + + } + + @Override + public void removeRoom(RoomApplicationData room) { + + } + + @Override + public Collection getRooms() { + return null; + } + + @Override + public IRoom findRoomByID(UUID roomID) throws NotFoundRepositoryException { + return null; + } + + @Override + public List getItems() { + return null; + } + + @Override + public void removeItemFromRoom(UUID roomID, String itemName) throws NotFoundRepositoryException { + + } + + @Override + public void addItemToRoom(UUID roomID, String itemName) throws NotFoundRepositoryException { + + } + + @Override + public void createItem(String itemName) { + + } +} diff --git a/src/test/java/com/example/roommate/tests/controller/booking/GetBookTest.java b/src/test/java/com/example/roommate/tests/controller/booking/GetBookTest.java index 21e1ace9..1966b15d 100644 --- a/src/test/java/com/example/roommate/tests/controller/booking/GetBookTest.java +++ b/src/test/java/com/example/roommate/tests/controller/booking/GetBookTest.java @@ -2,21 +2,35 @@ import com.example.roommate.annotations.TestClass; import com.example.roommate.annotations.WithMockOAuth2User; +import com.example.roommate.application.services.AdminApplicationService; +import com.example.roommate.application.services.BookingApplicationService; +import com.example.roommate.controller.RoomController; +import com.example.roommate.interfaces.application.services.IAdminApplicationService; +import com.example.roommate.interfaces.application.services.IBookingApplicationService; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.FilterType; import org.springframework.test.web.servlet.MockMvc; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; -@WebMvcTest +@WebMvcTest(controllers = {RoomController.class}, excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = {AdminApplicationService.class, BookingApplicationService.class})) @TestClass public class GetBookTest { @Autowired MockMvc mvc; + + @MockBean + IAdminApplicationService adminApplicationService; + + @MockBean + IBookingApplicationService bookingApplicationService; @Test @DisplayName("A Get-Request on /book returns home.html")