blob: 0e8e8bde266ead134346d1c8a427ce35d193f881 [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.olingo.server.core.serializer.utils;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import org.apache.olingo.commons.api.data.ContextURL;
import org.apache.olingo.commons.api.data.ContextURL.Suffix;
import org.apache.olingo.commons.api.edm.EdmComplexType;
import org.apache.olingo.commons.api.edm.EdmEntitySet;
import org.apache.olingo.commons.api.edm.EdmEntityType;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.core.edm.primitivetype.EdmString;
import org.apache.olingo.server.api.edm.provider.ComplexType;
import org.apache.olingo.server.api.edm.provider.EdmProvider;
import org.apache.olingo.server.api.edm.provider.NavigationProperty;
import org.apache.olingo.server.api.edm.provider.Property;
import org.apache.olingo.server.core.edm.provider.EdmComplexTypeImpl;
import org.apache.olingo.server.core.edm.provider.EdmProviderImpl;
import org.junit.Test;
import org.mockito.Mockito;
public class ContextURLBuilderTest {
@Test
public void buildServiceDocument() {
final ContextURL contextURL = ContextURL.with()
.serviceRoot(URI.create("http://host/service/")).build();
assertEquals("http://host/service/$metadata", ContextURLBuilder.create(contextURL).toASCIIString());
}
@Test
public void buildRelative() {
final ContextURL contextURL = ContextURL.with().build();
assertEquals("$metadata", ContextURLBuilder.create(contextURL).toASCIIString());
}
@Test
public void buildEntitySet() {
EdmEntitySet entitySet = Mockito.mock(EdmEntitySet.class);
Mockito.when(entitySet.getName()).thenReturn("Customers");
final ContextURL contextURL = ContextURL.with().serviceRoot(URI.create("http://host/service/"))
.entitySet(entitySet)
.build();
assertEquals("http://host/service/$metadata#Customers", ContextURLBuilder.create(contextURL).toASCIIString());
}
@Test
public void buildDerivedEntitySet() {
EdmEntitySet entitySet = Mockito.mock(EdmEntitySet.class);
Mockito.when(entitySet.getName()).thenReturn("Customers");
EdmEntityType derivedType = Mockito.mock(EdmEntityType.class);
Mockito.when(derivedType.getFullQualifiedName()).thenReturn(new FullQualifiedName("Model", "VipCustomer"));
final ContextURL contextURL = ContextURL.with().serviceRoot(URI.create("http://host/service/"))
.entitySet(entitySet)
.derived(derivedType)
.build();
assertEquals("http://host/service/$metadata#Customers/Model.VipCustomer",
ContextURLBuilder.create(contextURL).toASCIIString());
}
@Test(expected = IllegalArgumentException.class)
public void buildDerivedEntitySetWithoutEntitySet() {
EdmEntityType derivedType = Mockito.mock(EdmEntityType.class);
Mockito.when(derivedType.getFullQualifiedName()).thenReturn(new FullQualifiedName("Model", "VipCustomer"));
ContextURLBuilder.create(ContextURL.with().derived(derivedType).build());
}
@Test
public void buildDerivedEntity() {
EdmEntitySet entitySet = Mockito.mock(EdmEntitySet.class);
Mockito.when(entitySet.getName()).thenReturn("Customers");
EdmEntityType derivedType = Mockito.mock(EdmEntityType.class);
Mockito.when(derivedType.getFullQualifiedName()).thenReturn(new FullQualifiedName("Model", "VipCustomer"));
final ContextURL contextURL = ContextURL.with().serviceRoot(URI.create("http://host/service/"))
.entitySet(entitySet)
.derived(derivedType)
.suffix(Suffix.ENTITY)
.build();
assertEquals("http://host/service/$metadata#Customers/Model.VipCustomer/$entity",
ContextURLBuilder.create(contextURL).toASCIIString());
}
@Test
public void buildProperty() {
EdmEntitySet entitySet = Mockito.mock(EdmEntitySet.class);
Mockito.when(entitySet.getName()).thenReturn("Customers");
ContextURL contextURL = ContextURL.with().serviceRoot(URI.create("http://host/service/"))
.entitySet(entitySet)
.keyPath("1")
.navOrPropertyPath("Name")
.build();
assertEquals("http://host/service/$metadata#Customers(1)/Name",
ContextURLBuilder.create(contextURL).toASCIIString());
contextURL = ContextURL.with().serviceRoot(URI.create("http://host/service/"))
.entitySet(entitySet)
.keyPath("one=1,two='two'")
.navOrPropertyPath("ComplexName")
.selectList("Part1")
.build();
assertEquals("http://host/service/$metadata#Customers(one=1,two='two')/ComplexName(Part1)",
ContextURLBuilder.create(contextURL).toASCIIString());
}
@Test
public void buildPrimitiveType() {
EdmEntitySet entitySet = Mockito.mock(EdmEntitySet.class);
Mockito.when(entitySet.getName()).thenReturn("Customers");
ContextURL contextURL = ContextURL.with().serviceRoot(URI.create("http://host/service/"))
.type(EdmString.getInstance())
.build();
assertEquals("http://host/service/$metadata#Edm.String",
ContextURLBuilder.create(contextURL).toASCIIString());
contextURL = ContextURL.with().serviceRoot(URI.create("http://host/service/"))
.type(EdmString.getInstance()).asCollection()
.build();
assertEquals("http://host/service/$metadata#Collection(Edm.String)",
ContextURLBuilder.create(contextURL).toString());
}
@Test
public void buildComplexType() throws Exception {
EdmProvider provider = mock(EdmProvider.class);
EdmProviderImpl edm = new EdmProviderImpl(provider);
FullQualifiedName baseName = new FullQualifiedName("namespace", "BaseTypeName");
ComplexType baseComplexType = new ComplexType();
List<Property> baseProperties = new ArrayList<Property>();
baseProperties.add(new Property().setName("prop1").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName()));
List<NavigationProperty> baseNavigationProperties = new ArrayList<NavigationProperty>();
baseNavigationProperties.add(new NavigationProperty().setName("nav1"));
baseComplexType.setName("BaseTypeName").setAbstract(false).setOpenType(false).setProperties(baseProperties)
.setNavigationProperties(baseNavigationProperties);
when(provider.getComplexType(baseName)).thenReturn(baseComplexType);
EdmComplexType baseType = EdmComplexTypeImpl.getInstance(edm, baseName, baseComplexType);
EdmEntitySet entitySet = Mockito.mock(EdmEntitySet.class);
Mockito.when(entitySet.getName()).thenReturn("Customers");
ContextURL contextURL = ContextURL.with().serviceRoot(URI.create("http://host/service/"))
.type(baseType)
.build();
assertEquals("http://host/service/$metadata#namespace.BaseTypeName",
ContextURLBuilder.create(contextURL).toASCIIString());
}
@Test(expected = IllegalArgumentException.class)
public void buildSuffixWithoutEntitySet() {
ContextURLBuilder.create(ContextURL.with().suffix(Suffix.ENTITY).build());
}
@Test
public void buildReference() {
final ContextURL contextURL = ContextURL.with().suffix(Suffix.REFERENCE).build();
assertEquals("$metadata#$ref", ContextURLBuilder.create(contextURL).toASCIIString());
}
@Test(expected = IllegalArgumentException.class)
public void buildReferenceWithEntitySet() {
EdmEntitySet entitySet = Mockito.mock(EdmEntitySet.class);
Mockito.when(entitySet.getName()).thenReturn("Customers");
ContextURLBuilder.create(ContextURL.with().entitySet(entitySet).suffix(Suffix.REFERENCE).build());
}
@Test
public void buildWithCharactersToBeEscaped() {
EdmEntitySet entitySet = Mockito.mock(EdmEntitySet.class);
Mockito.when(entitySet.getName()).thenReturn("Entitäten");
EdmEntityType derivedType = Mockito.mock(EdmEntityType.class);
Mockito.when(derivedType.getFullQualifiedName()).thenReturn(
new FullQualifiedName("Namensräumchen", "UnüblicherName"));
final ContextURL contextURL = ContextURL.with().entitySet(entitySet).derived(derivedType).build();
assertEquals("$metadata#Entit%C3%A4ten/Namensr%C3%A4umchen.Un%C3%BCblicherName",
ContextURLBuilder.create(contextURL).toString());
}
}