diff --git a/src/main/java/com/faforever/api/map/MapService.java b/src/main/java/com/faforever/api/map/MapService.java index 9a21ea5c0..f14b290a4 100644 --- a/src/main/java/com/faforever/api/map/MapService.java +++ b/src/main/java/com/faforever/api/map/MapService.java @@ -136,7 +136,8 @@ private Collection validateScenarioLua(String validMapName, String scenar .build(); for (Entry entry : declarations.entrySet()) { - if (!scenarioLua.matches(format("{0}\\w=\\w'\\/maps\\/{0}(\\.v\\d{4})?/{0}{1}'", entry.getKey(), entry.getValue()))) { + Pattern pattern = Pattern.compile(format("{0}\\s=\\s''\\/maps\\/{2}(\\.v\\d{4})?\\/{2}{1}'',", entry.getKey(), entry.getValue(), validMapName)); + if (!pattern.matcher(scenarioLua).find()) { errors.add(new Error(ErrorCode.MAP_SCRIPT_LINE_MISSING, format( "{0} = ''/maps/{2}/{2}{1}'',", entry.getKey(), entry.getValue(), validMapName ))); diff --git a/src/test/java/com/faforever/api/map/MapServiceTest.java b/src/test/java/com/faforever/api/map/MapServiceTest.java index 832faed44..28904d07e 100644 --- a/src/test/java/com/faforever/api/map/MapServiceTest.java +++ b/src/test/java/com/faforever/api/map/MapServiceTest.java @@ -152,12 +152,80 @@ void testMapNameStartsInvalid() { assertThat(result, apiExceptionWithCode(MAP_NAME_DOES_NOT_START_WITH_LETTER)); } + @Test + void testScenarioLuaSuccessWithoutVersion() { + MapValidationRequest request = new MapValidationRequest("name", + "map = '/maps/name/name.scmap', " + + "save = '/maps/name/name_save.lua', " + + "script = '/maps/name/name_script.lua', " + ); + + instance.validate(request); + } + + @Test + void testScenarioLuaSuccessWithVersion() { + // of course the version number should be the same every time but we don't validate this + MapValidationRequest request = new MapValidationRequest("name", + "map = '/maps/name.v0001/name.scmap', " + + "save = '/maps/name.v0002/name_save.lua', " + + "script = '/maps/name.v0003/name_script.lua', " + ); + + instance.validate(request); + } + @Test void testScenarioLuaMissingAllLines() { MapValidationRequest request = new MapValidationRequest("name", ""); ApiException result = assertThrows(ApiException.class, () -> instance.validate(request)); assertThat(result.getErrors().length, is(3)); } + + @Test + void testScenarioLuaWrongMapLine() { + MapValidationRequest request = new MapValidationRequest("name", + "map = '/maps/name.vINVALID_VERSION/name.scmap', " + + "save = '/maps/name.v0002/name_save.lua', " + + "script = '/maps/name.v0003/name_script.lua', " + ); + + ApiException result = assertThrows(ApiException.class, () -> instance.validate(request)); + + assertThat(result.getErrors().length, is(1)); + assertThat(result.getErrors()[0].getArgs().length, is(1)); + assertThat(result.getErrors()[0].getArgs()[0], is("map = '/maps/name/name.scmap',")); + } + + @Test + void testScenarioLuaWrongSaveLine() { + MapValidationRequest request = new MapValidationRequest("name", + "map = '/maps/name.v0001/name.scmap', " + + "save = '/maps/name.vINVALID_VERSION/name_save.lua', " + + "script = '/maps/name.v0003/name_script.lua', " + ); + + ApiException result = assertThrows(ApiException.class, () -> instance.validate(request)); + + assertThat(result.getErrors().length, is(1)); + assertThat(result.getErrors()[0].getArgs().length, is(1)); + assertThat(result.getErrors()[0].getArgs()[0], is("save = '/maps/name/name_save.lua',")); + } + + @Test + void testScenarioLuaWrongScriptLine() { + MapValidationRequest request = new MapValidationRequest("name", + "map = '/maps/name.v0001/name.scmap', " + + "save = '/maps/name.v0002/name_save.lua', " + + "script = '/maps/name.vINVALID_VERSION/name_script.lua', " + ); + + ApiException result = assertThrows(ApiException.class, () -> instance.validate(request)); + + assertThat(result.getErrors().length, is(1)); + assertThat(result.getErrors()[0].getArgs().length, is(1)); + assertThat(result.getErrors()[0].getArgs()[0], is("script = '/maps/name/name_script.lua',")); + } } @Nested