Gamelib/src/test/java/uulm/teamname/marvelous/gamelibrary/messages/MessageValidationUtilityTes...

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 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();
}
}