BatchPolicyRequestTest.java revision 41c1067de1a5fa74255d311e5362548ae41f9a04
/*
* The contents of this file are subject to the terms of the Common Development and
* Distribution License (the License). You may not use this file except in compliance with the
* License.
*
* You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
* specific language governing permission and limitations under the License.
*
* When distributing Covered Software, include this CDDL Header Notice in each file and include
* the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
* Header, with the fields enclosed by brackets [] replaced by your own identifying
* information: "Portions copyright [year] [name of copyright owner]".
*
* Copyright 2014 ForgeRock AS.
*/
package org.forgerock.openam.forgerockrest.entitlements.model.json;
import com.sun.identity.entitlement.EntitlementException;
import org.forgerock.json.fluent.JsonValue;
import org.forgerock.json.resource.ActionRequest;
import org.forgerock.json.resource.ServerContext;
import org.forgerock.openam.rest.resource.RealmContext;
import org.forgerock.openam.rest.resource.SubjectContext;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import javax.security.auth.Subject;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import static org.fest.assertions.Assertions.assertThat;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.*;
/**
* Unit test for {@link BatchPolicyRequest}.
*
* @since 12.0.0
*/
public class BatchPolicyRequestTest {
@Mock
private SubjectContext subjectContext;
@Mock
private ActionRequest actionRequest;
private Subject restSubject;
@BeforeMethod
public void setUp() {
MockitoAnnotations.initMocks(this);
restSubject = new Subject();
}
@Test
public void shouldConstructBatchPolicyRequest() throws EntitlementException {
given(subjectContext.getCallerSubject()).willReturn(restSubject);
Map<String, Object> properties = new HashMap<String, Object>();
properties.put("resources", Arrays.asList("/resource/a", "/resource/b"));
given(actionRequest.getContent()).willReturn(JsonValue.json(properties));
ServerContext context = buildContextStructure("/abc");
BatchPolicyRequest request = BatchPolicyRequest.getBatchPolicyRequest(context, actionRequest);
Assertions.assertThat(request).isNotNull();
Assertions.assertThat(request.getResources()).containsOnly("/resource/a", "/resource/b");
verify(subjectContext).getCallerSubject();
verify(actionRequest, times(2)).getContent();
verifyNoMoreInteractions(subjectContext, actionRequest);
}
@Test(expectedExceptions = EntitlementException.class)
public void shouldRejectNullResources() throws EntitlementException {
// When...
Map<String, Object> properties = new HashMap<String, Object>();
given(actionRequest.getContent()).willReturn(JsonValue.json(properties));
given(subjectContext.getCallerSubject()).willReturn(restSubject);
// Given...
ServerContext context = buildContextStructure("/abc");
BatchPolicyRequest.getBatchPolicyRequest(context, actionRequest);
}
@Test(expectedExceptions = EntitlementException.class)
public void shouldRejectEmptyResources() throws EntitlementException {
// When...
Map<String, Object> properties = new HashMap<String, Object>();
given(actionRequest.getContent()).willReturn(JsonValue.json(properties));
given(subjectContext.getCallerSubject()).willReturn(restSubject);
// Given...
ServerContext context = buildContextStructure("/abc");
BatchPolicyRequest.getBatchPolicyRequest(context, actionRequest);
}
private ServerContext buildContextStructure(final String realm) {
return new ServerContext(new RealmContext(subjectContext, realm));
}
}