001/*
002 * Licensed to DuraSpace under one or more contributor license agreements.
003 * See the NOTICE file distributed with this work for additional information
004 * regarding copyright ownership.
005 *
006 * DuraSpace licenses this file to you under the Apache License,
007 * Version 2.0 (the "License"); you may not use this file except in
008 * compliance with the License.  You may obtain a copy of the License at
009 *
010 *     http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018package org.fcrepo.auth.webac;
019
020import static org.fcrepo.auth.webac.URIConstants.WEBAC_MODE_READ;
021import static org.fcrepo.auth.webac.URIConstants.WEBAC_MODE_WRITE;
022import static org.junit.Assert.assertEquals;
023import static org.junit.Assert.assertTrue;
024
025import java.net.URI;
026import java.util.Arrays;
027import java.util.Collections;
028import java.util.HashSet;
029import java.util.List;
030import java.util.Set;
031
032import org.junit.Test;
033
034/**
035 * @author acoburn
036 * @since 9/2/15
037 */
038public class WebACAuthorizationTest {
039
040    private final String AGENT1 = "me";
041    private final String AGENT2 = "you";
042    private final String AGENT_CLASS1 = "this";
043    private final String AGENT_CLASS2 = "that";
044    private final String ACCESS_TO1 = "/foo";
045    private final String ACCESS_TO2 = "/bar";
046    private final String ACCESS_TO3 = "/baz";
047    private final String ACCESS_TO_CLASS1 = "ex:Image";
048    private final String ACCESS_TO_CLASS2 = "ex:Archive";
049    private final String ACCESS_GROUP1 = "/groupA";
050    private final String ACCESS_GROUP2 = "/groupB";
051    private final String DEFAULT_1 = "/foo";
052
053    @Test
054    public void testLists() {
055        final List<String> agents = Arrays.asList(AGENT1, AGENT2, AGENT1);
056        final List<String> agentClasses = Arrays.asList(AGENT_CLASS1, AGENT_CLASS2, AGENT_CLASS2);
057        final List<URI> modes = Arrays.asList(WEBAC_MODE_READ, WEBAC_MODE_WRITE, WEBAC_MODE_READ);
058        final List<String> accessTo = Arrays.asList(ACCESS_TO1, ACCESS_TO2, ACCESS_TO3);
059        final List<String> accessToClass = Arrays.asList(ACCESS_TO_CLASS1, ACCESS_TO_CLASS2);
060        final List<String> accessGroups = Arrays.asList(ACCESS_GROUP1, ACCESS_GROUP2);
061        final List<String> defaults = Collections.singletonList(DEFAULT_1);
062
063        final WebACAuthorization auth = new WebACAuthorization(agents, agentClasses,
064                modes, accessTo, accessToClass, accessGroups, defaults);
065
066        assertEquals(2, auth.getAgents().size());
067        assertTrue(auth.getAgents().contains(AGENT1));
068        assertEquals(2, auth.getAgentClasses().size());
069        assertTrue(auth.getAgentClasses().contains(AGENT_CLASS2));
070        assertEquals(2, auth.getModes().size());
071        assertTrue(auth.getModes().contains(WEBAC_MODE_READ));
072        assertEquals(3, auth.getAccessToURIs().size());
073        assertTrue(auth.getAccessToURIs().contains(ACCESS_TO3));
074        assertEquals(2, auth.getAccessToClassURIs().size());
075        assertTrue(auth.getAccessToClassURIs().contains(ACCESS_TO_CLASS2));
076        assertEquals(2, auth.getAgentGroups().size());
077        assertTrue(auth.getAgentGroups().contains(ACCESS_GROUP1));
078        assertTrue(auth.getAgentGroups().contains(ACCESS_GROUP2));
079        assertEquals(1, auth.getDefaults().size());
080
081    }
082
083    @Test
084    public void testSets() {
085        final Set<String> agents = new HashSet<>(Arrays.asList(AGENT1, AGENT2));
086        final Set<String> agentClasses = new HashSet<>(Arrays.asList(AGENT_CLASS1, AGENT_CLASS2));
087        final Set<URI> modes = new HashSet<>(Arrays.asList(WEBAC_MODE_WRITE, WEBAC_MODE_READ));
088        final Set<String> accessTo = new HashSet<>(Arrays.asList(ACCESS_TO1, ACCESS_TO2, ACCESS_TO3));
089        final Set<String> accessToClass = new HashSet<>(Arrays.asList(ACCESS_TO_CLASS1, ACCESS_TO_CLASS2));
090        final Set<String> accessGroups = new HashSet<>(Arrays.asList(ACCESS_GROUP1, ACCESS_GROUP2));
091        final Set<String> defaults = new HashSet<>(Collections.singletonList(DEFAULT_1));
092
093        final WebACAuthorization auth = new WebACAuthorization(agents, agentClasses,
094                modes, accessTo, accessToClass, accessGroups, defaults);
095
096        assertEquals(2, auth.getAgents().size());
097        assertTrue(auth.getAgents().contains(AGENT1));
098        assertEquals(2, auth.getAgentClasses().size());
099        assertTrue(auth.getAgentClasses().contains(AGENT_CLASS2));
100        assertEquals(2, auth.getModes().size());
101        assertTrue(auth.getModes().contains(WEBAC_MODE_READ));
102        assertEquals(3, auth.getAccessToURIs().size());
103        assertTrue(auth.getAccessToURIs().contains(ACCESS_TO3));
104        assertEquals(2, auth.getAccessToClassURIs().size());
105        assertTrue(auth.getAccessToClassURIs().contains(ACCESS_TO_CLASS2));
106        assertEquals(1, auth.getDefaults().size());
107        assertEquals(2, auth.getAgentGroups().size());
108        assertTrue(auth.getAgentGroups().contains(ACCESS_GROUP1));
109        assertTrue(auth.getAgentGroups().contains(ACCESS_GROUP2));
110    }
111
112
113}