From bcd53c9bf3d28de2f018dfdcff366babd8a569d2 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期二, 01 九月 2026 14:31:33 +0800
Subject: [PATCH] bug修复

---
 ruoyi-device/src/test/java/com/ruoyi/device/bts/BtsDevelopmentSimulatorRecordStepCycleTest.java |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/ruoyi-device/src/test/java/com/ruoyi/device/bts/BtsDevelopmentSimulatorRecordStepCycleTest.java b/ruoyi-device/src/test/java/com/ruoyi/device/bts/BtsDevelopmentSimulatorRecordStepCycleTest.java
index d348b80..f4ba1ac 100644
--- a/ruoyi-device/src/test/java/com/ruoyi/device/bts/BtsDevelopmentSimulatorRecordStepCycleTest.java
+++ b/ruoyi-device/src/test/java/com/ruoyi/device/bts/BtsDevelopmentSimulatorRecordStepCycleTest.java
@@ -38,6 +38,43 @@
     }
 
     @Test
+    void testSnapshotExposesPlanRowsEvenBeforeRecordsAreProduced() throws Exception
+    {
+        try (BtsDevelopmentSimulator simulator = new BtsDevelopmentSimulator(0,
+                new InMemoryBtsSimulatorStateStore()))
+        {
+            var snapshot = simulator.btsTest(1, 1);
+            assertTrue(snapshot.plannedCycleCount() > 0);
+            assertTrue(snapshot.rows().stream().anyMatch(row -> "STEP".equals(row.rowType())));
+            assertTrue(snapshot.rows().stream().anyMatch(row -> "CYCLE".equals(row.rowType())));
+            assertTrue(snapshot.rows().stream().anyMatch(row -> "END".equals(row.rowType())));
+            assertEquals(0, simulator.btsRecords(1, 1).size());
+        }
+    }
+
+    @Test
+    void testSnapshotKeepsCurrentStepVisibleWhenPlaybackEntersNextCycle() throws Exception
+    {
+        InMemoryBtsSimulatorStateStore store = new InMemoryBtsSimulatorStateStore();
+        try (BtsDevelopmentSimulator simulator = new BtsDevelopmentSimulator(0, store))
+        {
+            simulator.updateChannel(1, 1, true, DeviceWorkStatus.WORKING);
+            simulator.nextBtsCycle(1, 1);
+            var snapshot = simulator.btsTest(1, 1);
+            var expectedSteps = BtsExcelFixture.recordsForCycle(2).stream()
+                    .map(BtsExcelFixture.FixtureRecord::stepNo).distinct().toList();
+            var actualSteps = snapshot.rows().stream().filter(row -> "STEP".equals(row.rowType()))
+                    .map(BtsDevelopmentSimulator.BtsTestPlanRow::stepNo).toList();
+            assertEquals(expectedSteps, actualSteps);
+            assertTrue(snapshot.rows().stream().anyMatch(row -> "STEP".equals(row.rowType()) && "进行中".equals(row.executionStatus())));
+            assertTrue(snapshot.rows().stream().anyMatch(row -> "STEP".equals(row.rowType()) && "待执行".equals(row.executionStatus())));
+            var cycleRow = snapshot.rows().stream().filter(row -> "CYCLE".equals(row.rowType())).findFirst().orElseThrow();
+            assertEquals(2, cycleRow.stepNo());
+            assertEquals(2, cycleRow.cycleCount());
+        }
+    }
+
+    @Test
     void playbackSpeedPauseResumeAndRestartAreIndependentOfDeviceStatus() throws Exception
     {
         Instant start = Instant.parse("2026-08-31T00:00:00Z");

--
Gitblit v1.7.1