/*
* 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.dataresolver;
import static com.alibaba.citrus.test.TestUtil.*;
import static org.junit.Assert.*;
import com.alibaba.citrus.service.form.Group;
import com.alibaba.citrus.service.moduleloader.ModuleEventException;
import com.alibaba.citrus.service.moduleloader.ModuleLoaderService;
import com.alibaba.test2.module.action.form.MyData;
import org.junit.Test;
import org.springframework.beans.TypeMismatchException;
import org.springframework.context.ApplicationContext;
public class FormGroupResolverTests extends AbstractDataResolverTests {
private Group group;
private MyData data;
@Test
public void error_NoName() throws Exception {
try {
execute("action", "form.group.myActionErrorNoName", "doPerform", "");
fail();
} catch (IllegalArgumentException e) {
assertThat(e, exception("missing @FormGroup's name"));
}
}
@Test
public void getGroup() throws Exception {
// 默认值:skipIfInvalid=true
// GET, empty form
execute("action", "form.group.myAction", "doGetGroup", "");
assertNull(newRequest.getAttribute("actionLog"));
// GET, invalid
execute("action", "form.group.myAction", "doGetGroup", "_fm.m._0.f=&_fm.m._0.fi=");
assertNull(newRequest.getAttribute("actionLog"));
// GET, valid
execute("action", "form.group.myAction", "doGetGroup", "_fm.m._0.f=a&_fm.m._0.fi=b");
group = (Group) newRequest.getAttribute("actionLog");
assertNotNull(group);
assertTrue(group.isValid());
// GET, invalid, but screen不支持skip
execute("screen", "form.group.myScreen", "doGetGroup", "_fm.m._0.f=&_fm.m._0.fi=");
group = (Group) newRequest.getAttribute("screenLog");
assertNotNull(group);
assertFalse(group.isValid());
}
@Test
public void getGroupDontSkipAction() throws Exception {
// 默认值:skipIfInvalid=false
// GET, invalid
execute("action", "form.group.myAction", "doGetGroupDontSkipAction", "_fm.m._0.f=&_fm.m._0.fi=");
group = (Group) newRequest.getAttribute("actionLog");
assertNotNull(group);
assertFalse(group.isValid());
// GET, valid
execute("action", "form.group.myAction", "doGetGroupDontSkipAction", "_fm.m._0.f=a&_fm.m._0.fi=b");
group = (Group) newRequest.getAttribute("actionLog");
assertNotNull(group);
assertTrue(group.isValid());
}
@Test
public void getGroupInstance_bean() throws Exception {
// 默认值:skipIfInvalid=true
// GET, invalid
execute("action", "form.group.myAction", "doGetGroupInstanceBean", "_fm.m.aaa.f=&_fm.m.aaa.fi=");
assertNull(newRequest.getAttribute("actionLog"));
// GET, valid
execute("action", "form.group.myAction", "doGetGroupInstanceBean",
"_fm.m.aaa.f=a&_fm.m.aaa.f=b&_fm.m.aaa.fi=123");
data = (MyData) newRequest.getAttribute("actionLog");
assertNotNull(data);
assertArrayEquals(new Object[] { "a", "b" }, data.getField1().toArray());
assertEquals(123, data.getField2());
// GET, invalid, but screen不支持skip
execute("screen", "form.group.myScreenGetGroupInstanceBean", "doGetGroupInstanceBean",
"_fm.m.aaa.f=&_fm.m.aaa.fi=");
data = (MyData) newRequest.getAttribute("screenLog");
assertNull(data);
}
@Test
public void getGroupInstance_bean_dontSkipAction() throws Exception {
// 默认值:skipIfInvalid=false
// GET, invalid
execute("action", "form.group.myAction", "doGetGroupInstanceBeanDontSkipAction", "_fm.m.aaa.f=&_fm.m.aaa.fi=");
data = (MyData) newRequest.getAttribute("actionLog");
assertNull(data);
// GET, valid
execute("action", "form.group.myAction", "doGetGroupInstanceBeanDontSkipAction",
"_fm.m.aaa.f=a&_fm.m.aaa.f=b&_fm.m.aaa.fi=123");
data = (MyData) newRequest.getAttribute("actionLog");
assertNotNull(data);
assertArrayEquals(new Object[] { "a", "b" }, data.getField1().toArray());
assertEquals(123, data.getField2());
}
@Test
public void getGroupInstance_bean_convertError_quiet() throws Exception {
// 默认值:skipIfInvalid=true
// GET, valid
execute("action", "form.group.myAction", "doGetGroupInstanceBean",
"_fm.m.aaa.f=a&_fm.m.aaa.f=b&_fm.m.aaa.fi=abc");
data = (MyData) newRequest.getAttribute("actionLog");
assertNotNull(data);
assertArrayEquals(new Object[] { "a", "b" }, data.getField1().toArray());
assertEquals(0, data.getField2());
}
@Test
public void getGroupInstance_bean_convertError_noisy() throws Exception {
// 默认值:skipIfInvalid=true
System.setProperty("convertQuiet", "false");
try {
ApplicationContext factory = createContext("dataresolver/services-dataresolver.xml");
moduleLoaderService = (ModuleLoaderService) factory.getBean("moduleLoaderService");
} finally {
System.clearProperty("convertQuiet");
}
// GET, valid
try {
execute("action", "form.group.myAction", "doGetGroupInstanceBean",
"_fm.m.aaa.f=a&_fm.m.aaa.f=b&_fm.m.aaa.fi=abc");
fail();
} catch (ModuleEventException e) {
assertThat(e, exception(TypeMismatchException.class, "java.lang.String", "java.lang.Integer", "abc"));
}
}
}