Package com.springsource.insight.plugin.springweb.validation

Source Code of com.springsource.insight.plugin.springweb.validation.ValidationOperationCollectionAspectTest$ExampleValidator

/**
* Copyright (c) 2009-2011 VMware, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*         http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.springsource.insight.plugin.springweb.validation;

import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.validation.Errors;
import org.springframework.validation.ObjectError;
import org.springframework.validation.Validator;

import com.springsource.insight.collection.test.OperationCollectionAspectTestSupport;
import com.springsource.insight.intercept.operation.Operation;
import com.springsource.insight.intercept.operation.OperationList;
import com.springsource.insight.intercept.operation.OperationMap;
import com.springsource.insight.intercept.operation.OperationUtils;
import com.springsource.insight.util.ListUtil;
import com.springsource.insight.util.StringUtil;

public class ValidationOperationCollectionAspectTest extends OperationCollectionAspectTestSupport {
    private static final ExampleValidator validator = new ExampleValidator();

    public ValidationOperationCollectionAspectTest() {
        super();
    }

    @Test
    public void testValidationCollectedNoErrors() {
        assertValidationOperation(createMockErrors("testValidationCollectedNoErrors", Collections.<ObjectError>emptyList()));
    }

    @Test
    public void testValidationCollectedWithErrors() {
        assertValidationOperation(
                createMockErrors("testValidationCollectedWithErrors", Arrays.asList(
                        new ObjectError("curDate", new Date().toString()),
                        new ObjectError("curTime", String.valueOf(System.currentTimeMillis())),
                        new ObjectError("className", getClass().getSimpleName())
                )));
    }

    @Override
    public ValidationOperationCollectionAspect getAspect() {
        return ValidationOperationCollectionAspect.aspectOf();
    }

    private Operation assertValidationOperation(Errors errors) {
        return assertValidationOperation(validator, errors);
    }

    private Operation assertValidationOperation(Object target, Errors errors) {
        validator.validate(target, errors);

        Operation op = assertValidationOperation();
        assertValidationErrors(op, errors);
        return op;
    }

    private Operation assertValidationOperation() {
        Operation op = getLastEntered();
        assertNotNull("No operation entered", op);
        assertEquals("Mismatched operation type", ValidationErrorsMetricsGenerator.TYPE, op.getType());
        assertEquals("Mismatched label", validator.getClass().getSimpleName() + "#validate", op.getLabel());
        return op;
    }

    private static OperationList assertValidationErrors(Operation op, Errors errors) {
        int numErrors = (errors == null) ? 0 : errors.getErrorCount();
        assertEquals("Mismatched number of errors", numErrors, op.getInt(ValidationJoinPointFinalizer.ERRORS_COUNT, (-1)));

        OperationList errDetails = op.get(ValidationJoinPointFinalizer.ERRORS_LIST, OperationList.class);
        if (numErrors > 0) {
            assertValidationErrors(errDetails, errors);
        } else {
            assertNull("Unexpected errors details: " + errDetails, errDetails);
        }

        return errDetails;
    }

    private static OperationList assertValidationErrors(OperationList errDetails, Errors errors) {
        assertEquals("Mismatched number of errors", errors.getErrorCount(), errDetails.size());

        List<? extends ObjectError> errList = errors.getAllErrors();
        for (int index = 0; index < errList.size(); index++) {
            ObjectError expected = errList.get(index);
            OperationMap actual = errDetails.get(index, OperationMap.class);
            assertNotNull("Missing encoded value for error #" + index + ": " + expected, actual);

            String objName = actual.get(OperationUtils.NAME_KEY, String.class);
            assertEquals("Mismatched object name at entry #" + index, expected.getObjectName(), objName);

            String errExpected = StringUtil.chopTailAndEllipsify(expected.toString(), ValidationJoinPointFinalizer.MAX_ERROR_TEXT_LENGTH);
            String errActual = actual.get(OperationUtils.VALUE_KEY, String.class);
            assertEquals("Mismatched error text at entry #" + index, errExpected, errActual);
        }

        return errDetails;
    }

    @SuppressWarnings("boxing")
    static Errors createMockErrors(String objName, List<ObjectError> errList) {
        Errors errors = Mockito.mock(Errors.class);
        int numErrors = ListUtil.size(errList);
        Mockito.when(errors.getErrorCount()).thenReturn(numErrors);
        Mockito.when(errors.getAllErrors()).thenReturn(errList);
        return errors;
    }

    static class ExampleValidator implements Validator {
        ExampleValidator() {
            super();
        }

        public boolean supports(Class<?> clazz) {
            return (clazz != null);
        }

        public void validate(Object target, Errors errors) {
            // ignored
        }
    }
}
TOP

Related Classes of com.springsource.insight.plugin.springweb.validation.ValidationOperationCollectionAspectTest$ExampleValidator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.