package jnpf.permission.controller; import jnpf.permission.AuthorizeApi; import jnpf.permission.fallback.AuthorizeApiFallback; import jnpf.permission.model.authorize.UserPermissionProbe; import jnpf.permission.service.AuthorizeService; import jnpf.util.NoDataSourceBind; import org.junit.Test; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; public class UserPermissionProbeControllerTest { @Test public void controllerDelegatesProbeAndKeepsDataSourceBindingDisabled() throws Exception { UserPermissionProbe.Result expected = new UserPermissionProbe.Result(true, "ALLOWED"); AuthorizeService service = (AuthorizeService) Proxy.newProxyInstance( AuthorizeService.class.getClassLoader(), new Class[]{AuthorizeService.class}, (proxy, method, args) -> "probeUserPermission".equals(method.getName()) ? expected : null); AuthorizeController controller = new AuthorizeController( service, null, null, null, null, null, null, null, null, null); UserPermissionProbe probe = new UserPermissionProbe(); assertSame(expected, controller.probeUserPermission(probe)); Method method = AuthorizeController.class.getMethod("probeUserPermission", UserPermissionProbe.class); assertNotNull(method.getAnnotation(NoDataSourceBind.class)); assertEquals("/probeUserPermission", method.getAnnotation(PostMapping.class).value()[0]); } @Test public void feignContractUsesPostBodyAndFallbackFailsClosed() throws Exception { Method method = AuthorizeApi.class.getMethod("probeUserPermission", UserPermissionProbe.class); assertEquals("/probeUserPermission", method.getAnnotation(PostMapping.class).value()[0]); assertTrue(method.getParameters()[0].isAnnotationPresent(RequestBody.class)); UserPermissionProbe.Result result = new AuthorizeApiFallback().probeUserPermission(new UserPermissionProbe()); assertFalse(result.isAllowed()); assertEquals("DEPENDENCY_FAILURE", result.getReasonCode()); } }