fix(aihr): protect disabled assignment scenarios
This commit is contained in:
+2
-1
@@ -1906,6 +1906,7 @@ public class AihrPracticeSeedService {
|
||||
ensureAssignmentTable();
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
String scenarioId = firstNonBlank(request == null ? null : request.scenarioId(), "fee-parking");
|
||||
ensureScenarioEnabledForStart(scenarioId);
|
||||
ScenarioSeed scenario = resolveScenario(scenarioId, null);
|
||||
String traineeName = firstNonBlank(request == null ? null : request.traineeName(), extPartyId);
|
||||
// Assignment source is a server-owned classification. Client supplied values
|
||||
@@ -1917,7 +1918,7 @@ public class AihrPracticeSeedService {
|
||||
INSERT INTO aihr_practice_assignment
|
||||
(tenant_id, ext_party_id, trainee_name, scenario_id, scenario_name, source, reason, status, create_time, update_time)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, '待训练', ?, ?)
|
||||
""", tenantId(), extPartyId, traineeName, scenario.id(), firstNonBlank(request == null ? null : request.scenarioName(), scenario.name()), source, reason, createdAt, createdAt);
|
||||
""", tenantId(), extPartyId, traineeName, scenario.id(), scenario.name(), source, reason, createdAt, createdAt);
|
||||
List<PracticeAssignmentResponse> rows = jdbcTemplate.query("""
|
||||
SELECT id, ext_party_id, trainee_name, scenario_id, scenario_name, source, reason, status, create_time,
|
||||
answer_text, answer_audio_url, answer_audio_oss_id, feedback, correct, score
|
||||
|
||||
+22
@@ -118,6 +118,28 @@ public class AihrPracticeSeedServiceTest {
|
||||
|
||||
assertTrue(method.contains("String source = \"manual\""));
|
||||
assertFalse(method.contains("request.source()"));
|
||||
assertTrue(method.contains("ensureScenarioEnabledForStart(scenarioId)"));
|
||||
assertTrue(method.contains("scenario.id(), scenario.name(), source"));
|
||||
assertFalse(method.contains("request.scenarioName()"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assignmentRejectsDisabledDatabaseScenario() {
|
||||
JdbcTemplate jdbcTemplate = mock(JdbcTemplate.class);
|
||||
when(jdbcTemplate.query(contains("SELECT enabled"), any(RowMapper.class), eq("000000"), eq("disabled-scene")))
|
||||
.thenAnswer(invocation -> mapOne(invocation, Map.of("enabled", "false")));
|
||||
AihrPracticeSeedService service = new AihrPracticeSeedService(new ObjectMapper(), jdbcTemplate, null, null);
|
||||
|
||||
ServiceException error = assertThrows(ServiceException.class, () -> service.createAssignment(new PracticeAssignmentRequest(
|
||||
"employee-a",
|
||||
"员工甲",
|
||||
"disabled-scene",
|
||||
"伪造的场景名称",
|
||||
"manual",
|
||||
"主管派发专项训练"
|
||||
)));
|
||||
|
||||
assertEquals("训练场景已停用,无法开始", error.getMessage());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user