package com.mgm.mcrm.roomcalendar; import com.mgm.mcrm.roomcalendar.services.*; import com.mgm.mcrm.appsetting.services.SettingService; import com.mgm.mcrm.appsetting.repositories.SettingDao; import com.mgm.mcrm.basesetting.property.repositories.PropertyDao; import com.mgm.mcrm.basesetting.room.repositories.RoomDao; import com.mgm.mcrm.common.services.MGMApiService; import org.junit.jupiter.api.Test; import org.springframework.test.util.ReflectionTestUtils; import java.util.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; class CalendarMockDataTest { @Test void catalogAndQueriesAgreeForEveryHotelAcrossMonthBoundary() { var catalog = CalendarMockData.metadata().getPropertyList(); var hotels = new ArrayList<>(catalog.subList(0,2)); hotels.addAll(catalog.get(2).getOtherProperties()); assertEquals(6,hotels.size()); int count=0; for (var hotel:hotels) { assertTrue(hotel.getName().contains("[MOCK]")); String rooms=String.join(",",hotel.getRoomTypes().stream().map(t->t.getCode()).toList()); var rows=CalendarMockData.records("",hotel.getCode(),rooms,"2026-09-28","2026-10-03"); assertEquals(hotel.getRoomTypes().size()*6,rows.size()); assertTrue(rows.stream().anyMatch(row->row.getDate().equals("2026-10-01"))); assertEquals(rows,CalendarMockData.records("",hotel.getCode(),rooms,"2026-09-28","2026-10-03")); count+=rows.size(); } assertEquals(96,count); } @Test void variedAvailabilityAndPlayerQualificationAreDeterministic() { var rows=CalendarMockData.records("80001","SIM_COTAI","CR,ES","2026-09-01","2026-10-31"); assertTrue(rows.stream().anyMatch(r->r.getRoomCount()==0)); assertTrue(rows.stream().anyMatch(r->r.getRoomCount()>0)); assertEquals(Set.of(0,1),new HashSet<>(rows.stream().map(r->r.getBookingDateQualificationFlag()).toList())); assertNotEquals(rows,CalendarMockData.records("80002","SIM_COTAI","CR,ES","2026-09-01","2026-10-31")); assertEquals(4,CalendarMockData.records("","SIM_MO,SIM_LB","MO_STD,LB_GRAND","2026-09-01","2026-09-02").size()); } @Test void invalidRequestsFailInsteadOfProducingPlausibleData() { assertThrows(IllegalArgumentException.class,()->CalendarMockData.records("","MC","CR","2026-09-01","2026-09-02")); assertThrows(IllegalArgumentException.class,()->CalendarMockData.records("","SIM_COTAI","GR","2026-09-01","2026-09-02")); assertThrows(IllegalArgumentException.class,()->CalendarMockData.records("","SIM_COTAI","CR","2026-09-02","2026-09-01")); assertThrows(IllegalArgumentException.class,()->CalendarMockData.records("","SIM_COTAI","CR","2026-01-01","2026-12-31")); } @Test void enabledMocksDoNotReadDatabaseOrCallEsbAndDisabledSettingsUseDatabase() throws Exception { var service=new RoomCalendarService(); var properties=mock(PropertyDao.class); var rooms=mock(RoomDao.class); var esb=mock(MGMApiService.class); ReflectionTestUtils.setField(service,"propertyDao",properties); ReflectionTestUtils.setField(service,"roomDao",rooms); ReflectionTestUtils.setField(service,"mgmApiService",esb); ReflectionTestUtils.setField(service,"calendarDataMockEnabled",true); assertEquals(3,service.getPropertyRoomType().getPropertyList().size()); var result=service.getRoomCalendar(Map.of("Property","SIM_COTAI","RoomType","CR", "StartDate","2026-09-01","EndDate","2026-09-03")); assertTrue(result.isSuccess()); assertEquals(3,result.getData().size()); assertEquals("CALENDAR_MOCK_DATA",result.getMessage()); verifyNoInteractions(properties,rooms,esb); var settings=new SettingService(); var dao=mock(SettingDao.class); ReflectionTestUtils.setField(settings,"settingDao",dao); ReflectionTestUtils.setField(settings,"calendarDataMockEnabled",true); assertEquals("60",settings.getCalendarSetting().stream() .filter(s->s.getKeys().equals("CALENDAR_VIEW_VISIBLE_DAYS")).findFirst().orElseThrow().getKeyValues()); verifyNoInteractions(dao); ReflectionTestUtils.setField(settings,"calendarDataMockEnabled",false); when(dao.findAll()).thenReturn(List.of()); assertTrue(settings.getCalendarSetting().isEmpty()); verify(dao).findAll(); } }