Files
mgm-daylight-mcrm-api-mobile/src/test/java/com/mgm/mcrm/roomcalendar/CalendarMockDataTest.java
T
2026-09-14 10:47:46 +08:00

74 lines
4.4 KiB
Java

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();
}
}