Index: ssts-web/src/test/java/test/forgon/disinfectsystem/recall/TestGetRecallSterilizationRecordRecords.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/recall/TestGetRecallSterilizationRecordRecords.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/recall/TestGetRecallSterilizationRecordRecords.java (revision 41303) @@ -0,0 +1,234 @@ +package test.forgon.disinfectsystem.recall; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +import org.hibernate.Query; +import org.hibernate.Session; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import com.forgon.databaseadapter.service.DateQueryAdapter; +import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.Sterilizer; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; +import com.forgon.disinfectsystem.recall.service.RecallRecordManagerImpl; +import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.service.SterilizationRecordManager; +import com.forgon.exception.SystemException; +import com.forgon.tools.hibernate.ObjectDao; + +public class TestGetRecallSterilizationRecordRecords { + @InjectMocks + private RecallRecordManagerImpl recallRecordManagerImpl; // 替换为包含被测试方法的类名 + + @Mock + private SupplyRoomConfigManager supplyRoomConfigManager; + @Mock + private ObjectDao objectDao; + @Mock + private SterilizationRecordManager sterilizationRecordManager; + @Mock + private DateQueryAdapter dateQueryAdapter; + @Mock + public Session hibernateSession; + // 测试数据 + private final String testYmd = "2024-01-15"; + private final Long testSterilizerId = 1L; + private final Integer testFrequency = 2; + private final String[] testDates = {"2024-01-01", "2024-01-31"}; + + private Sterilizer testSterilizer; + private SterilizationRecord testSterilizationRecord; + private SterilizationRecord testQualifiedRecord; + + private AutoCloseable closeable; + @Before + public void setUp() { + closeable = MockitoAnnotations.openMocks(this); + // 初始化测试数据 + testSterilizer = new Sterilizer(); + testSterilizer.setId(testSterilizerId); + testSterilizer.setName("Test Sterilizer"); + + testSterilizationRecord = new SterilizationRecord(); + testSterilizationRecord.setId(100L); + testSterilizationRecord.setEndDate(new Date()); + testSterilizationRecord.setBiologyResult(SterilizationRecord.MONITOR_RESULT_UNQUALIFIED); + testSterilizationRecord.setStatus(SterilizationRecord.STERILIZATION_STATUS_END); + + testQualifiedRecord = new SterilizationRecord(); + testQualifiedRecord.setId(50L); + testQualifiedRecord.setEndDate(new Date(System.currentTimeMillis() - 86400000)); // 前一天 + testQualifiedRecord.setBiologyResult(SterilizationRecord.MONITOR_RESULT_QUALIFIED); + testQualifiedRecord.setStatus(SterilizationRecord.STERILIZATION_STATUS_END); + + when(objectDao.getHibernateSession()).thenReturn(hibernateSession); + } + @After + public void tearDown() throws Exception { + closeable.close(); + } + @Test + public void testGetRecallSterilizationRecordRecords_Success() { + // 准备 Mock 行为 + when(supplyRoomConfigManager.getStartDateAndEndDate(null, testYmd)).thenReturn(testDates); + when(objectDao.getById("Sterilizer", testSterilizerId)).thenReturn(testSterilizer); + when(sterilizationRecordManager.getSterilizationRecordByFrequency(testDates[0], testDates[1], testSterilizerId, testFrequency)) + .thenReturn(testSterilizationRecord); + + // 模拟 HQL 查询 + Query mockQuery = mock(Query.class); + when(objectDao.getHibernateSession().createQuery(anyString())).thenReturn(mockQuery); + when(mockQuery.setParameter("sterilizerId", testSterilizerId)).thenReturn(mockQuery); + when(mockQuery.setParameter("biologyResult", SterilizationRecord.MONITOR_RESULT_QUALIFIED)).thenReturn(mockQuery); + when(mockQuery.setParameter("status", SterilizationRecord.STERILIZATION_STATUS_END)).thenReturn(mockQuery); + when(mockQuery.setMaxResults(1)).thenReturn(mockQuery); + when(mockQuery.list()).thenReturn(Arrays.asList(testQualifiedRecord)); + + // 模拟日期适配器 + when(dateQueryAdapter.dateAdapter(anyString())).thenAnswer(invocation -> { + String date = invocation.getArgument(0); + return "'" + date + "'"; + }); + + // 模拟第二个查询 + List middleRecords = new ArrayList<>(Arrays.asList(createMiddleRecord(75L))); + when(objectDao.findByHql(anyString())).thenReturn(middleRecords); + + // 执行测试 + List result = recallRecordManagerImpl.getRecallSterilizationRecordRecords(testYmd, testSterilizerId, testFrequency); + + // 验证结果 + assertNotNull(result); + assertEquals(2, result.size()); // middleRecords + testSterilizationRecord + assertTrue(result.contains(testSterilizationRecord)); + + // 验证方法调用 + verify(supplyRoomConfigManager).getStartDateAndEndDate(null, testYmd); + verify(objectDao).getById("Sterilizer", testSterilizerId); + verify(sterilizationRecordManager).getSterilizationRecordByFrequency(testDates[0], testDates[1], testSterilizerId, testFrequency); + } + + @Test(expected = SystemException.class) + public void testGetRecallSterilizationRecordRecords_RecordNotFound() { + // 准备 Mock 行为 + when(supplyRoomConfigManager.getStartDateAndEndDate(null, testYmd)).thenReturn(testDates); + when(objectDao.getById("Sterilizer", testSterilizerId)).thenReturn(testSterilizer); + when(sterilizationRecordManager.getSterilizationRecordByFrequency(testDates[0], testDates[1], testSterilizerId, testFrequency)) + .thenReturn(null); + + // 执行测试 - 应该抛出异常 + recallRecordManagerImpl.getRecallSterilizationRecordRecords(testYmd, testSterilizerId, testFrequency); + } + + @Test(expected = SystemException.class) + public void testGetRecallSterilizationRecordRecords_RecordNotEnded() { + // 准备测试数据 + testSterilizationRecord.setEndDate(null); + + // 准备 Mock 行为 + when(supplyRoomConfigManager.getStartDateAndEndDate(null, testYmd)).thenReturn(testDates); + when(objectDao.getById("Sterilizer", testSterilizerId)).thenReturn(testSterilizer); + when(sterilizationRecordManager.getSterilizationRecordByFrequency(testDates[0], testDates[1], testSterilizerId, testFrequency)) + .thenReturn(testSterilizationRecord); + + // 执行测试 - 应该抛出异常 + recallRecordManagerImpl.getRecallSterilizationRecordRecords(testYmd, testSterilizerId, testFrequency); + } + + @Test(expected = SystemException.class) + public void testGetRecallSterilizationRecordRecords_BiologyResultQualified() { + // 准备测试数据 + testSterilizationRecord.setBiologyResult(SterilizationRecord.MONITOR_RESULT_QUALIFIED); + + // 准备 Mock 行为 + when(supplyRoomConfigManager.getStartDateAndEndDate(null, testYmd)).thenReturn(testDates); + when(objectDao.getById("Sterilizer", testSterilizerId)).thenReturn(testSterilizer); + when(sterilizationRecordManager.getSterilizationRecordByFrequency(testDates[0], testDates[1], testSterilizerId, testFrequency)) + .thenReturn(testSterilizationRecord); + + // 执行测试 - 应该抛出异常 + recallRecordManagerImpl.getRecallSterilizationRecordRecords(testYmd, testSterilizerId, testFrequency); + } + + @Test(expected = SystemException.class) + public void testGetRecallSterilizationRecordRecords_NoQualifiedRecordFound() { + // 准备 Mock 行为 + when(supplyRoomConfigManager.getStartDateAndEndDate(null, testYmd)).thenReturn(testDates); + when(objectDao.getById("Sterilizer", testSterilizerId)).thenReturn(testSterilizer); + when(sterilizationRecordManager.getSterilizationRecordByFrequency(testDates[0], testDates[1], testSterilizerId, testFrequency)) + .thenReturn(testSterilizationRecord); + + // 模拟 HQL 查询返回空列表 + Query mockQuery = mock(Query.class); + when(objectDao.getHibernateSession().createQuery(anyString())).thenReturn(mockQuery); + when(mockQuery.setParameter("sterilizerId", testSterilizerId)).thenReturn(mockQuery); + when(mockQuery.setParameter("biologyResult", SterilizationRecord.MONITOR_RESULT_QUALIFIED)).thenReturn(mockQuery); + when(mockQuery.setParameter("status", SterilizationRecord.STERILIZATION_STATUS_END)).thenReturn(mockQuery); + when(mockQuery.setMaxResults(1)).thenReturn(mockQuery); + when(mockQuery.list()).thenReturn(Collections.emptyList()); + + // 执行测试 - 应该抛出异常 + recallRecordManagerImpl.getRecallSterilizationRecordRecords(testYmd, testSterilizerId, testFrequency); + } + + @Test + public void testGetRecallSterilizationRecordRecords_NoMiddleRecords() { + // 准备 Mock 行为 + when(supplyRoomConfigManager.getStartDateAndEndDate(null, testYmd)).thenReturn(testDates); + when(objectDao.getById("Sterilizer", testSterilizerId)).thenReturn(testSterilizer); + when(sterilizationRecordManager.getSterilizationRecordByFrequency(testDates[0], testDates[1], testSterilizerId, testFrequency)) + .thenReturn(testSterilizationRecord); + + // 模拟 HQL 查询 + Query mockQuery = mock(Query.class); + when(objectDao.getHibernateSession().createQuery(anyString())).thenReturn(mockQuery); + when(mockQuery.setParameter("sterilizerId", testSterilizerId)).thenReturn(mockQuery); + when(mockQuery.setParameter("biologyResult", SterilizationRecord.MONITOR_RESULT_QUALIFIED)).thenReturn(mockQuery); + when(mockQuery.setParameter("status", SterilizationRecord.STERILIZATION_STATUS_END)).thenReturn(mockQuery); + when(mockQuery.setMaxResults(1)).thenReturn(mockQuery); + when(mockQuery.list()).thenReturn(Arrays.asList(testQualifiedRecord)); + + // 模拟日期适配器 + when(dateQueryAdapter.dateAdapter(anyString())).thenAnswer(invocation -> { + String date = invocation.getArgument(0); + return "'" + date + "'"; + }); + + // 模拟第二个查询返回空列表 + when(objectDao.findByHql(anyString())).thenReturn(new ArrayList<>()); + + // 执行测试 + List result = recallRecordManagerImpl.getRecallSterilizationRecordRecords(testYmd, testSterilizerId, testFrequency); + + // 验证结果 + assertNotNull(result); + assertEquals(1, result.size()); // 只有 testSterilizationRecord + assertEquals(testSterilizationRecord, result.get(0)); + } + + // 辅助方法:创建中间的灭菌记录 + private SterilizationRecord createMiddleRecord(Long id) { + SterilizationRecord record = new SterilizationRecord(); + record.setId(id); + record.setEndDate(new Date(System.currentTimeMillis() - 43200000)); // 半天前 + record.setBiologyResult(SterilizationRecord.MONITOR_RESULT_QUALIFIED); + record.setStatus(SterilizationRecord.STERILIZATION_STATUS_END); + return record; + } +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/recall/AllTests.java =================================================================== diff -u -r26155 -r41303 --- ssts-web/src/test/java/test/forgon/disinfectsystem/recall/AllTests.java (.../AllTests.java) (revision 26155) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/recall/AllTests.java (.../AllTests.java) (revision 41303) @@ -10,7 +10,7 @@ * */ @RunWith(Suite.class) -@SuiteClasses({ TousseInstanceRecallTests.class }) +@SuiteClasses({ TousseInstanceRecallTests.class,TestGetRecallSterilizationRecordRecords.class }) public class AllTests { }