jmix-projects / jmix-old

DEPRECATED. Use https://github.com/jmix-framework/jmix
16 stars 3 forks source link

Incorrect message in ConstraintValidator #387

Closed NikitaShchienko closed 4 years ago

NikitaShchienko commented 4 years ago

Do not apply messages from messages.properties

TestCurrencyClassConstraint

@Constraint(validatedBy = TestCurrencyValidator.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestCurrencyClassConstraint {
    String message() default "{msg://io.jmix.samples.rest.validation/TestCurrencyClassConstraint.message}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

TestCurrencyValidator

public class TestCurrencyValidator implements ConstraintValidator<TestCurrencyClassConstraint, Currency> {

    @Override
    public boolean isValid(Currency currency, ConstraintValidatorContext context) {
        EntityStates entityStates = AppBeans.get(EntityStates.NAME);
        if (entityStates.isLoaded(currency, "code")) {
            if ("BAN".equals(currency.getCode())) {
                return false;
            }
        }
        return true;
    }
}

Test:

    @Test
    public void commitInvalidClassLevelValidators() throws Exception {
        String json = getFileContent("currency-invalid-code-ban.json", null);
        String url = baseUrl + "/entities/ref$Currency";

        try (CloseableHttpResponse response = sendPost(url, oauthToken, json, null)) {
            assertEquals(HttpStatus.SC_BAD_REQUEST, statusCode(response));

            ReadContext ctx = parseResponse(response);

            assertEquals("Invalid currency", ctx.read("$[0].message"));
            assertEquals("", ctx.read("$[0].path"));
        }
    }

messages.properties: TestCurrencyClassConstraint.message = Invalid currency

Result: Expected: Invalid currency Actual: {msg://io.jmix.samples.rest.validation/TestCurrencyClassConstraint.message}