/* * #%L * BroadleafCommerce Admin Module * %% * Copyright (C) 2009 - 2013 Broadleaf Commerce * %% * 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. * #L% */ package org.broadleafcommerce.admin.web.rulebuilder; import junit.framework.TestCase; import org.broadleafcommerce.admin.web.rulebuilder.service.CustomerFieldServiceImpl; import org.broadleafcommerce.admin.web.rulebuilder.service.FulfillmentGroupFieldServiceImpl; import org.broadleafcommerce.admin.web.rulebuilder.service.OrderFieldServiceImpl; import org.broadleafcommerce.admin.web.rulebuilder.service.OrderItemFieldServiceImpl; import org.broadleafcommerce.openadmin.dto.Entity; import org.broadleafcommerce.openadmin.dto.Property; import org.broadleafcommerce.openadmin.web.rulebuilder.BLCOperator; import org.broadleafcommerce.openadmin.web.rulebuilder.MVELToDataWrapperTranslator; import org.broadleafcommerce.openadmin.web.rulebuilder.MVELTranslationException; import org.broadleafcommerce.openadmin.web.rulebuilder.dto.DataDTO; import org.broadleafcommerce.openadmin.web.rulebuilder.dto.DataWrapper; import org.broadleafcommerce.openadmin.web.rulebuilder.dto.ExpressionDTO; /** * @author Elbert Bautista (elbertbautista) */ public class MVELToDataWrapperTranslatorTest extends TestCase { private OrderItemFieldServiceImpl orderItemFieldService; private CustomerFieldServiceImpl customerFieldService; private OrderFieldServiceImpl orderFieldService; private FulfillmentGroupFieldServiceImpl fulfillmentGroupFieldService; @Override protected void setUp() { orderItemFieldService = new OrderItemFieldServiceImpl(); orderItemFieldService.init(); customerFieldService = new CustomerFieldServiceImpl(); customerFieldService.init(); orderFieldService = new OrderFieldServiceImpl(); orderFieldService.init(); fulfillmentGroupFieldService = new FulfillmentGroupFieldServiceImpl(); fulfillmentGroupFieldService.init(); } /** * Tests the creation of a DataWrapper given an mvel/quantity property * @throws MVELTranslationException */ public void testCreateRuleData() throws MVELTranslationException { MVELToDataWrapperTranslator translator = new MVELToDataWrapperTranslator(); Property[] properties = new Property[3]; Property mvelProperty = new Property(); mvelProperty.setName("orderItemMatchRule"); mvelProperty.setValue("MVEL.eval(\"toUpperCase()\",discreteOrderItem.?category.?name)==MVEL.eval(\"toUpperCase()\",\"merchandise\")"); Property quantityProperty = new Property(); quantityProperty.setName("quantity"); quantityProperty.setValue("1"); Property idProperty = new Property(); idProperty.setName("id"); idProperty.setValue("100"); properties[0] = mvelProperty; properties[1] = quantityProperty; properties[2] = idProperty; Entity[] entities = new Entity[1]; Entity entity = new Entity(); entity.setProperties(properties); entities[0] = entity; DataWrapper dataWrapper = translator.createRuleData(entities, "orderItemMatchRule", "quantity", "id", orderItemFieldService); assert(dataWrapper.getData().size() == 1); assert(dataWrapper.getData().get(0).getQuantity() == 1); assert(dataWrapper.getData().get(0).getGroups().size()==1); assert(dataWrapper.getData().get(0).getGroups().get(0) instanceof ExpressionDTO); ExpressionDTO exp = (ExpressionDTO) dataWrapper.getData().get(0).getGroups().get(0); assert(exp.getName().equals("category.name")); assert(exp.getOperator().equals(BLCOperator.IEQUALS.name())); assert(exp.getValue().equals("merchandise")); } public void testCustomerQualificationDataWrapper() throws MVELTranslationException { MVELToDataWrapperTranslator translator = new MVELToDataWrapperTranslator(); Property[] properties = new Property[1]; Property mvelProperty = new Property(); mvelProperty.setName("matchRule"); mvelProperty.setValue("customer.emailAddress!=customer.username"); properties[0] = mvelProperty; Entity[] entities = new Entity[1]; Entity entity = new Entity(); entity.setProperties(properties); entities[0] = entity; DataWrapper dataWrapper = translator.createRuleData(entities, "matchRule", null, null, customerFieldService); assert(dataWrapper.getData().size() == 1); assert(dataWrapper.getData().get(0).getQuantity() == null); assert(dataWrapper.getData().get(0).getGroupOperator().equals(BLCOperator.AND.name())); assert(dataWrapper.getData().get(0).getGroups().get(0) instanceof ExpressionDTO); ExpressionDTO e1 = (ExpressionDTO) dataWrapper.getData().get(0).getGroups().get(0); assert(e1.getName().equals("emailAddress")); assert(e1.getOperator().equals(BLCOperator.NOT_EQUAL_FIELD.name())); assert(e1.getValue().equals("username")); } public void testOrderQualificationDataWrapper() throws MVELTranslationException { MVELToDataWrapperTranslator translator = new MVELToDataWrapperTranslator(); Property[] properties = new Property[1]; Property mvelProperty = new Property(); mvelProperty.setName("matchRule"); mvelProperty.setValue("order.subTotal.getAmount()>=100"); properties[0] = mvelProperty; Entity[] entities = new Entity[1]; Entity entity = new Entity(); entity.setProperties(properties); entities[0] = entity; DataWrapper dataWrapper = translator.createRuleData(entities, "matchRule", null, null, orderFieldService); assert(dataWrapper.getData().size() == 1); assert(dataWrapper.getData().get(0).getQuantity() == null); assert(dataWrapper.getData().get(0).getGroups().get(0) instanceof ExpressionDTO); ExpressionDTO e1 = (ExpressionDTO) dataWrapper.getData().get(0).getGroups().get(0); assert(e1.getName().equals("subTotal")); assert(e1.getOperator().equals(BLCOperator.GREATER_OR_EQUAL.name())); assert(e1.getValue().equals("100")); } public void testItemQualificationDataWrapper() throws MVELTranslationException { MVELToDataWrapperTranslator translator = new MVELToDataWrapperTranslator(); Property[] p1 = new Property[3]; Property m1 = new Property(); m1.setName("orderItemMatchRule"); m1.setValue("discreteOrderItem.category.name==\"test category\""); Property q1 = new Property(); q1.setName("quantity"); q1.setValue("1"); Property i1 = new Property(); i1.setName("id"); i1.setValue("100"); p1[0] = m1; p1[1] = q1; p1[2] = i1; Entity e1 = new Entity(); e1.setProperties(p1); Property[] p2 = new Property[3]; Property m2 = new Property(); m2.setName("orderItemMatchRule"); m2.setValue("!(discreteOrderItem.product.manufacturer==\"test manufacturer\")"); Property q2 = new Property(); q2.setName("quantity"); q2.setValue("2"); Property i2 = new Property(); i2.setName("id"); i2.setValue("200"); p2[0] = m2; p2[1] = q2; p2[2] = i2; Entity e2 = new Entity(); e2.setProperties(p2); Entity[] entities = new Entity[2]; entities[0] = e1; entities[1] = e2; DataWrapper dataWrapper = translator.createRuleData(entities, "orderItemMatchRule", "quantity", "id", orderItemFieldService); assert(dataWrapper.getData().size() == 2); assert(dataWrapper.getData().get(0).getQuantity() == 1); assert(dataWrapper.getData().get(0).getGroupOperator().equals(BLCOperator.AND.name())); assert(dataWrapper.getData().get(0).getGroups().size()==1); assert(dataWrapper.getData().get(0).getGroups().get(0) instanceof ExpressionDTO); ExpressionDTO exp1 = (ExpressionDTO) dataWrapper.getData().get(0).getGroups().get(0); assert(exp1.getName().equals("category.name")); assert(exp1.getOperator().equals(BLCOperator.EQUALS.name())); assert(exp1.getValue().equals("test category")); assert(dataWrapper.getData().get(1).getQuantity() == 2); assert(dataWrapper.getData().get(1).getGroupOperator().equals(BLCOperator.NOT.name())); assert(dataWrapper.getData().get(1).getGroups().get(0) instanceof ExpressionDTO); ExpressionDTO expd1e1 = (ExpressionDTO) dataWrapper.getData().get(1).getGroups().get(0); assert(expd1e1.getName().equals("product.manufacturer")); assert(expd1e1.getOperator().equals(BLCOperator.EQUALS.name())); assert(expd1e1.getValue().equals("test manufacturer")); } public void testFulfillmentGroupQualificationDataWrapper() throws MVELTranslationException { MVELToDataWrapperTranslator translator = new MVELToDataWrapperTranslator(); Property[] properties = new Property[1]; Property mvelProperty = new Property(); mvelProperty.setName("matchRule"); mvelProperty.setValue("fulfillmentGroup.address.state.name==\"Texas\"&&(fulfillmentGroup.retailFulfillmentPrice.getAmount()>=99&&fulfillmentGroup.retailFulfillmentPrice.getAmount()<=199)"); properties[0] = mvelProperty; Entity[] entities = new Entity[1]; Entity entity = new Entity(); entity.setProperties(properties); entities[0] = entity; DataWrapper dataWrapper = translator.createRuleData(entities, "matchRule", null, null, fulfillmentGroupFieldService); assert(dataWrapper.getData().size() == 1); assert(dataWrapper.getData().get(0).getQuantity() == null); assert(dataWrapper.getData().get(0).getGroupOperator().equals(BLCOperator.AND.name())); assert(dataWrapper.getData().get(0).getGroups().size()==2); assert(dataWrapper.getData().get(0).getGroups().get(0) instanceof ExpressionDTO); ExpressionDTO e1 = (ExpressionDTO) dataWrapper.getData().get(0).getGroups().get(0); assert(e1.getName().equals("address.state.name")); assert(e1.getOperator().equals(BLCOperator.EQUALS.name())); assert(e1.getValue().equals("Texas")); assert(dataWrapper.getData().get(0).getGroups().get(1) instanceof ExpressionDTO); ExpressionDTO e2 = (ExpressionDTO) dataWrapper.getData().get(0).getGroups().get(1); assert(e2.getName().equals("retailFulfillmentPrice")); assert(e2.getOperator().equals(BLCOperator.BETWEEN_INCLUSIVE.name())); assert(e2.getStart().equals("99")); assert(e2.getEnd().equals("199")); } }