147 lines
4.9 KiB
Java
147 lines
4.9 KiB
Java
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 mus 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();
|
|
}
|
|
|
|
}
|