package tech.easyflow.manuagent.agent; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import com.fasterxml.jackson.databind.ObjectMapper; import com.mybatisflex.core.query.QueryWrapper; import java.util.List; import java.util.UUID; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import tech.easyflow.manuagent.entity.AgentEventEntity; import tech.easyflow.manuagent.mapper.AgentEventMapper; /** * 验证 Agent 事件回放查询在 ORM 迁移后保持原 JDBC 字段和游标语义。 */ class AgentEventServiceQueryTest { /** * 事件回放只读取响应所需字段,不加载仅用于外部追踪的事件标识。 */ @Test void shouldSelectOnlyEventViewColumnsWhenListingAfterCursor() { AgentEventMapper mapper = mock(AgentEventMapper.class); AgentEventEntity event = new AgentEventEntity(); event.setId(1L); event.setProjectId(UUID.randomUUID()); event.setPayloadJson("{}"); when(mapper.selectListByQuery(any(QueryWrapper.class))).thenReturn(List.of(event)); AgentEventService service = new AgentEventService(mapper, new ObjectMapper()); service.listAfter(event.getProjectId(), 0L, 100); ArgumentCaptor queryCaptor = ArgumentCaptor.forClass(QueryWrapper.class); verify(mapper).selectListByQuery(queryCaptor.capture()); String sql = queryCaptor.getValue().toSQL().toLowerCase(java.util.Locale.ROOT); assertThat(sql) .contains("project_id", "run_id", "event_type", "payload", "created_at") .doesNotContain("event_id"); } }