/* * 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.HashMap; import java.util.Optional; import java.util.concurrent.CompletableFuture; import be.objectify.deadbolt.java.ConstraintLogic; import be.objectify.deadbolt.java.ConstraintPoint; import be.objectify.deadbolt.java.DeadboltHandler; import be.objectify.deadbolt.java.ExecutionContextProvider; import be.objectify.deadbolt.java.cache.HandlerCache; import be.objectify.deadbolt.java.utils.TriFunction; import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; import play.Configuration; import play.mvc.Action; import play.mvc.Http; import play.mvc.Results; /** * @author Steve Chaloner (steve@objectify.be) */ public class SubjectNotPresentActionTest { @Test public void testConfig() throws Exception { final SubjectNotPresent subjectNotPresent = Mockito.mock(SubjectNotPresent.class); Mockito.when(subjectNotPresent.forceBeforeAuthCheck()) .thenReturn(true); Mockito.when(subjectNotPresent.handlerKey()) .thenReturn("foo"); Mockito.when(subjectNotPresent.content()) .thenReturn("x/y"); final SubjectNotPresentAction action = new SubjectNotPresentAction(Mockito.mock(HandlerCache.class), Mockito.mock(Configuration.class), Mockito.mock(ExecutionContextProvider.class), Mockito.mock(ConstraintLogic.class)); action.configuration = subjectNotPresent; final AbstractSubjectAction<SubjectNotPresent>.Config config = action.config(); Assert.assertTrue(config.forceBeforeAuthCheck); Assert.assertEquals("foo", config.handlerKey); Assert.assertEquals("x/y", config.content.orElse(null)); } @Test public void testPresent() throws Exception { final SubjectNotPresentAction action = new SubjectNotPresentAction(Mockito.mock(HandlerCache.class), Mockito.mock(Configuration.class), Mockito.mock(ExecutionContextProvider.class), Mockito.mock(ConstraintLogic.class)); final Http.Context ctx = Mockito.mock(Http.Context.class); ctx.args = new HashMap<>(); final Http.Request request = Mockito.mock(Http.Request.class); Mockito.when(request.uri()) .thenReturn("http://localhost/test"); Mockito.when(ctx.request()) .thenReturn(request); final DeadboltHandler handler = Mockito.mock(DeadboltHandler.class); action.present(ctx, handler, Optional.empty()); Assert.assertTrue((Boolean)ctx.args.get("deadbolt.action-unauthorised")); Mockito.verify(handler).onAuthFailure(ctx, Optional.empty()); } @Test public void testNotPresent() throws Exception { final SubjectNotPresentAction action = new SubjectNotPresentAction(Mockito.mock(HandlerCache.class), Mockito.mock(Configuration.class), Mockito.mock(ExecutionContextProvider.class), Mockito.mock(ConstraintLogic.class)); action.delegate = Mockito.mock(Action.class); final Http.Context ctx = Mockito.mock(Http.Context.class); ctx.args = new HashMap<>(); action.notPresent(ctx, Mockito.mock(DeadboltHandler.class), Optional.empty()); Assert.assertTrue((Boolean)ctx.args.get("deadbolt.action-authorised")); Mockito.verify(action.delegate).call(ctx); } @Test public void testTestSubject() throws Exception { final ConstraintLogic constraintLogic = Mockito.mock(ConstraintLogic.class); Mockito.when(constraintLogic.subjectNotPresent(Mockito.any(Http.Context.class), Mockito.any(DeadboltHandler.class), Mockito.eq(Optional.empty()), Mockito.any(TriFunction.class), Mockito.any(TriFunction.class), Mockito.eq(ConstraintPoint.CONTROLLER))) .thenReturn(CompletableFuture.completedFuture(Results.TODO)); final SubjectNotPresentAction action = new SubjectNotPresentAction(Mockito.mock(HandlerCache.class), Mockito.mock(Configuration.class), Mockito.mock(ExecutionContextProvider.class), constraintLogic); action.configuration = Mockito.mock(SubjectNotPresent.class); action.testSubject(constraintLogic, Mockito.mock(Http.Context.class), action.config(), Mockito.mock(DeadboltHandler.class)).get(); Mockito.verify(constraintLogic).subjectNotPresent(Mockito.any(Http.Context.class), Mockito.any(DeadboltHandler.class), Mockito.eq(Optional.empty()), Mockito.any(TriFunction.class), Mockito.any(TriFunction.class), Mockito.eq(ConstraintPoint.CONTROLLER)); } }