package com.baiyue.lastleg.calendar; import org.junit.jupiter.api.Test; import org.springframework.web.server.ResponseStatusException; import java.time.LocalDate; import java.util.List; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; class WarehouseCalendarServiceTest { /** 读取资格不代替写权限,已有入库计划仍冻结时间。 */ @Test void keepsReadAccessSeparateFromWriteAndFreezesExistingPlans() { var repository=mock(WarehouseCalendarRepository.class); var arrivals=mock(com.baiyue.lastleg.service.ContainerWarehouseArrivalService.class); var service=new WarehouseCalendarService(repository,arrivals); var query=new WarehouseCalendarModels.Query(LocalDate.of(2026,11,1),LocalDate.of(2026,12,1),List.of("1")); var open=new WarehouseCalendarModels.Entry("1","D0001","CONT","Warehouse","W",null,null,0,0,false,null,false); var frozen=new WarehouseCalendarModels.Entry("2","D0002","CONT2","Warehouse","W",null,null,1,1,false,null,false); when(arrivals.resolve(List.of("1","2"))).thenReturn(List.of( new com.baiyue.lastleg.dto.ContainerArrivalTimeView("1",null,null,0,0,LocalDate.of(2026,11,2),true), new com.baiyue.lastleg.dto.ContainerArrivalTimeView("2",null,null,1,1,LocalDate.of(2026,11,3),false))); when(repository.calendar(query)).thenReturn(List.of(open,frozen)); assertTrue(service.calendar(query,true).get(0).canEdit()); assertFalse(service.calendar(query,true).get(1).canEdit()); assertTrue(service.calendar(query,false).stream().noneMatch(WarehouseCalendarModels.Entry::canEdit)); assertThrows(ResponseStatusException.class,()->service.calendar(new WarehouseCalendarModels.Query(query.from(),query.to(),List.of("1","1")),true)); } }