Package org.springframework.batch.sample.domain.order.internal.validator

Source Code of org.springframework.batch.sample.domain.order.internal.validator.OrderValidatorTests

/*
* Copyright 2014 the original author or authors.
*
* 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 org.springframework.batch.sample.domain.order.internal.validator;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.springframework.batch.sample.domain.order.Address;
import org.springframework.batch.sample.domain.order.BillingInfo;
import org.springframework.batch.sample.domain.order.Customer;
import org.springframework.batch.sample.domain.order.LineItem;
import org.springframework.batch.sample.domain.order.Order;
import org.springframework.batch.sample.domain.order.ShippingInfo;
import org.springframework.validation.BeanPropertyBindingResult;
import org.springframework.validation.Errors;

public class OrderValidatorTests {

  private OrderValidator orderValidator;

  @Before
  public void setUp() throws Exception {
    orderValidator = new OrderValidator();
  }

  @Test
  public void testSupports() {
    assertTrue(orderValidator.supports(Order.class));
  }

  @Test
  public void testNotAnOrder() {
    String notAnOrder = "order";
    Errors errors = new BeanPropertyBindingResult(notAnOrder, "validOrder");

    orderValidator.validate(notAnOrder, errors);

    assertEquals(1, errors.getAllErrors().size());
    assertEquals("Incorrect type", errors.getAllErrors().get(0).getCode());

    errors = new BeanPropertyBindingResult(notAnOrder, "validOrder");

    orderValidator.validate(null, errors);
    assertEquals(0, errors.getAllErrors().size());
  }

  @Test
  public void testValidOrder() {
    Order order = new Order();
    order.setOrderId(-5);
    order.setOrderDate(new Date(new Date().getTime() + 1000000000L));
    order.setTotalLines(10);
    order.setLineItems(new ArrayList<LineItem>());

    Errors errors = new BeanPropertyBindingResult(order, "validOrder");

    orderValidator.validateOrder(order, errors);

    assertEquals(3, errors.getAllErrors().size());
    assertEquals("error.order.id", errors.getFieldError("orderId").getCode());
    assertEquals("error.order.date.future", errors.getFieldError("orderDate").getCode());
    assertEquals("error.order.lines.badcount", errors.getFieldError("totalLines").getCode());

    order = new Order();
    order.setOrderId(Long.MAX_VALUE);
    order.setOrderDate(new Date(new Date().getTime() - 1000));
    order.setTotalLines(0);
    List<LineItem> items = new ArrayList<LineItem>();
    items.add(new LineItem());
    order.setLineItems(items);

    errors = new BeanPropertyBindingResult(order, "validOrder");

    orderValidator.validateOrder(order, errors);

    assertEquals(2, errors.getAllErrors().size());
    assertEquals("error.order.id", errors.getFieldError("orderId").getCode());
    assertEquals("error.order.lines.badcount", errors.getFieldError("totalLines").getCode());

    order = new Order();
    order.setOrderId(5L);
    order.setOrderDate(new Date(new Date().getTime() - 1000));
    order.setTotalLines(1);
    items = new ArrayList<LineItem>();
    items.add(new LineItem());
    order.setLineItems(items);

    errors = new BeanPropertyBindingResult(order, "validOrder");

    orderValidator.validateOrder(order, errors);

    assertEquals(0, errors.getAllErrors().size());
  }

  @Test
  public void testValidCustomer() {
    Order order = new Order();
    Customer customer = new Customer();
    customer.setRegistered(false);
    customer.setBusinessCustomer(true);
    order.setCustomer(customer);

    Errors errors = new BeanPropertyBindingResult(order, "validOrder");
    orderValidator.validateCustomer(customer, errors);

    assertEquals(2, errors.getAllErrors().size());
    assertEquals("error.customer.registration", errors.getFieldError("customer.registered").getCode());
    assertEquals("error.customer.companyname", errors.getFieldError("customer.companyName").getCode());

    customer = new Customer();
    customer.setRegistered(true);
    customer.setBusinessCustomer(false);
    customer.setRegistrationId(Long.MIN_VALUE);
    order.setCustomer(customer);

    errors = new BeanPropertyBindingResult(order, "validOrder");
    orderValidator.validateCustomer(customer, errors);

    assertEquals(3, errors.getAllErrors().size());
    assertEquals("error.customer.firstname", errors.getFieldError("customer.firstName").getCode());
    assertEquals("error.customer.lastname", errors.getFieldError("customer.lastName").getCode());
    assertEquals("error.customer.registrationid", errors.getFieldError("customer.registrationId").getCode());

    customer = new Customer();
    customer.setRegistered(true);
    customer.setBusinessCustomer(false);
    customer.setRegistrationId(Long.MAX_VALUE);
    order.setCustomer(customer);

    errors = new BeanPropertyBindingResult(order, "validOrder");
    orderValidator.validateCustomer(customer, errors);

    assertEquals(3, errors.getAllErrors().size());
    assertEquals("error.customer.firstname", errors.getFieldError("customer.firstName").getCode());
    assertEquals("error.customer.lastname", errors.getFieldError("customer.lastName").getCode());
    assertEquals("error.customer.registrationid", errors.getFieldError("customer.registrationId").getCode());

    customer = new Customer();
    customer.setRegistered(true);
    customer.setBusinessCustomer(true);
    customer.setCompanyName("Acme Inc");
    customer.setRegistrationId(5L);
    order.setCustomer(customer);

    errors = new BeanPropertyBindingResult(order, "validOrder");
    orderValidator.validateCustomer(customer, errors);

    assertEquals(0, errors.getAllErrors().size());

    customer = new Customer();
    customer.setRegistered(true);
    customer.setBusinessCustomer(false);
    customer.setFirstName("John");
    customer.setLastName("Doe");
    customer.setRegistrationId(5L);
    order.setCustomer(customer);

    errors = new BeanPropertyBindingResult(order, "validOrder");
    orderValidator.validateCustomer(customer, errors);

    assertEquals(0, errors.getAllErrors().size());
  }

  @Test
  public void testValidAddress() {
    Order order = new Order();

    Errors errors = new BeanPropertyBindingResult(order, "validOrder");
    orderValidator.validateAddress(null, errors, "billingAddress");

    assertEquals(0, errors.getAllErrors().size());

    Address address = new Address();
    order.setBillingAddress(address);

    orderValidator.validateAddress(address, errors, "billingAddress");

    assertEquals(4, errors.getAllErrors().size());
    assertEquals("error.baddress.addrline1.length", errors.getFieldError("billingAddress.addrLine1").getCode());
    assertEquals("error.baddress.city.length", errors.getFieldError("billingAddress.city").getCode());
    assertEquals("error.baddress.zipcode.length", errors.getFieldError("billingAddress.zipCode").getCode());
    assertEquals("error.baddress.country.length", errors.getFieldError("billingAddress.country").getCode());

    address = new Address();
    address.setAddressee("1234567890123456789012345678901234567890123456789012345678901234567890");
    address.setAddrLine1("123456789012345678901234567890123456789012345678901234567890");
    address.setAddrLine2("123456789012345678901234567890123456789012345678901234567890");
    address.setCity("1234567890123456789012345678901234567890");
    address.setZipCode("1234567890");
    address.setState("1234567890");
    address.setCountry("123456789012345678901234567890123456789012345678901234567890");
    order.setBillingAddress(address);

    errors = new BeanPropertyBindingResult(order, "validOrder");
    orderValidator.validateAddress(address, errors, "billingAddress");

    assertEquals(8, errors.getAllErrors().size());
    assertEquals("error.baddress.addresse.length", errors.getFieldError("billingAddress.addressee").getCode());
    assertEquals("error.baddress.addrline1.length", errors.getFieldError("billingAddress.addrLine1").getCode());
    assertEquals("error.baddress.addrline2.length", errors.getFieldError("billingAddress.addrLine2").getCode());
    assertEquals("error.baddress.city.length", errors.getFieldError("billingAddress.city").getCode());
    assertEquals("error.baddress.state.length", errors.getFieldError("billingAddress.state").getCode());
    assertEquals("error.baddress.zipcode.length", errors.getFieldErrors("billingAddress.zipCode").get(0).getCode());
    assertEquals("error.baddress.zipcode.format", errors.getFieldErrors("billingAddress.zipCode").get(1).getCode());
    assertEquals("error.baddress.country.length", errors.getFieldError("billingAddress.country").getCode());

    address = new Address();
    address.setAddressee("John Doe");
    address.setAddrLine1("123 4th Street");
    address.setCity("Chicago");
    address.setState("IL");
    address.setZipCode("60606");
    address.setCountry("United States");
    order.setBillingAddress(address);

    errors = new BeanPropertyBindingResult(order, "validOrder");
    orderValidator.validateAddress(address, errors, "billingAddress");

    assertEquals(0, errors.getAllErrors().size());
  }

  @Test
  public void testValidPayment() {
    Order order = new Order();
    BillingInfo info = new BillingInfo();
    info.setPaymentId("INVALID");
    info.setPaymentDesc("INVALID");
    order.setBilling(info);

    Errors errors = new BeanPropertyBindingResult(order, "validOrder");
    orderValidator.validatePayment(info, errors);

    assertEquals(2, errors.getAllErrors().size());
    assertEquals("error.billing.type", errors.getFieldError("billing.paymentId").getCode());
    assertEquals("error.billing.desc", errors.getFieldError("billing.paymentDesc").getCode());

    info = new BillingInfo();
    info.setPaymentId("VISA");
    info.setPaymentDesc("ADFI-1234567890");
    order.setBilling(info);

    errors = new BeanPropertyBindingResult(order, "validOrder");
    orderValidator.validatePayment(info, errors);

    assertEquals(0, errors.getAllErrors().size());
  }

  @Test
  public void testValidShipping() {
    Order order = new Order();
    ShippingInfo info = new ShippingInfo();
    info.setShipperId("INVALID");
    info.setShippingTypeId("INVALID");
    order.setShipping(info);

    Errors errors = new BeanPropertyBindingResult(order, "validOrder");
    orderValidator.validateShipping(info, errors);

    assertEquals(2, errors.getAllErrors().size());
    assertEquals("error.shipping.shipper", errors.getFieldError("shipping.shipperId").getCode());
    assertEquals("error.shipping.type", errors.getFieldError("shipping.shippingTypeId").getCode());

    info = new ShippingInfo();
    info.setShipperId("FEDX");
    info.setShippingTypeId("EXP");
    info.setShippingInfo("12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
    order.setShipping(info);

    errors = new BeanPropertyBindingResult(order, "validOrder");
    orderValidator.validateShipping(info, errors);

    assertEquals(1, errors.getAllErrors().size());
    assertEquals("error.shipping.shippinginfo.length", errors.getFieldError("shipping.shippingInfo").getCode());

    info = new ShippingInfo();
    info.setShipperId("FEDX");
    info.setShippingTypeId("EXP");
    info.setShippingInfo("Info");
    order.setShipping(info);

    errors = new BeanPropertyBindingResult(order, "validOrder");
    orderValidator.validateShipping(info, errors);

    assertEquals(0, errors.getAllErrors().size());
  }

  @Test
  public void testValidLineItems() {
    Order order = new Order();
    List<LineItem> lineItems = new ArrayList<LineItem>();
    lineItems.add(buildLineItem(-5, 5.00, 0, 0, 2, 3, 3, 30));
    lineItems.add(buildLineItem(Long.MAX_VALUE, 5.00, 0, 0, 2, 3, 3, 30));
    lineItems.add(buildLineItem(6, -5.00, 0, 0, 2, 3, 3, 0));
    lineItems.add(buildLineItem(6, Integer.MAX_VALUE, 0, 0, 2, 3, 3, 30));
    lineItems.add(buildLineItem(6, 5.00, 900, 0, 2, 3, 3, 30));
    lineItems.add(buildLineItem(6, 5.00, -90, 0, 2, 3, 3, 30));
    lineItems.add(buildLineItem(6, 5.00, 10, 20, 2, 3, 3, 30));
    lineItems.add(buildLineItem(6, 5.00, 0, -10, 2, 3, 3, 30));
    lineItems.add(buildLineItem(6, 5.00, 0, 50, 2, 3, 3, 30));
    lineItems.add(buildLineItem(6, 5.00, 0, 0, -2, 3, 3, 30));
    lineItems.add(buildLineItem(6, 5.00, 0, 0, Long.MAX_VALUE, 3, 3, 30));
    lineItems.add(buildLineItem(6, 5.00, 0, 0, 2, -3, 3, 30));
    lineItems.add(buildLineItem(6, 5.00, 0, 0, 2, Long.MAX_VALUE, 3, 30));
    lineItems.add(buildLineItem(6, 5.00, 0, 0, 2, 3, -3, 30));
    lineItems.add(buildLineItem(6, 5.00, 0, 0, 2, 3, Integer.MAX_VALUE, 30));
    lineItems.add(buildLineItem(6, 5.00, 0, 0, 2, 3, 3, -5));
    lineItems.add(buildLineItem(6, 5.00, 0, 0, 2, 3, 3, Integer.MAX_VALUE));
    order.setLineItems(lineItems);

    Errors errors = new BeanPropertyBindingResult(order, "validOrder");
    orderValidator.validateLineItems(lineItems, errors);

    assertEquals(7, errors.getAllErrors().size());
    assertEquals("error.lineitems.id", errors.getFieldErrors("lineItems").get(0).getCode());
    assertEquals("error.lineitems.price", errors.getFieldErrors("lineItems").get(1).getCode());
    assertEquals("error.lineitems.discount", errors.getFieldErrors("lineItems").get(2).getCode());
    assertEquals("error.lineitems.shipping", errors.getFieldErrors("lineItems").get(3).getCode());
    assertEquals("error.lineitems.handling", errors.getFieldErrors("lineItems").get(4).getCode());
    assertEquals("error.lineitems.quantity", errors.getFieldErrors("lineItems").get(5).getCode());
    assertEquals("error.lineitems.totalprice", errors.getFieldErrors("lineItems").get(6).getCode());
  }

  private LineItem buildLineItem(long itemId, double price, int discountPercentage, int discountAmount, long shippingPrice, long handlingPrice, int qty, int totalPrice) {
    LineItem invalidId = new LineItem();
    invalidId.setItemId(itemId);
    invalidId.setPrice(new BigDecimal(price));
    invalidId.setDiscountPerc(new BigDecimal(discountPercentage));
    invalidId.setDiscountAmount(new BigDecimal(discountAmount));
    invalidId.setShippingPrice(new BigDecimal(shippingPrice));
    invalidId.setHandlingPrice(new BigDecimal(handlingPrice));
    invalidId.setQuantity(qty);
    invalidId.setTotalPrice(new BigDecimal(totalPrice));
    return invalidId;
  }
}
TOP

Related Classes of org.springframework.batch.sample.domain.order.internal.validator.OrderValidatorTests

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.