diff --git a/curriculum/schema/challenge-schema.js b/curriculum/schema/challenge-schema.js index bb2e8134262..d7ba665223c 100644 --- a/curriculum/schema/challenge-schema.js +++ b/curriculum/schema/challenge-schema.js @@ -274,7 +274,24 @@ const schema = Joi.object() }), scene: Joi.object().keys({ setup: setupJoi.required(), - commands: Joi.array().items(commandJoi) + commands: Joi.array() + .items(commandJoi) + .unique( + (a, b) => + a.dialogue && + b.dialogue && + !( + (a.startTime < b.startTime && + a.finishTime < b.finishTime && + a.finishTime <= b.startTime) || + (b.startTime < a.startTime && + b.finishTime < a.finishTime && + b.finishTime <= a.startTime) + ) + ) + .messages({ + 'array.unique': 'Dialogues must not have overlapping times.' + }) }), solutions: Joi.array().items(Joi.array().items(fileJoi).min(1)), superBlock: Joi.string().regex(slugWithSlashRE),