Skip to content

Commit

Permalink
MapUpload: fix scenario.lua validation
Browse files Browse the repository at this point in the history
  • Loading branch information
Brutus5000 committed Aug 25, 2019
1 parent ed56a47 commit e8805a5
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/main/java/com/faforever/api/map/MapService.java
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,8 @@ private Collection<Error> 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
)));
Expand Down
68 changes: 68 additions & 0 deletions src/test/java/com/faforever/api/map/MapServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit e8805a5

Please sign in to comment.