/**
* Copyright 2010-2016 Ralph Schaer <ralphschaer@gmail.com>
*
* 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 ch.ralscha.extdirectspring.annotation;
import static org.assertj.core.api.Assertions.assertThat;
import java.lang.reflect.Method;
import org.junit.Test;
import ch.ralscha.extdirectspring.provider.FormInfoController;
import ch.ralscha.extdirectspring.provider.FormInfoController2;
import ch.ralscha.extdirectspring.provider.FormInfoController3;
import ch.ralscha.extdirectspring.provider.PollProvider;
import ch.ralscha.extdirectspring.provider.RemoteProviderFormLoad;
import ch.ralscha.extdirectspring.provider.RemoteProviderSimple;
import ch.ralscha.extdirectspring.provider.RemoteProviderSimpleNamed;
import ch.ralscha.extdirectspring.provider.RemoteProviderStoreModify;
import ch.ralscha.extdirectspring.provider.RemoteProviderStoreRead;
import ch.ralscha.extdirectspring.provider.RemoteProviderTreeLoad;
import ch.ralscha.extdirectspring.provider.UploadService;
import ch.ralscha.extdirectspring.provider.WrongFormPostController;
public class ExtDirectMethodTypeTest {
@Test
public void testSimpleIsValid() throws SecurityException {
assertThat(ExtDirectMethodType.SIMPLE.isValid("remoteProviderSimple.method1",
RemoteProviderSimple.class,
findMethod(RemoteProviderSimple.class, "method1"))).isTrue();
assertThat(ExtDirectMethodType.SIMPLE.isValid("remoteProviderSimple.method2",
RemoteProviderSimple.class,
findMethod(RemoteProviderSimple.class, "method2"))).isTrue();
assertThat(ExtDirectMethodType.SIMPLE.isValid("remoteProviderSimple.method3",
RemoteProviderSimple.class,
findMethod(RemoteProviderSimple.class, "method3"))).isTrue();
assertThat(ExtDirectMethodType.SIMPLE.isValid(
"remoteProviderSimple.method3WithError", RemoteProviderSimple.class,
findMethod(RemoteProviderSimple.class, "method3WithError"))).isFalse();
}
@Test
public void testSimpleNamedIsValid() throws SecurityException {
for (Method method : RemoteProviderSimpleNamed.class.getMethods()) {
if (method.getName().startsWith("method")) {
assertThat(ExtDirectMethodType.SIMPLE_NAMED.isValid(
"remoteProviderSimpleNamed." + method.getName(),
RemoteProviderSimpleNamed.class, method)).isTrue();
}
}
}
@Test
public void testFormLoadIsValid() throws SecurityException {
for (Method method : RemoteProviderFormLoad.class.getMethods()) {
if (method.getName().startsWith("method")) {
assertThat(ExtDirectMethodType.FORM_LOAD.isValid(
"remoteProviderFormLoad." + method.getName(),
RemoteProviderFormLoad.class, method)).isTrue();
}
}
}
@Test
public void testStoreReadIsValid() throws SecurityException {
for (Method method : RemoteProviderStoreRead.class.getMethods()) {
if (method.getName().startsWith("method")) {
assertThat(ExtDirectMethodType.STORE_READ.isValid(
"remoteProviderStoreRead." + method.getName(),
RemoteProviderStoreRead.class, method)).isTrue();
}
}
}
@Test
public void testStoreModifyIsValid() throws SecurityException {
for (Method method : RemoteProviderStoreModify.class.getMethods()) {
if (method.getName().startsWith("create")
|| method.getName().startsWith("update")
|| method.getName().startsWith("destroy")) {
assertThat(ExtDirectMethodType.STORE_MODIFY.isValid(
"remoteProviderStoreModify." + method.getName(),
RemoteProviderStoreModify.class, method)).isTrue();
}
}
}
@Test
public void testFormPostIsValid() throws SecurityException {
assertThat(ExtDirectMethodType.FORM_POST.isValid(
"wrongFormPostController.updateInfo1", WrongFormPostController.class,
findMethod(WrongFormPostController.class, "updateInfo1"))).isFalse();
assertThat(ExtDirectMethodType.FORM_POST.isValid(
"wrongFormPostController.updateInfo2", WrongFormPostController.class,
findMethod(WrongFormPostController.class, "updateInfo2"))).isFalse();
assertThat(ExtDirectMethodType.FORM_POST.isValid(
"wrongFormPostController.updateInfo3", WrongFormPostController.class,
findMethod(WrongFormPostController.class, "updateInfo3"))).isFalse();
assertThat(ExtDirectMethodType.FORM_POST.isValid(
"wrongFormPostController.updateInfo4", WrongFormPostController.class,
findMethod(WrongFormPostController.class, "updateInfo4"))).isFalse();
assertThat(ExtDirectMethodType.FORM_POST.isValid("uploadService.upload",
UploadService.class, findMethod(UploadService.class, "upload"))).isTrue();
assertThat(ExtDirectMethodType.FORM_POST.isValid("uploadService.uploadEd",
UploadService.class, findMethod(UploadService.class, "uploadEd")))
.isTrue();
assertThat(ExtDirectMethodType.FORM_POST.isValid(
"formInfoController2.updateInfo1", FormInfoController2.class,
findMethod(FormInfoController2.class, "updateInfo1"))).isTrue();
assertThat(ExtDirectMethodType.FORM_POST.isValid(
"formInfoController2.updateInfo2", FormInfoController2.class,
findMethod(FormInfoController2.class, "updateInfo2"))).isTrue();
assertThat(ExtDirectMethodType.FORM_POST.isValid(
"formInfoController2.invalidMethod", FormInfoController2.class,
findMethod(FormInfoController2.class, "invalidMethod"))).isFalse();
assertThat(ExtDirectMethodType.FORM_POST.isValid("formInfoController.updateInfo",
FormInfoController.class,
findMethod(FormInfoController.class, "updateInfo"))).isTrue();
assertThat(ExtDirectMethodType.FORM_POST.isValid("formInfoController.upload",
FormInfoController.class, findMethod(FormInfoController.class, "upload")))
.isTrue();
assertThat(ExtDirectMethodType.FORM_POST.isValid(
"formInfoController.invalidMethod1", FormInfoController.class,
findMethod(FormInfoController.class, "invalidMethod1"))).isFalse();
assertThat(ExtDirectMethodType.FORM_POST.isValid(
"formInfoController.invalidMethod2", FormInfoController.class,
findMethod(FormInfoController.class, "invalidMethod2"))).isFalse();
assertThat(ExtDirectMethodType.FORM_POST.isValid(
"formInfoController.updateInfoDirect", FormInfoController.class,
findMethod(FormInfoController.class, "updateInfoDirect"))).isTrue();
assertThat(ExtDirectMethodType.FORM_POST.isValid(
"formInfoController.updateInfoDirectEd", FormInfoController.class,
findMethod(FormInfoController.class, "updateInfoDirectEd"))).isTrue();
}
@Test
public void testTreeLoadIsValid() throws SecurityException {
for (Method method : RemoteProviderTreeLoad.class.getMethods()) {
if (method.getName().startsWith("method")) {
assertThat(ExtDirectMethodType.TREE_LOAD.isValid(
"remoteProviderTreeLoad." + method.getName(),
RemoteProviderTreeLoad.class, method)).isTrue();
}
}
}
@Test
public void testPollIsValid() throws SecurityException {
for (Method method : PollProvider.class.getMethods()) {
if (method.getName().startsWith("message")
|| method.getName().startsWith("handleMessage")) {
assertThat(ExtDirectMethodType.POLL.isValid(
"pollProvider." + method.getName(), PollProvider.class, method))
.isTrue();
}
}
}
@Test
public void testFormPostJsonIsValid() throws SecurityException {
assertThat(ExtDirectMethodType.FORM_POST_JSON.isValid(
"formInfoController3.updateInfoJson", FormInfoController3.class,
findMethod(FormInfoController3.class, "updateInfoJson"))).isTrue();
assertThat(ExtDirectMethodType.FORM_POST_JSON.isValid(
"formInfoController3.updateInfoJsonDirect", FormInfoController3.class,
findMethod(FormInfoController3.class, "updateInfoJsonDirect"))).isTrue();
assertThat(ExtDirectMethodType.FORM_POST_JSON.isValid(
"formInfoController3.updateInfoJsonDirectError",
FormInfoController3.class,
findMethod(FormInfoController3.class, "updateInfoJsonDirectError")))
.isTrue();
assertThat(ExtDirectMethodType.FORM_POST_JSON.isValid(
"formInfoController3.updateInfoJsonDirectNotRegisteredWithBindingResultAsParameter",
FormInfoController3.class,
findMethod(FormInfoController3.class,
"updateInfoJsonDirectNotRegisteredWithBindingResultAsParameter")))
.isFalse();
assertThat(ExtDirectMethodType.FORM_POST_JSON.isValid(
"formInfoController3.updateInfoJsonDirectNotRegisteredWithMultipartFileAsParameter",
FormInfoController3.class,
findMethod(FormInfoController3.class,
"updateInfoJsonDirectNotRegisteredWithMultipartFileAsParameter")))
.isFalse();
}
private static Method findMethod(Class<?> clazz, String methodName) {
for (Method method : clazz.getMethods()) {
if (method.getName().equals(methodName)) {
return method;
}
}
return null;
}
}