/** * This Source Code Form is subject to the terms of the Mozilla Public License, * v. 2.0. If a copy of the MPL was not distributed with this file, You can * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under * the terms of the Healthcare Disclaimer located at http://openmrs.org/license. * * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS * graphic logo is a trademark of OpenMRS Inc. */ package org.openmrs.test.matchers; import org.hamcrest.Description; import org.hamcrest.TypeSafeMatcher; import org.springframework.validation.Errors; /** * Matcher to assert {@code FieldError} in {@code Errors} used in Spring validation. * <p> * Usage examples: * <ul> * <li>Has one or more {@code FieldError}: assertThat(errors, hasFieldErrors());</li> * <li>Has one or more {@code FieldError} in the specified field: assertThat(errors, * hasFieldErrors("givenName"));</li> * <li>Has {@code FieldError} in the specified field of specified code: assertThat(errors, * hasFieldErrors("givenName", "GivenName.invalid"));</li> * </ul> * </p> * * @see org.springframework.validation.Errors; * @see org.springframework.validation.FieldError; * @since 2.2.0 */ public final class HasFieldErrors extends TypeSafeMatcher<Errors> { private final String field; private final String code; private HasFieldErrors(String field, String code) { this.field = field; this.code = code; } @Override public void describeTo(Description description) { if (field == null) { description.appendText("to have field errors"); } else if (code == null) { description.appendText("to have field errors for '" + field + "'"); } else { description.appendText("to have field errors for '" + field + "' and code '" + code + "'"); } } @Override protected boolean matchesSafely(Errors item) { if (field == null) { return item.hasFieldErrors(); } else if (code == null) { return item.hasFieldErrors(field); } else { return item.getFieldErrors(field).stream().map(e -> e.getCode()).filter(c -> code.equals(c)).findFirst() .isPresent(); } } public static HasFieldErrors hasFieldErrors() { return new HasFieldErrors(null, null); } public static HasFieldErrors hasFieldErrors(String field) { return new HasFieldErrors(field, null); } public static HasFieldErrors hasFieldErrors(String field, String code) { return new HasFieldErrors(field, code); } }