Validate sortie role slot alignment
This commit is contained in:
@@ -251,6 +251,7 @@ function validateSortie(errors, scenario, classKeys, formationRoles, terrainRule
|
||||
}
|
||||
});
|
||||
const recommendedUnitIds = new Set();
|
||||
const recommendedRoleByUnitId = new Map();
|
||||
sortie.recommendedUnits.forEach((recommendation) => {
|
||||
if (recommendedUnitIds.has(recommendation.unitId)) {
|
||||
errors.push(`${context}: duplicate recommended unit "${recommendation.unitId}"`);
|
||||
@@ -267,6 +268,9 @@ function validateSortie(errors, scenario, classKeys, formationRoles, terrainRule
|
||||
if (recommendation.role && !formationRoles.has(recommendation.role)) {
|
||||
errors.push(`${context}/${recommendation.unitId}: invalid recommendation role "${recommendation.role}"`);
|
||||
}
|
||||
if (recommendation.role) {
|
||||
recommendedRoleByUnitId.set(recommendation.unitId, recommendation.role);
|
||||
}
|
||||
assertNonEmptyString(errors, recommendation.reason, `${context}/${recommendation.unitId}: recommendation reason`);
|
||||
});
|
||||
sortie.recommendedClasses.forEach((recommendation) => {
|
||||
@@ -327,6 +331,12 @@ function validateSortie(errors, scenario, classKeys, formationRoles, terrainRule
|
||||
if (slot.unitId && !requiredUnitIds.has(slot.unitId) && !recommendedUnitIds.has(slot.unitId)) {
|
||||
errors.push(`${context}: deployment slot unit "${slot.unitId}" must be required or recommended`);
|
||||
}
|
||||
const recommendedRole = slot.unitId ? recommendedRoleByUnitId.get(slot.unitId) : undefined;
|
||||
if (slot.role && recommendedRole && slot.role !== recommendedRole) {
|
||||
errors.push(
|
||||
`${context}: deployment slot unit "${slot.unitId}" role "${slot.role}" does not match recommendation role "${recommendedRole}"`
|
||||
);
|
||||
}
|
||||
if (slot.unitId) {
|
||||
if (deploymentUnitIds.has(slot.unitId)) {
|
||||
errors.push(`${context}: duplicate deployment unit slot "${slot.unitId}"`);
|
||||
|
||||
Reference in New Issue
Block a user