fix(aihr): require complete interview answers

This commit is contained in:
2026-07-14 14:35:18 +08:00
parent c4f98b9ab6
commit 269d3dc68c
4 changed files with 23 additions and 4 deletions
@@ -110,8 +110,8 @@ public class AihrInterviewService {
}
});
}
if (session.questions().stream().noneMatch(question -> !isBlank(session.answers().get(question.questionId())))) {
throw new IllegalArgumentException("请先提交至少一条有效面试回答");
if (session.questions().stream().anyMatch(question -> isBlank(session.answers().get(question.questionId())))) {
throw new IllegalArgumentException("请先完成全部面试回答");
}
ScoreResult score = scoreWithModel(session).orElseGet(() -> localScore(session));
String time = LocalDateTime.now().format(TIME_FORMAT);
@@ -199,7 +199,24 @@ class AihrInterviewServiceTest {
new FinishRequest(started.sessionId(), Map.of())
));
assertEquals("请先提交至少一条有效面试回答", error.getMessage());
assertEquals("请先完成全部面试回答", error.getMessage());
verify(jdbcTemplate, never()).update(anyString(), org.mockito.ArgumentMatchers.<Object[]>any());
}
@Test
@Tag("dev")
void interviewFinishRequiresAllRealAnswers() {
JdbcTemplate jdbcTemplate = mock(JdbcTemplate.class);
AihrModelSeedService modelService = mock(AihrModelSeedService.class);
when(modelService.tryChat(anyString(), anyString(), anyDouble())).thenReturn(Optional.empty());
AihrInterviewService service = new AihrInterviewService(new ObjectMapper(), modelService, jdbcTemplate);
var started = service.start(new StartRequest("candidate-partial", "候选人", "customer-service", "mobile"));
IllegalArgumentException error = assertThrows(IllegalArgumentException.class, () -> service.finish(
new FinishRequest(started.sessionId(), Map.of("q1", "先确认诉求并安抚情绪"))
));
assertEquals("请先完成全部面试回答", error.getMessage());
verify(jdbcTemplate, never()).update(anyString(), org.mockito.ArgumentMatchers.<Object[]>any());
}