package uulm.teamname.marvelous.gamelibrary.messages; import jakarta.validation.ConstraintViolation; import jakarta.validation.ValidatorFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import uulm.teamname.marvelous.gamelibrary.config.CharacterConfig; import uulm.teamname.marvelous.gamelibrary.config.CharacterProperties; import uulm.teamname.marvelous.gamelibrary.config.ScenarioConfig; import uulm.teamname.marvelous.gamelibrary.json.ValidationUtility; import uulm.teamname.marvelous.gamelibrary.messages.client.CharacterSelectionMessage; import jakarta.validation.Validation; import jakarta.validation.Validator; import java.util.stream.Collectors; import static org.mockito.Mockito.*; import static org.junit.jupiter.api.Assertions.*; import static org.assertj.core.api.Assertions.*; class MessageValidationUtilityTest { ValidatorFactory factory; Validator validator; @BeforeEach void beforeEach() { factory = Validation.buildDefaultValidatorFactory(); validator = factory.getValidator(); } // TODO: more tests here @Test void CharacterSelectionMessageTest() { var message = new CharacterSelectionMessage(); var violations = validator.validate(message); assertThat(violations).size().isOne(); message.characters = new Boolean[] {true, false, true, false, true, false}; // too little violations = validator.validate(message); var violationsString = violations.stream() .map(violation -> violation.getPropertyPath() + " " + violation.getMessage()) .collect(Collectors.joining(", ")); // System.out.println(violationsString); assertThat(violations).isNotEmpty(); assertThat(violationsString) .isEqualTo("characters doesn't have twelve elements"); assertThat(ValidationUtility.validate(message).get()) .isEqualTo("characters doesn't have twelve elements"); } @Test void validateCharacterConfigTest() { var racoon = new CharacterProperties(); racoon.characterID = 1; racoon.name = "Rocket Raccoon"; racoon.HP = 100; racoon.MP = 2; racoon.AP = 2; racoon.meleeDamage = 10; racoon.rangedDamage = 30; racoon.attackRange = 5; var quicksilver = new CharacterProperties(); quicksilver.characterID = 2; quicksilver.name = "Quicksilver"; quicksilver.HP = 100; quicksilver.MP = 6; quicksilver.AP = 1; quicksilver.meleeDamage = 10; quicksilver.rangedDamage = 10; quicksilver.attackRange = 3; var hulk = new CharacterProperties(); hulk.characterID = 3; hulk.name = "Hulk"; hulk.HP = 100; hulk.MP = 2; hulk.AP = 2; hulk.meleeDamage = 10; hulk.rangedDamage = 30; hulk.attackRange = 5; var loki = new CharacterProperties(); loki.characterID = 19; loki.name = "Loki"; loki.HP = 100; loki.MP = 6; loki.AP = 1; loki.meleeDamage = 10; loki.rangedDamage = 10; loki.attackRange = 3; var silversurfer = new CharacterProperties(); silversurfer.characterID = 20; silversurfer.name = ""; silversurfer.HP = 100; silversurfer.MP = 6; silversurfer.AP = 1; silversurfer.meleeDamage = -1; // silversurfer.rangedDamage = 10; silversurfer.attackRange = 3; var characterConfig = new CharacterConfig(); assertThat(ValidationUtility.validate(characterConfig).get()) .isIn("characters must not be empty", "characters darf nicht leer sein"); // .isEqualTo("characters must not be empty"); characterConfig.characters = new CharacterProperties[] {racoon, quicksilver, hulk, loki, silversurfer}; var results = ValidationUtility.validate(characterConfig).get(); assertThat(results.contains("characters has less than 24 characters") || results.contains("characters hat weniger als 24 characters")) .isTrue(); assertThat(results.contains("characters[4].rangedDamage must be greater than 0") || results.contains("characters[4].rangedDamage muss größer als 0 sein")) .isTrue(); assertThat(results.contains("characters[4].name must not be empty") || results.contains("characters[4].name darf nicht leer sein")) .isTrue(); assertThat(results.contains("characters[4].meleeDamage must be greater than 0") || results.contains("characters[4].meleeDamage muss größer als 0 sein")) .isTrue(); } }