/*
* Copyright (c) 2002-2012 Alibaba Group Holding Limited.
* 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.alibaba.citrus.turbine.uribroker.uri.impl;
import static com.alibaba.citrus.test.TestEnvStatic.*;
import static org.easymock.EasyMock.*;
import static org.junit.Assert.*;
import java.io.File;
import com.alibaba.citrus.service.mappingrule.MappingRuleService;
import com.alibaba.citrus.service.uribroker.URIBrokerService;
import com.alibaba.citrus.service.uribroker.uri.URIBroker;
import com.alibaba.citrus.springext.support.context.XmlApplicationContext;
import com.alibaba.citrus.turbine.uribroker.uri.TurbineURIBroker;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.core.io.FileSystemResource;
public class TurbineURIBrokerTests {
private TurbineURIBroker broker;
private MappingRuleService mappingRuleService;
private MappingRuleService mappingRuleService2;
@Before
public void init() {
broker = new TurbineURIBroker();
mappingRuleService = createMock(MappingRuleService.class);
expect(mappingRuleService.getMappedName("mymapper", "myTarget.vm")).andReturn("myTarget.htm").anyTimes();
expect(mappingRuleService.getMappedName("mymapper", "my/pageXyz.vm")).andReturn("my/pageXyz.htm").anyTimes();
replay(mappingRuleService);
mappingRuleService2 = createMock(MappingRuleService.class);
expect(mappingRuleService2.getMappedName("mymapper2", "myTarget.vm")).andReturn("myTarget.htm").anyTimes();
expect(mappingRuleService2.getMappedName("mymapper2", "myTarget2.vm")).andReturn("myTarget2.htm").anyTimes();
replay(mappingRuleService2);
}
private TurbineURIBroker createParentBroker() {
TurbineURIBroker parent = new TurbineURIBroker();
parent.setMappingRuleService(mappingRuleService);
parent.setActionParam("myaction");
parent.setConvertTargetCase(true);
parent.setTargetMappingRule("mymapper");
parent.setAction("myAction");
parent.setTarget("myTarget.vm");
parent.setComponentPath("myComponent");
return parent;
}
private TurbineURIBroker createSubBroker(URIBroker parent, boolean overrideActionAndTarget) {
TurbineURIBroker broker = new TurbineURIBroker();
broker.setParent(parent);
broker.setMappingRuleService(mappingRuleService2);
broker.setActionParam("myaction2");
broker.setConvertTargetCase(false);
broker.setTargetMappingRule("mymapper2");
broker.setComponentPath("myComponent2");
if (overrideActionAndTarget) {
broker.setAction("myAction2");
broker.setTarget("myTarget2.vm");
}
return broker;
}
@Test
public void getMappingRuleService() {
// init value
assertNull(broker.getMappingRuleService());
// set value
broker.setMappingRuleService(mappingRuleService);
assertSame(mappingRuleService, broker.getMappingRuleService());
}
@Test
public void getComponentPath() {
// init value
assertNull(broker.getComponentPath());
// set empty
broker.setComponentPath(null);
assertEquals("", broker.getComponentPath());
assertEquals("", broker.getPathInfo());
assertEquals("http:///", broker.toString());
broker.setComponentPath(" ");
assertEquals("", broker.getComponentPath());
assertEquals("", broker.getPathInfo());
assertEquals("http:///", broker.toString());
// set value
broker.setComponentPath(" mycomp ");
assertEquals("/mycomp", broker.getComponentPath());
assertEquals("/mycomp", broker.getPathInfo());
assertEquals("http:///mycomp", broker.toString());
}
@Test
public void getTarget() {
// init value
assertNull(broker.getTarget());
// set empty
broker.setTarget(null);
assertEquals(null, broker.getTarget());
broker.setTarget(" ");
assertEquals(null, broker.getTarget());
// set value
broker.setTarget("test.vm");
assertEquals("test.vm", broker.getTarget());
}
@Test
public void getTargetMappingRule() {
// default value
assertEquals("extension.output", broker.getTargetMappingRule());
// set empty
broker.setTargetMappingRule(null);
assertEquals("extension.output", broker.getTargetMappingRule());
broker.setTargetMappingRule(" ");
assertEquals("extension.output", broker.getTargetMappingRule());
// set value
broker.setTargetMappingRule(" test ");
assertEquals("test", broker.getTargetMappingRule());
}
@Test
public void isConvertTargetCase() {
// default value
assertTrue(broker.isConvertTargetCase());
// set value
broker.setConvertTargetCase(false);
assertFalse(broker.isConvertTargetCase());
broker.setConvertTargetCase(true);
assertTrue(broker.isConvertTargetCase());
}
@Test
public void setTarget_withMappingRuleService_convertCase() {
broker.setTargetMappingRule("mymapper");
broker.setMappingRuleService(mappingRuleService);
broker.setTarget(" my/pageXyz.vm ");
assertEquals("my/pageXyz.vm", broker.getTarget());
assertEquals("/my/page_xyz.htm", broker.getPathInfo());
assertEquals("http:///my/page_xyz.htm", broker.toString());
}
@Test
public void setTarget_withMappingRuleService_noConvertCase() {
broker.setTargetMappingRule("mymapper");
broker.setMappingRuleService(mappingRuleService);
broker.setConvertTargetCase(false);
broker.setTarget(" my/pageXyz.vm ");
assertEquals("my/pageXyz.vm", broker.getTarget());
assertEquals("/my/pageXyz.htm", broker.getPathInfo());
assertEquals("http:///my/pageXyz.htm", broker.toString());
}
@Test
public void getActionParam() {
// default value
broker = new TurbineURIBroker().setAction("myAction");
assertEquals("action", broker.getActionParam());
assertEquals("http:///?action=myAction", broker.toString());
// set empty
broker = new TurbineURIBroker().setActionParam(null).setAction("myAction");
assertEquals("action", broker.getActionParam());
assertEquals("http:///?action=myAction", broker.toString());
broker = new TurbineURIBroker().setActionParam(" ").setAction("myAction");
assertEquals("action", broker.getActionParam());
assertEquals("http:///?action=myAction", broker.toString());
// set value
broker = new TurbineURIBroker().setActionParam(" myaction ").setAction("myAction");
assertEquals("myaction", broker.getActionParam());
assertEquals("http:///?myaction=myAction", broker.toString());
}
@Test
public void getAction() {
// default value
assertEquals(null, broker.getAction());
// set empty
broker.setAction(null);
assertEquals("", broker.getAction());
broker.setAction(" ");
assertEquals("", broker.getAction());
// set value
broker.setAction(" myaction ");
assertEquals("myaction", broker.getAction());
// set twice
broker = broker.setAction("myAction2");
assertEquals("http:///?action=myAction2", broker.toString());
}
@Test
public void init_withParent() {
TurbineURIBroker parent = createParentBroker();
// empty broker
broker.setParent(parent);
broker.init();
assertSame(mappingRuleService, broker.getMappingRuleService());
assertEquals("myaction", broker.getActionParam());
assertEquals(true, broker.isConvertTargetCase());
assertEquals("mymapper", broker.getTargetMappingRule());
assertEquals("myAction", broker.getAction());
assertEquals("myTarget.vm", broker.getTarget());
assertEquals("/myComponent", broker.getComponentPath());
assertEquals("/myComponent/my_target.htm", broker.getPathInfo());
assertEquals("http:///myComponent/my_target.htm?myaction=myAction", broker.toString());
// override
broker = createSubBroker(parent, true);
broker.init();
assertSame(mappingRuleService2, broker.getMappingRuleService());
assertEquals("myaction2", broker.getActionParam());
assertEquals(false, broker.isConvertTargetCase());
assertEquals("mymapper2", broker.getTargetMappingRule());
assertEquals("myAction2", broker.getAction());
assertEquals("myTarget2.vm", broker.getTarget());
assertEquals("/myComponent2", broker.getComponentPath());
assertEquals("http:///myComponent2/myTarget2.htm?myaction2=myAction2", broker.toString());
broker.setComponentPath("");
assertEquals("/myTarget2.htm", broker.getPathInfo());
assertEquals("http:///myTarget2.htm?myaction2=myAction2", broker.toString());
// inherit action and target
broker = createSubBroker(parent, false);
broker.init();
assertSame(mappingRuleService2, broker.getMappingRuleService());
assertEquals("myaction2", broker.getActionParam());
assertEquals(false, broker.isConvertTargetCase());
assertEquals("mymapper2", broker.getTargetMappingRule());
assertEquals("myAction", broker.getAction());
assertEquals("myTarget.vm", broker.getTarget());
assertEquals("/myComponent2", broker.getComponentPath());
assertEquals("/myComponent2/myTarget.htm", broker.getPathInfo());
assertEquals("http:///myComponent2/myTarget.htm?myaction2=myAction", broker.toString());
}
@Test
public void reset_withParent() {
TurbineURIBroker parent = createParentBroker();
broker = createSubBroker(parent, true);
broker.init();
broker.reset();
assertSame(mappingRuleService, broker.getMappingRuleService());
assertEquals("myaction", broker.getActionParam());
assertEquals(true, broker.isConvertTargetCase());
assertEquals("mymapper", broker.getTargetMappingRule());
assertEquals("myAction", broker.getAction());
assertEquals("myTarget.vm", broker.getTarget());
assertEquals("/myComponent", broker.getComponentPath());
assertEquals("/myComponent/my_target.htm", broker.getPathInfo());
assertEquals("http:///myComponent/my_target.htm?myaction=myAction", broker.toString());
}
@Test
public void reset_withoutParent() {
broker = createSubBroker(null, true);
broker.init();
broker.reset();
assertEquals(null, broker.getMappingRuleService());
assertEquals(null, broker.getAction());
assertEquals(null, broker.getTarget());
assertEquals(null, broker.getComponentPath());
assertEquals(true, broker.isConvertTargetCase());
assertEquals("extension.output", broker.getTargetMappingRule());
assertEquals("action", broker.getActionParam());
}
@Test
public void config_withMappings() {
ApplicationContext factory = new XmlApplicationContext(new FileSystemResource(new File(srcdir,
"services-uris.xml")));
URIBrokerService uris = (URIBrokerService) factory.getBean("uris");
URIBroker link1 = uris.getURIBroker("link1");
assertEquals("http://taobao.com/hello", link1.toString());
TurbineURIBroker link2 = (TurbineURIBroker) uris.getURIBroker("link2");
assertSame(factory.getBean("mappingRuleService"), link2.getMappingRuleService());
assertEquals("http://taobao.com/mycontext/myservlet/mycomponent/my_target.htm?action=myAction",
link2.toString());
TurbineURIBroker link3 = (TurbineURIBroker) uris.getURIBroker("link3");
assertSame(factory.getBean("mapping2"), link3.getMappingRuleService());
assertEquals("http://taobao.com/mycontext/myservlet/mycomponent/myTarget.vhtml?myaction=myAction",
link3.toString());
}
@Test
public void config_withoutMappings() {
ApplicationContext factory = new XmlApplicationContext(new FileSystemResource(new File(srcdir,
"services-uris-no-mappings.xml")));
URIBrokerService uris = (URIBrokerService) factory.getBean("uris");
URIBroker link1 = uris.getURIBroker("link1");
assertEquals("http://taobao.com/hello", link1.toString());
TurbineURIBroker link2 = (TurbineURIBroker) uris.getURIBroker("link2");
assertNull(link2.getMappingRuleService());
assertEquals("http://taobao.com/mycontext/myservlet/mycomponent/my_target.vm?action=myAction", link2.toString());
TurbineURIBroker link3 = (TurbineURIBroker) uris.getURIBroker("link3");
assertNull(link3.getMappingRuleService());
assertEquals("http://taobao.com/mycontext/myservlet/mycomponent/myTarget.vm?myaction=myAction",
link3.toString());
}
}