/* * Copyright 2010-2017 Steve Chaloner * * 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 be.objectify.deadbolt.java.actions; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.function.BiFunction; import be.objectify.deadbolt.java.ConstraintLogic; import be.objectify.deadbolt.java.DeadboltHandler; import be.objectify.deadbolt.java.ExecutionContextProvider; import be.objectify.deadbolt.java.cache.CompositeCache; import be.objectify.deadbolt.java.cache.HandlerCache; import be.objectify.deadbolt.java.composite.Constraint; import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; import play.Configuration; import play.mvc.Http; import scala.concurrent.ExecutionContextExecutor; /** * @author Steve Chaloner (steve@objectify.be) */ public class CompositeActionTest { @Test public void testApplyRestriction() throws Exception { final Composite composite = Mockito.mock(Composite.class); Mockito.when(composite.value()) .thenReturn("foo"); Mockito.when(composite.meta()) .thenReturn("bar"); Mockito.when(composite.content()) .thenReturn("x/y"); final CompositeCache compositeCache = Mockito.mock(CompositeCache.class); final Constraint constraint = Mockito.mock(Constraint.class); Mockito.when(constraint.test(Mockito.any(Http.Context.class), Mockito.any(DeadboltHandler.class), Mockito.any(Executor.class), Mockito.eq(Optional.of("bar")), Mockito.any(BiFunction.class))) .then(invocation -> ((Optional<String>)invocation.getArguments()[3]).map(meta -> meta.equals("bar")) .map(CompletableFuture::completedFuture) .orElse(CompletableFuture.completedFuture(false))); Mockito.when(compositeCache.apply("foo")) .thenReturn(Optional.of(constraint)); final CompositeAction action = new CompositeAction(Mockito.mock(HandlerCache.class), Mockito.mock(Configuration.class), Mockito.mock(ExecutionContextProvider.class), compositeCache, Mockito.mock(ConstraintLogic.class)) { @Override protected ExecutionContextExecutor executor() { return Mockito.mock(ExecutionContextExecutor.class); } }; action.configuration = composite; final Http.Context ctx = Mockito.mock(Http.Context.class); final DeadboltHandler handler = Mockito.mock(DeadboltHandler.class); action.applyRestriction(ctx, handler); Mockito.verify(constraint).test(Mockito.eq(ctx), Mockito.eq(handler), Mockito.any(Executor.class), Mockito.eq(Optional.of("bar")), Mockito.any(BiFunction.class)); } @Test public void testGetMeta() throws Exception { final Composite composite = Mockito.mock(Composite.class); Mockito.when(composite.meta()) .thenReturn("foo"); final CompositeAction action = new CompositeAction(Mockito.mock(HandlerCache.class), Mockito.mock(Configuration.class), Mockito.mock(ExecutionContextProvider.class), Mockito.mock(CompositeCache.class), Mockito.mock(ConstraintLogic.class)); action.configuration = composite; Assert.assertEquals("foo", action.getMeta()); } @Test public void testGetValue() throws Exception { final Composite composite = Mockito.mock(Composite.class); Mockito.when(composite.value()) .thenReturn("foo"); final CompositeAction action = new CompositeAction(Mockito.mock(HandlerCache.class), Mockito.mock(Configuration.class), Mockito.mock(ExecutionContextProvider.class), Mockito.mock(CompositeCache.class), Mockito.mock(ConstraintLogic.class)); action.configuration = composite; Assert.assertEquals("foo", action.getValue()); } @Test public void testGetHandlerKey() throws Exception { final Composite composite = Mockito.mock(Composite.class); Mockito.when(composite.handlerKey()) .thenReturn("foo"); final CompositeAction action = new CompositeAction(Mockito.mock(HandlerCache.class), Mockito.mock(Configuration.class), Mockito.mock(ExecutionContextProvider.class), Mockito.mock(CompositeCache.class), Mockito.mock(ConstraintLogic.class)); action.configuration = composite; Assert.assertEquals("foo", action.getHandlerKey()); } }