blob: 91cf59c3106cec4a297665b4d6d6e7bc44098afb [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.sling.jackrabbit.usermanager.impl.post;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.apache.jackrabbit.oak.spi.security.user.AuthorizableType;
import org.apache.sling.api.request.RequestParameter;
import org.apache.sling.api.request.builder.Builders;
import org.apache.sling.jackrabbit.usermanager.PrincipalNameFilter;
import org.apache.sling.jackrabbit.usermanager.PrincipalNameGenerator;
import org.apache.sling.jackrabbit.usermanager.PrincipalNameGenerator.NameInfo;
import org.apache.sling.jcr.jackrabbit.usermanager.it.post.CustomPrincipalNameFilterImpl;
import org.apache.sling.servlets.post.SlingPostConstants;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class PrincipalNameGeneratorImplTest {
@Parameters(name = "Type: {0}")
public static Iterable<AuthorizableType> data() {
return Arrays.asList(AuthorizableType.USER, AuthorizableType.GROUP);
}
private PrincipalNameGenerator defaultGenerator = new PrincipalNameGeneratorImpl();
private AuthorizableType type;
public PrincipalNameGeneratorImplTest(AuthorizableType type) {
this.type = type;
}
/**
* Helper to reduce code duplication
*
* @param map the map to add to
* @param paramName the parameter name
* @param paramValue the parameter value
* @return
*/
private static RequestParameter[] addParam(Map<String, RequestParameter[]> map, String paramName, String paramValue) {
return map.put(paramName, new RequestParameter[] {
Builders.newRequestParameter(paramName, paramValue)
});
}
@Test
public void testPrincipalNameFromName() {
PrincipalNameGenerator generator = new PrincipalNameGeneratorImpl();
PrincipalNameFilter filter = null;
Map<String, RequestParameter[]> parameters = new HashMap<>();
addParam(parameters, SlingPostConstants.RP_NODE_NAME, "name1");
NameInfo nameInfo = generator.getPrincipalName(parameters, type, filter, defaultGenerator);
assertNotNull(nameInfo);
assertEquals("name1", nameInfo.getPrincipalName());
assertFalse(nameInfo.isMakeUnique());
}
@Test
public void testPrincipalNameFromNameHint() {
PrincipalNameGenerator generator = new PrincipalNameGeneratorImpl();
PrincipalNameFilter filter = null;
Map<String, RequestParameter[]> parameters = new HashMap<>();
addParam(parameters, SlingPostConstants.RP_NODE_NAME_HINT, "name1");
NameInfo nameInfo = generator.getPrincipalName(parameters, type, filter, defaultGenerator);
assertNotNull(nameInfo);
assertEquals("name1", nameInfo.getPrincipalName());
assertTrue(nameInfo.isMakeUnique());
}
@Test
public void testPrincipalNameFromNameHintWithFilter() {
PrincipalNameGenerator generator = new PrincipalNameGeneratorImpl();
PrincipalNameFilter filter = new CustomPrincipalNameFilterImpl();
Map<String, RequestParameter[]> parameters = new HashMap<>();
addParam(parameters, SlingPostConstants.RP_NODE_NAME_HINT, "Na me1");
NameInfo nameInfo = generator.getPrincipalName(parameters, type, filter, defaultGenerator);
assertNotNull(nameInfo);
assertEquals("na_me1", nameInfo.getPrincipalName());
assertTrue(nameInfo.isMakeUnique());
}
@Test
public void testPrincipalNameFromNameHintTooLong() {
PrincipalNameGenerator generator = new PrincipalNameGeneratorImpl();
PrincipalNameFilter filter = null;
Map<String, RequestParameter[]> parameters = new HashMap<>();
addParam(parameters, SlingPostConstants.RP_NODE_NAME_HINT, "namethatistoolong123456789");
NameInfo nameInfo = generator.getPrincipalName(parameters, type, filter, defaultGenerator);
assertNotNull(nameInfo);
assertEquals("namethatistoolong123", nameInfo.getPrincipalName());
assertTrue(nameInfo.isMakeUnique());
}
@Test
public void testPrincipalNameFromNameValueFrom() {
PrincipalNameGenerator generator = new PrincipalNameGeneratorImpl();
PrincipalNameFilter filter = null;
Map<String, RequestParameter[]> parameters = new HashMap<>();
addParam(parameters, "displayName", "name1");
addParam(parameters, String.format("%s%s", SlingPostConstants.RP_NODE_NAME, SlingPostConstants.VALUE_FROM_SUFFIX), "displayName");
NameInfo nameInfo = generator.getPrincipalName(parameters, type, filter, defaultGenerator);
assertNotNull(nameInfo);
assertEquals("name1", nameInfo.getPrincipalName());
assertFalse(nameInfo.isMakeUnique());
}
@Test
public void testPrincipalNameFromNameValueFromTooLong() {
PrincipalNameGenerator generator = new PrincipalNameGeneratorImpl();
PrincipalNameFilter filter = null;
Map<String, RequestParameter[]> parameters = new HashMap<>();
addParam(parameters, "displayName", "namethatistoolong123456789");
addParam(parameters, String.format("%s%s", SlingPostConstants.RP_NODE_NAME, SlingPostConstants.VALUE_FROM_SUFFIX), "displayName");
NameInfo nameInfo = generator.getPrincipalName(parameters, type, filter, defaultGenerator);
assertNotNull(nameInfo);
assertEquals("namethatistoolong123456789", nameInfo.getPrincipalName());
assertFalse(nameInfo.isMakeUnique());
}
@Test
public void testPrincipalNameFromNameValueFromWithFilter() {
PrincipalNameGenerator generator = new PrincipalNameGeneratorImpl();
PrincipalNameFilter filter = new CustomPrincipalNameFilterImpl();
Map<String, RequestParameter[]> parameters = new HashMap<>();
addParam(parameters, "displayName", "Na me1");
addParam(parameters, String.format("%s%s", SlingPostConstants.RP_NODE_NAME, SlingPostConstants.VALUE_FROM_SUFFIX), "displayName");
NameInfo nameInfo = generator.getPrincipalName(parameters, type, filter, defaultGenerator);
assertNotNull(nameInfo);
assertEquals("Na me1", nameInfo.getPrincipalName());
assertFalse(nameInfo.isMakeUnique());
}
@Test
public void testPrincipalNameFromNameHintValueFrom() {
PrincipalNameGenerator generator = new PrincipalNameGeneratorImpl();
PrincipalNameFilter filter = null;
Map<String, RequestParameter[]> parameters = new HashMap<>();
addParam(parameters, "displayName", "name1");
addParam(parameters, String.format("%s%s", SlingPostConstants.RP_NODE_NAME_HINT, SlingPostConstants.VALUE_FROM_SUFFIX), "displayName");
NameInfo nameInfo = generator.getPrincipalName(parameters, type, filter, defaultGenerator);
assertNotNull(nameInfo);
assertEquals("name1", nameInfo.getPrincipalName());
assertTrue(nameInfo.isMakeUnique());
}
@Test
public void testPrincipalNameFromNameHintValueFromTooLong() {
PrincipalNameGenerator generator = new PrincipalNameGeneratorImpl();
PrincipalNameFilter filter = null;
Map<String, RequestParameter[]> parameters = new HashMap<>();
addParam(parameters, "displayName", "namethatistoolong123456789");
addParam(parameters, String.format("%s%s", SlingPostConstants.RP_NODE_NAME_HINT, SlingPostConstants.VALUE_FROM_SUFFIX), "displayName");
NameInfo nameInfo = generator.getPrincipalName(parameters, type, filter, defaultGenerator);
assertNotNull(nameInfo);
assertEquals("namethatistoolong123", nameInfo.getPrincipalName());
assertTrue(nameInfo.isMakeUnique());
}
@Test
public void testPrincipalNameFromNameHintValueFromWithFilter() {
PrincipalNameGenerator generator = new PrincipalNameGeneratorImpl();
PrincipalNameFilter filter = new CustomPrincipalNameFilterImpl();
Map<String, RequestParameter[]> parameters = new HashMap<>();
addParam(parameters, "displayName", "Na me1");
addParam(parameters, String.format("%s%s", SlingPostConstants.RP_NODE_NAME_HINT, SlingPostConstants.VALUE_FROM_SUFFIX), "displayName");
NameInfo nameInfo = generator.getPrincipalName(parameters, type, filter, defaultGenerator);
assertNotNull(nameInfo);
assertEquals("na_me1", nameInfo.getPrincipalName());
assertTrue(nameInfo.isMakeUnique());
}
@Test
public void testPrincipalNameFromConfiguredHint() {
PrincipalNameGenerator generator = new PrincipalNameGeneratorImpl(new String[] {
"displayName2"
},
10);
PrincipalNameFilter filter = null;
Map<String, RequestParameter[]> parameters = new HashMap<>();
addParam(parameters, "displayName2", "name1");
NameInfo nameInfo = generator.getPrincipalName(parameters, type, filter, defaultGenerator);
assertNotNull(nameInfo);
assertEquals("name1", nameInfo.getPrincipalName());
assertTrue(nameInfo.isMakeUnique());
}
@Test
public void testPrincipalNameFromConfiguredHintWithFilter() {
PrincipalNameGenerator generator = new PrincipalNameGeneratorImpl(new String[] {
"displayName2"
},
10);
PrincipalNameFilter filter = new CustomPrincipalNameFilterImpl();
Map<String, RequestParameter[]> parameters = new HashMap<>();
addParam(parameters, "displayName2", "Na me1");
NameInfo nameInfo = generator.getPrincipalName(parameters, type, filter, defaultGenerator);
assertNotNull(nameInfo);
assertEquals("na_me1", nameInfo.getPrincipalName());
assertTrue(nameInfo.isMakeUnique());
}
@Test
public void testPrincipalNameFromConfiguredHintTooLong() {
PrincipalNameGenerator generator = new PrincipalNameGeneratorImpl(new String[] {
"displayName2"
},
10);
PrincipalNameFilter filter = null;
Map<String, RequestParameter[]> parameters = new HashMap<>();
addParam(parameters, "displayName2", "namethatistoolong");
NameInfo nameInfo = generator.getPrincipalName(parameters, type, filter, defaultGenerator);
assertNotNull(nameInfo);
assertEquals("namethatis", nameInfo.getPrincipalName());
assertTrue(nameInfo.isMakeUnique());
}
@Test
public void testPrincipalNameNotFound() {
PrincipalNameGenerator generator = new PrincipalNameGeneratorImpl();
PrincipalNameFilter filter = null;
Map<String, RequestParameter[]> parameters = new HashMap<>();
NameInfo nameInfo = generator.getPrincipalName(parameters, type, filter, defaultGenerator);
assertNull(nameInfo);
}
}