blob: 6285caf12cfc56d0547ab70a6f5a43038aaa59ae [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.jcr.js.nodetypes.mock;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.CONSTRAINT_BINARY;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.CONSTRAINT_BOOLEAN;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.CONSTRAINT_DATE;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.CONSTRAINT_DOUBLE;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.CONSTRAINT_LONG;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.CONSTRAINT_NAME;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.CONSTRAINT_PATH;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.CONSTRAINT_REFERENCE;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.CONSTRAINT_STRING;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.DEFAULT_VALUE_BOOLEAN;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.DEFAULT_VALUE_CALENDAR;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.DEFAULT_VALUE_DOUBLE;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.DEFAULT_VALUE_LONG;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.DEFAULT_VALUE_NAME;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.DEFAULT_VALUE_PATH;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.DEFAULT_VALUE_REFERENCE;
import static org.apache.sling.jcr.js.nodetypes.GenerationConstants.DEFAULT_VALUE_STRING;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import javax.jcr.Node;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Value;
import javax.jcr.ValueFormatException;
import javax.jcr.Workspace;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.NodeTypeIterator;
import javax.jcr.nodetype.NodeTypeManager;
import javax.jcr.nodetype.PropertyDefinition;
import javax.jcr.version.OnParentVersionAction;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.jcr.js.nodetypes.GenerationConstants;
/**
* Generates the PropertyDefinition mocks to simulate the property definitions that the servlet gets
* from the node type manager.
*
*/
public class MockPropertyDefGenerator {
// mock classes
protected SlingHttpServletRequest request = null;
protected SlingHttpServletResponse response = null;
protected Resource resource = null;
protected Node currentNode = null;
protected Session session = null;
protected Workspace workspace = null;
protected NodeTypeManager ntManager = null;
protected NodeTypeIterator nodeTypeIterator = null;
protected ByteArrayOutputStream outStream = null;
public PropertyDefinition getSimplePropertyDef(String name) {
PropertyDefinition propertyDef = mock(PropertyDefinition.class);
when(propertyDef.getOnParentVersion()).thenReturn(OnParentVersionAction.COPY);
when(propertyDef.getName()).thenReturn(name);
return propertyDef;
}
private PropertyDefinition getCompletePropertyDev(String name, Integer type, String[] valueConstraints, String defaultValueString) throws ValueFormatException, RepositoryException {
Value defaultValue = mock(Value.class);
when(defaultValue.getString()).thenReturn(defaultValueString);
PropertyDefinition propertyDef = getPropertyDef(name, type, valueConstraints, new Value[] {defaultValue});
return propertyDef;
}
/**
* @param name
* @param type
* @param valueConstraints
* @param defaultValue - the getType() method will be mocked within this method. You only need to mock the getString(), getDouble() methods.
* @return
* @throws ValueFormatException
* @throws RepositoryException
*/
public PropertyDefinition getPropertyDef(String name, Integer type, String[] valueConstraints, Value[] defaultValues)
throws ValueFormatException, RepositoryException {
return getPropertyDef(name, type, Boolean.TRUE, Boolean.TRUE, Boolean.TRUE, Boolean.TRUE, OnParentVersionAction.VERSION, valueConstraints, defaultValues);
}
public PropertyDefinition getPropertyDef(String propertyName, Integer type, Boolean isAutoCreated, Boolean isMandatory, Boolean isProtected, Boolean isMultiple, Integer onParentVersionAction, String[] valueConstraints, Value[] defaultValues)
throws ValueFormatException, RepositoryException {
PropertyDefinition propertyDef = mock(PropertyDefinition.class);
when(propertyDef.getOnParentVersion()).thenReturn(onParentVersionAction);
when(propertyDef.getName()).thenReturn(propertyName);
when(propertyDef.getRequiredType()).thenReturn(type);
when(propertyDef.getValueConstraints()).thenReturn(valueConstraints);
when(propertyDef.isMultiple()).thenReturn(isMultiple);
when(propertyDef.isProtected()).thenReturn(isProtected);
NodeType declaringNodeType = mock(NodeType.class);
when(declaringNodeType.getName()).thenReturn("ntName");
when(propertyDef.getDeclaringNodeType()).thenReturn(declaringNodeType);
if (defaultValues!=null){
for (Value defaultValue : defaultValues) {
when(defaultValue.getType()).thenReturn(type);
}
}
when(propertyDef.getDefaultValues()).thenReturn(defaultValues);
when(propertyDef.isAutoCreated()).thenReturn(isAutoCreated);
when(propertyDef.isMandatory()).thenReturn(isMandatory);
return propertyDef;
}
@SuppressWarnings("deprecation")
public PropertyDefinition[] getDifferentPropertyDefinitions() throws ValueFormatException, RepositoryException{
Value defaultValue1 = mock(Value.class);
when(defaultValue1.getType()).thenReturn(PropertyType.BINARY);
when(defaultValue1.getStream()).thenReturn(new ByteArrayInputStream(GenerationConstants.DEFAULT_VALUE_BINARY_0.getBytes()));
Value defaultValue2 = mock(Value.class);
when(defaultValue2.getType()).thenReturn(PropertyType.BINARY);
when(defaultValue2.getStream()).thenReturn(new ByteArrayInputStream(GenerationConstants.DEFAULT_VALUE_BINARY_1.getBytes()));
PropertyDefinition binPropDef1 = this.getPropertyDef("binPropDef", PropertyType.BINARY, true, true, true, true, OnParentVersionAction.VERSION, new String[]{"[,1024]", "[,2048]"}, new Value[] {defaultValue1, defaultValue2});
PropertyDefinition binPropDef2 = this.getPropertyDef("binPropDef", PropertyType.BINARY, true, true, true, true, OnParentVersionAction.COPY, new String[]{"[,1024]", "[,512]"}, new Value[] {defaultValue1, defaultValue2});
PropertyDefinition binPropDef3 = this.getPropertyDef("binPropDef", PropertyType.BINARY, true, true, true, false, OnParentVersionAction.COPY, new String[]{"[,1024]", "[,512]"}, new Value[] {defaultValue1, defaultValue2});
PropertyDefinition binPropDef4 = this.getPropertyDef("binPropDef", PropertyType.BINARY, true, true, false, false, OnParentVersionAction.COPY, new String[]{"[,1024]", "[,512]"}, new Value[] {defaultValue1, defaultValue2});
PropertyDefinition binPropDef5 = this.getPropertyDef("binPropDef", PropertyType.BINARY, true, false, false, false, OnParentVersionAction.COPY, new String[]{"[,1024]", "[,512]"}, new Value[] {defaultValue1, defaultValue2});
PropertyDefinition binPropDef6 = this.getPropertyDef("binPropDef", PropertyType.BINARY, false, false, false, false, OnParentVersionAction.COPY, new String[]{"[,1024]", "[,512]"}, new Value[] {defaultValue1, defaultValue2});
PropertyDefinition binPropDef7 = this.getPropertyDef("binPropDef", PropertyType.BOOLEAN, false, false, false, false, OnParentVersionAction.COPY, new String[]{"[,1024]", "[,512]"}, new Value[] {defaultValue1, defaultValue2});
PropertyDefinition binPropDef8 = this.getPropertyDef("binPropDef2", PropertyType.BOOLEAN, false, false, false, false, OnParentVersionAction.COPY, new String[]{"[,1024]", "[,512]"}, new Value[] {defaultValue1, defaultValue2});
return new PropertyDefinition[]{binPropDef8, binPropDef7, binPropDef6, binPropDef5, binPropDef4, binPropDef3, binPropDef2, binPropDef1};
}
@SuppressWarnings("deprecation")
public PropertyDefinition[] getEqualPropertyDefinitions() throws ValueFormatException, RepositoryException{
Value defaultValue1 = mock(Value.class);
when(defaultValue1.getType()).thenReturn(PropertyType.BINARY);
when(defaultValue1.getStream()).thenReturn(new ByteArrayInputStream("A content".getBytes()));
Value defaultValue2 = mock(Value.class);
when(defaultValue2.getType()).thenReturn(PropertyType.BINARY);
when(defaultValue2.getStream()).thenReturn(new ByteArrayInputStream("An other content".getBytes()));
PropertyDefinition binPropDef1 = this.getPropertyDef("binPropDef", PropertyType.BINARY, true, true, true, true, OnParentVersionAction.VERSION, new String[]{"[,1024]", "[,2048]"}, new Value[] {defaultValue1, defaultValue2});
PropertyDefinition binPropDef2 = this.getPropertyDef("binPropDef", PropertyType.BINARY, true, true, true, true, OnParentVersionAction.VERSION, new String[]{"[,1024]", "[,512]"}, new Value[] {defaultValue1, defaultValue2});
return new PropertyDefinition[]{binPropDef2, binPropDef1};
}
public PropertyDefinition getCompleteStringPropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException {
return getCompletePropertyDev(name, PropertyType.STRING, new String[]{CONSTRAINT_STRING}, DEFAULT_VALUE_STRING);
}
@SuppressWarnings("deprecation")
public PropertyDefinition getCompleteBinaryPropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException {
Value defaultValue = mock(Value.class);
when(defaultValue.getType()).thenReturn(PropertyType.BINARY);
when(defaultValue.getStream()).thenReturn(new ByteArrayInputStream("A content".getBytes()));
return getPropertyDef(name, PropertyType.BINARY, new String[]{CONSTRAINT_BINARY}, new Value[] {defaultValue});
}
public PropertyDefinition getCompleteDatePropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException {
Value defaultValue = mock(Value.class);
when(defaultValue.getDate()).thenReturn(DEFAULT_VALUE_CALENDAR);
return getPropertyDef(name, PropertyType.DATE, new String[]{CONSTRAINT_DATE}, new Value[] {defaultValue});
}
public PropertyDefinition getCompleteDoublePropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException {
Value defaultValue = mock(Value.class);
when(defaultValue.getDouble()).thenReturn(DEFAULT_VALUE_DOUBLE);
return getPropertyDef(name, PropertyType.DOUBLE, new String[]{CONSTRAINT_DOUBLE}, new Value[] {defaultValue});
}
public PropertyDefinition getCompleteLongPropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException {
Value defaultValue = mock(Value.class);
when(defaultValue.getLong()).thenReturn(DEFAULT_VALUE_LONG);
return getPropertyDef(name, PropertyType.LONG, new String[]{CONSTRAINT_LONG}, new Value[] {defaultValue});
}
public PropertyDefinition getCompleteBooleanPropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException {
Value defaultValue = mock(Value.class);
when(defaultValue.getBoolean()).thenReturn(DEFAULT_VALUE_BOOLEAN);
return getPropertyDef(name, PropertyType.BOOLEAN, new String[]{CONSTRAINT_BOOLEAN}, new Value[] {defaultValue});
}
public PropertyDefinition getCompleteNamePropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException {
Value defaultValue = mock(Value.class);
when(defaultValue.getString()).thenReturn(DEFAULT_VALUE_NAME);
return getPropertyDef(name, PropertyType.NAME, new String[]{CONSTRAINT_NAME}, new Value[] {defaultValue});
}
public PropertyDefinition getCompletePathPropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException {
Value defaultValue = mock(Value.class);
when(defaultValue.getString()).thenReturn(DEFAULT_VALUE_PATH);
return getPropertyDef(name, PropertyType.PATH, new String[]{CONSTRAINT_PATH}, new Value[] {defaultValue});
}
public PropertyDefinition getCompleteReferencePropertyDef(String name) throws ValueFormatException, IllegalStateException, RepositoryException {
Value defaultValue = mock(Value.class);
when(defaultValue.getString()).thenReturn(DEFAULT_VALUE_REFERENCE);
return getPropertyDef(name, PropertyType.REFERENCE, new String[]{CONSTRAINT_REFERENCE}, new Value[] {defaultValue});
}
}