package org.mafagafogigante.dungeon.io; import org.mafagafogigante.dungeon.schema.JsonRule; import org.mafagafogigante.dungeon.schema.rules.JsonRuleFactory; import com.eclipsesource.json.JsonObject; import org.junit.Test; import java.util.HashMap; import java.util.Map; public class ItemsJsonFileTest extends ResourcesTypeTest { private static final String ID_FIELD = "id"; private static final String TYPE_FIELD = "type"; private static final String NAME_FIELD = "name"; private static final String TAGS_FIELD = "tags"; private static final String TEXT_FIELD = "text"; private static final String ITEMS_FIELD = "items"; private static final String SPELL_FIELD = "spell"; private static final String UNIQUE_FIELD = "unique"; private static final String WEIGHT_FIELD = "weight"; private static final String DAMAGE_FIELD = "damage"; private static final String PLURAL_FIELD = "plural"; private static final String CURRENT_FIELD = "current"; private static final String MAXIMUM_FIELD = "maximum"; private static final String HIT_RATE_FIELD = "hitRate"; private static final String SINGULAR_FIELD = "singular"; private static final String NUTRITION_FIELD = "nutrition"; private static final String INTEGRITY_FIELD = "integrity"; private static final String VISIBILITY_FIELD = "visibility"; private static final String LUMINOSITY_FIELD = "luminosity"; private static final String ITEMS_JSON_FILE_NAME = "items.json"; private static final String DECOMPOSITION_PERIOD_FIELD = "decompositionPeriod"; private static final String INTEGRITY_DECREMENT_ON_HIT_FIELD = "integrityDecrementOnHit"; private static final String INTEGRITY_DECREMENT_ON_EAT_FIELD = "integrityDecrementOnEat"; private static final String DRINKABLE_DOSES_FIELD = "drinkableDoses"; private static final String DRINKABLE_HEALING_FIELD = "drinkableHealing"; private static final String INTEGRITY_DECREMENT_PER_DOSE_FIELD = "integrityDecrementPerDose"; @Test public void testIsFileHasValidStructure() { final JsonRule integrityRuleObject = getIntegrityRuleObject(); final JsonRule nameRuleObject = getNameRuleObject(); final JsonRule itemsJsonRuleObject = getItemRuleObject(integrityRuleObject, nameRuleObject); final JsonRule itemsFileJsonRuleObject = getItemsFileJsonRuleObject(itemsJsonRuleObject); JsonObject itemsFileJsonObject = getJsonObjectByJsonFile(ITEMS_JSON_FILE_NAME); itemsFileJsonRuleObject.validate(itemsFileJsonObject); } private JsonRule getItemsFileJsonRuleObject(JsonRule itemsJsonRuleObject) { Map<String, JsonRule> itemsFileRules = new HashMap<>(); itemsFileRules.put(ITEMS_FIELD, JsonRuleFactory.makeVariableArrayRule(itemsJsonRuleObject)); return JsonRuleFactory.makeObjectRule(itemsFileRules); } private JsonRule getItemRuleObject(JsonRule integrityRuleObject, JsonRule nameRuleObject) { Map<String, JsonRule> itemRules = new HashMap<>(); final JsonRule idRule = JsonRuleFactory.makeIdRule(); final JsonRule stringRule = JsonRuleFactory.makeStringRule(); final JsonRule percentRule = JsonRuleFactory.makePercentRule(); final JsonRule integerRule = JsonRuleFactory.makeIntegerRule(); final JsonRule optionalIntegerRule = JsonRuleFactory.makeOptionalRule(integerRule); itemRules.put(ID_FIELD, idRule); itemRules.put(TYPE_FIELD, stringRule); itemRules.put(NAME_FIELD, nameRuleObject); itemRules.put(TAGS_FIELD, JsonRuleFactory.makeVariableArrayRule(stringRule)); itemRules.put(UNIQUE_FIELD, JsonRuleFactory.makeOptionalRule(JsonRuleFactory.makeBooleanRule())); itemRules.put(INTEGRITY_FIELD, integrityRuleObject); itemRules.put(WEIGHT_FIELD, JsonRuleFactory.makeBoundDoubleRule(Double.MIN_VALUE, 100)); itemRules.put(VISIBILITY_FIELD, percentRule); itemRules.put(LUMINOSITY_FIELD, JsonRuleFactory.makeOptionalRule(percentRule)); itemRules.put(DECOMPOSITION_PERIOD_FIELD, JsonRuleFactory.makeOptionalRule(JsonRuleFactory.makePeriodRule())); itemRules.put(DAMAGE_FIELD, integerRule); itemRules.put(HIT_RATE_FIELD, percentRule); itemRules.put(INTEGRITY_DECREMENT_ON_HIT_FIELD, integerRule); itemRules.put(NUTRITION_FIELD, optionalIntegerRule); itemRules.put(INTEGRITY_DECREMENT_ON_EAT_FIELD, optionalIntegerRule); itemRules.put(DRINKABLE_DOSES_FIELD, optionalIntegerRule); itemRules.put(DRINKABLE_HEALING_FIELD, optionalIntegerRule); itemRules.put(INTEGRITY_DECREMENT_PER_DOSE_FIELD, optionalIntegerRule); itemRules.put(TEXT_FIELD, JsonRuleFactory.makeOptionalRule(stringRule)); itemRules.put(SPELL_FIELD, JsonRuleFactory.makeOptionalRule(idRule)); return JsonRuleFactory.makeObjectRule(itemRules); } private JsonRule getNameRuleObject() { Map<String, JsonRule> nameRules = new HashMap<>(); final JsonRule stringRule = JsonRuleFactory.makeStringRule(); final JsonRule optionalStringRule = JsonRuleFactory.makeOptionalRule(stringRule); nameRules.put(SINGULAR_FIELD, stringRule); nameRules.put(PLURAL_FIELD, optionalStringRule); return JsonRuleFactory.makeObjectRule(nameRules); } private JsonRule getIntegrityRuleObject() { Map<String, JsonRule> integrityRules = new HashMap<>(); final JsonRule integerRule = JsonRuleFactory.makeIntegerRule(); integrityRules.put(CURRENT_FIELD, integerRule); integrityRules.put(MAXIMUM_FIELD, integerRule); return JsonRuleFactory.makeObjectRule(integrityRules); } }