blob: c4f926069124e756798ebba93cb249154d5ad496 [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.odata2.client.core.uri;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.net.URI;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.olingo.odata2.api.edm.Edm;
import org.apache.olingo.odata2.api.edm.EdmComplexType;
import org.apache.olingo.odata2.api.edm.EdmEntitySet;
import org.apache.olingo.odata2.api.edm.EdmException;
import org.apache.olingo.odata2.api.edm.EdmFunctionImport;
import org.apache.olingo.odata2.api.edm.EdmNavigationProperty;
import org.apache.olingo.odata2.api.edm.EdmParameter;
import org.apache.olingo.odata2.api.edm.EdmProperty;
import org.apache.olingo.odata2.api.exception.ODataException;
import org.apache.olingo.odata2.client.api.uri.QueryOption;
import org.apache.olingo.odata2.testutil.mock.MockFacade;
import org.junit.Before;
import org.junit.Test;
public class EdmUriBuilderTest {
protected static final String SERVICE_ROOT_URI = "http://host:80/service/";
protected static final String SERVICE_ROOT_URI_1 = "http://host:80/service";
private Edm edm;
@Before
public void getEdm() throws ODataException {
edm = MockFacade.getMockEdm();
}
@Test
public void testUriSimpleES() throws EdmException {
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(edm.getDefaultEntityContainer().getEntitySet("Employees")).
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Employees", uri.toASCIIString());
}
@Test
public void testSimpleESWithCountUri1() throws EdmException {
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(edm.getDefaultEntityContainer().getEntitySet("Employees")).
appendCountSegment().
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Employees/$count", uri.toASCIIString());
}
@Test(expected=RuntimeException.class)
public void negTestWithCountAndFormat() throws EdmException {
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(edm.getDefaultEntityContainer().getEntitySet("Employees")).
appendCountSegment().
format("application/json").
build();
}
@Test
public void testSimpleESWithCountUri2() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
appendCountSegment().
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers('1')/nm_Employees/$count", uri.toASCIIString());
}
@Test
public void testSimpleESWithCountAndFilter() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
appendCountSegment().
addQueryOption(QueryOption.FILTER, "TeamId eq '1'").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers('1')/nm_Employees/"
+ "$count?$filter=TeamId%20eq%20'1'", uri.toASCIIString());
}
@Test(expected=RuntimeException.class)
public void negTestUriWithCountSegment1() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
EdmEntitySet employeeEntitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
appendKeySegment((EdmProperty)employeeEntitySet.getEntityType().getProperty("EmployeeId"), "1").
appendCountSegment().
build();
}
@Test(expected=RuntimeException.class)
public void negTestUriWithCountSegment2() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
EdmEntitySet employeeEntitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
appendKeySegment((EdmProperty)employeeEntitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)employeeEntitySet.getEntityType().getProperty("ne_Team")).
appendCountSegment().
build();
}
@Test
public void testMetadataUri() throws EdmException {
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendMetadataSegment().
build();
assertNotNull(uri);
assertEquals("http://host:80/service/$metadata", uri.toASCIIString());
}
@Test
public void testSimpleESWithKeyUri() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty) entitySet.getEntityType().getProperty("EmployeeId"), "1").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Employees('1')", uri.toASCIIString());
}
@Test
public void testCompositeKeysUri() throws EdmException {
EdmEntitySet entitySet = edm.getEntityContainer("Container2").getEntitySet("Photos");
Map<EdmProperty, Object> keyMap = new LinkedHashMap<EdmProperty,Object>();
keyMap.put((EdmProperty) entitySet.getEntityType().getProperty("Id"), 4);
keyMap.put((EdmProperty) entitySet.getEntityType().getProperty("Type"), "foo");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment(keyMap).
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Photos(Id=4,Type='foo')", uri.toASCIIString());
}
@Test
public void testFilterUri() throws EdmException {
EdmEntitySet entitySet = edm.getEntityContainer("Container2").getEntitySet("Photos");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
filter("Name eq 'Photo 1'").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Photos?$filter=Name%20eq%20'Photo%201'", uri.toASCIIString());
}
@Test
public void testTopUri1() throws EdmException {
EdmEntitySet entitySet = edm.getEntityContainer("Container2").getEntitySet("Photos");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
top(2).
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Photos?$top=2", uri.toASCIIString());
}
@Test
public void testTopUri2() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
addQueryOption(QueryOption.FILTER, "TeamId eq '1'").
top(2).
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers('1')/nm_Employees"
+ "?$filter=TeamId%20eq%20'1'&$top=2", uri.toASCIIString());
}
@Test(expected=RuntimeException.class)
public void negTestQueryOption() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
EdmEntitySet employeeEntitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
appendKeySegment((EdmProperty)employeeEntitySet.getEntityType().getProperty("EmployeeId"), "1").
addQueryOption(QueryOption.FILTER, "TeamId eq '1'").
top(2).
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers('1')/nm_Employees"
+ "?$filter=TeamId%20eq%20'1'&$top=2", uri.toASCIIString());
}
@Test
public void testSkipUri() throws EdmException {
EdmEntitySet entitySet = edm.getEntityContainer("Container2").getEntitySet("Photos");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
skip(2).
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Photos?$skip=2", uri.toASCIIString());
}
@Test
public void testUriWithQueryOptions() throws EdmException {
EdmEntitySet entitySet = edm.getEntityContainer("Container2").getEntitySet("Photos");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
filter("Name eq 'Photo 1'").
top(2).
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Photos?$filter=Name%20eq%20'Photo%201'&$top=2", uri.toASCIIString());
}
@Test
public void testUriWithNavigationSegment1() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("ne_Team")).
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Employees('1')/ne_Team", uri.toASCIIString());
}
@Test
public void testUriWithNavigationSegment2() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
EdmEntitySet employeeEntitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
appendKeySegment((EdmProperty)employeeEntitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)employeeEntitySet.getEntityType().getProperty("ne_Team")).
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers('1')/nm_Employees('1')/ne_Team", uri.toASCIIString());
}
@Test
public void testUriWithNavigationSegment3() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
EdmEntitySet teamEntitySet = edm.getDefaultEntityContainer().getEntitySet("Teams");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("ne_Team")).
appendNavigationSegment((EdmNavigationProperty)teamEntitySet.getEntityType().getProperty("nt_Employees")).
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Employees('1')/ne_Team/nt_Employees", uri.toASCIIString());
}
@Test(expected=RuntimeException.class)
public void negTest1UriWithNavigationSegment() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
EdmEntitySet employeeEntitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
appendNavigationSegment((EdmNavigationProperty)employeeEntitySet.getEntityType().getProperty("ne_Team")).
build();
}
@Test(expected=RuntimeException.class)
public void negTest2UriWithNavigationSegment() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("ne_Team")).
build();
}
@Test
public void testUriWithSimplePropertySegment() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendPropertySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeName"), "EmployeeName").
appendValueSegment().
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Employees('1')/EmployeeName/$value", uri.toASCIIString());
}
@Test
public void testUriWithComplexPropertySegment() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendPropertySegment((EdmProperty)entitySet.getEntityType().getProperty("Location"), "Location").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Employees('1')/Location", uri.toASCIIString());
}
@Test
public void testUriWithComplexPropertySegment1() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
EdmComplexType complexType = edm.getComplexType("RefScenario", "c_Location");
EdmProperty property = (EdmProperty) complexType.getProperty("City");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendPropertySegment((EdmProperty)entitySet.getEntityType().getProperty("Location"), "Location").
appendPropertySegment(property, "City").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Employees('1')/Location/City", uri.toASCIIString());
}
@Test(expected = RuntimeException.class)
public void testUriWithComplexPropertySegmentWithValueSegment() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
EdmComplexType complexType = edm.getComplexType("RefScenario", "c_Location");
EdmProperty property = (EdmProperty) complexType.getProperty("City");
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendPropertySegment((EdmProperty)entitySet.getEntityType().getProperty("Location"), "Location").
appendPropertySegment(property, "City").
appendValueSegment().
build();
}
@Test(expected = RuntimeException.class)
public void negTestUriWithFormat() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
EdmComplexType complexType = edm.getComplexType("RefScenario", "c_Location");
EdmProperty property = (EdmProperty) complexType.getProperty("City");
EdmComplexType complexType1 = (EdmComplexType) property.getType();
EdmProperty property1 = (EdmProperty) complexType1.getProperty("CityName");
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendPropertySegment((EdmProperty)entitySet.getEntityType().getProperty("Location"), "Location").
appendPropertySegment(property, "City").
appendPropertySegment(property1, "CityName").
appendValueSegment().
format("application/json").
build();
}
@Test(expected=RuntimeException.class)
public void wrongESInUri() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employee");
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
build();
}
@Test(expected = RuntimeException.class)
public void duplicateKeyPropertyInUri() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
build();
}
@Test(expected=RuntimeException.class)
public void duplicateKeyForNavPropertyInUri() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
EdmEntitySet empEntitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
appendKeySegment((EdmProperty)empEntitySet.getEntityType().getProperty("EmployeeId"), "1").
appendKeySegment((EdmProperty)empEntitySet.getEntityType().getProperty("EmployeeId"), "1").
build();
}
@Test
public void testNavigationToManyInUri() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
EdmEntitySet empEntitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
Map<EdmProperty, Object> keyMap = new HashMap<EdmProperty, Object>();
keyMap.put((EdmProperty)empEntitySet.getEntityType().getProperty("EmployeeId"), "1");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
appendKeySegment(keyMap).
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers('1')/nm_Employees(EmployeeId='1')", uri.toASCIIString());
}
@Test
public void testUriWithOrderby() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
orderBy("EmployeeId").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers('1')/nm_Employees?$orderby=EmployeeId", uri.toASCIIString());
}
@Test(expected=RuntimeException.class)
public void negTestUriWithOrderby() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
orderBy("EmployeeId").
build();
}
@Test
public void testUriWithOrderbyAndFormat() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
orderBy("EmployeeId").
format("application/json").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers('1')/nm_Employees"
+ "?$orderby=EmployeeId&$format=application%2Fjson", uri.toASCIIString());
}
@Test
public void testUriWithOrderbyWithNullValue() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
try {
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
orderBy("EmployeeName").
build();
} catch(EdmException e) {
assertEquals("Property not defined.", e.getMessage());
}
}
@Test
public void testUriWithSelect() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
select("EmployeeId", "EmployeeName", "RoomId", "TeamId").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers('1')/nm_Employees"
+ "?$select=EmployeeId%2CEmployeeName%2CRoomId%2CTeamId", uri.toASCIIString());
}
@Test
public void testUriWithSelectAndFilter() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
filter("EmployeeId eq 1").
select("EmployeeId", "EmployeeName", "RoomId", "TeamId").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers('1')/nm_Employees?$filter="
+ "EmployeeId%20eq%201&$select=EmployeeId%2CEmployeeName%2CRoomId%2CTeamId", uri.toASCIIString());
}
@Test(expected=RuntimeException.class)
public void testUriWithSelectAndCount() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
appendCountSegment().
select("EmployeeId", "EmployeeName", "RoomId", "TeamId").
build();
}
@Test
public void testUriWithSelectOnEntity() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
select("EmployeeId", "EmployeeName", "RoomId", "TeamId").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers('1')"
+ "?$select=EmployeeId%2CEmployeeName%2CRoomId%2CTeamId", uri.toASCIIString());
}
@Test(expected=RuntimeException.class)
public void testUriWithSelectOnEntityWithTop() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
select("EmployeeId", "EmployeeName", "RoomId", "TeamId").
top(2).
build();
}
@Test
public void testUriWithExpand() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
expand("nm_Employees").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers('1')?$expand=nm_Employees", uri.toASCIIString());
}
@Test
public void testUriWithExpandAndFilter() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
expand("nm_Employees").
filter("EmployeeName eq 'Walter Winter'").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers?$expand=nm_Employees&$filter="
+ "EmployeeName%20eq%20'Walter%20Winter'", uri.toASCIIString());
}
@Test(expected=RuntimeException.class)
public void testUriWithExpandAndCount() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendCountSegment().
expand("nm_Employees").
build();
}
@Test
public void testUriWithFilterAndExpand() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
filter("EmployeeName eq 'Walter Winter'").
expand("nm_Employees").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers?$filter=EmployeeName%20eq%20'Walter%20Winter'"
+ "&$expand=nm_Employees", uri.toASCIIString());
}
@Test
public void testUriWithCustomQueryOption() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
top(2).
addCustomQueryOption("x", "y").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Employees?$top=2&x=y", uri.toASCIIString());
}
@Test
public void testUriWithCustomQueryOptionWithFormat() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
top(2).
addCustomQueryOption("x", "y").
format("application/json").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Employees?$top=2&$format=application%2Fjson&x=y", uri.toASCIIString());
}
@Test
public void testUriWithFilters() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
filter("EmployeeId ge '1' and EmployeeId le '10'").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers?$filter=EmployeeId%20ge%20'1'%20"
+ "and%20EmployeeId%20le%20'10'", uri.toASCIIString());
}
@Test
public void testUriWithDuplicateExpands() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
expand("nm_Employees").
expand("nm_Employees").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers?$expand=nm_Employees%2Cnm_Employees", uri.toASCIIString());
}
@Test
public void testUriWithTwoCustomQueryOptions() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
top(2).
addCustomQueryOption("x", "y").
addCustomQueryOption("z", "y").
format("application/json").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Employees?$top=2&$"
+ "format=application%2Fjson&x=y&z=y", uri.toASCIIString());
}
@Test
public void testUriWithOnlyCustomQueryOption() throws EdmException {
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI_1).
addCustomQueryOption("x", "y").
build();
assertNotNull(uri);
assertEquals("http://host:80/service?x=y", uri.toASCIIString());
}
@Test
public void testUriWithDuplicateOrderby() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
orderBy("EmployeeId").
orderBy("EmployeeId").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers?$orderby=EmployeeId%2CEmployeeId", uri.toASCIIString());
}
@Test
public void testUriWithTwoOrderby() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
orderBy("EmployeeId").
orderBy("EmployeeName desc").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Employees?$orderby=EmployeeId%2CEmployeeName%20desc", uri.toASCIIString());
}
@Test
public void testUriWithNavigationToManyWithKeyWithSimpleProperty() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
EdmEntitySet empEntitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
appendKeySegment((EdmProperty)empEntitySet.getEntityType().getProperty("EmployeeId"), "1").
appendPropertySegment((EdmProperty)empEntitySet.getEntityType().getProperty("EmployeeName"), "EmployeeName").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers('1')/nm_Employees('1')/EmployeeName", uri.toASCIIString());
}
@Test
public void negTestUriWithNavigationToManyWithSimpleProperty() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
EdmEntitySet empEntitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
try {
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
appendPropertySegment((EdmProperty)empEntitySet.getEntityType().getProperty("EmployeeName"), "EmployeeName").
build();
} catch (Exception e) {
assertEquals("Can't specify a property at this position", e.getMessage());
}
}
@Test
public void testSimpleESWithEncodedKeyUri() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty) entitySet.getEntityType().getProperty("EmployeeId"), "abc/def").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Employees('abc%2Fdef')", uri.toASCIIString());
}
@Test
public void testCompositeKeysEncodedUri() throws EdmException {
EdmEntitySet entitySet = edm.getEntityContainer("Container2").getEntitySet("Photos");
Map<EdmProperty, Object> keyMap = new LinkedHashMap<EdmProperty,Object>();
keyMap.put((EdmProperty) entitySet.getEntityType().getProperty("Id"), 4);
keyMap.put((EdmProperty) entitySet.getEntityType().getProperty("Type"), "foo,foo;");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment(keyMap).
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Photos(Id=4,Type='foo%2Cfoo%3B')", uri.toASCIIString());
}
@Test
public void testUriWithNavigationToManyWithKeyEncoded() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
EdmEntitySet empEntitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1()*;").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
appendKeySegment((EdmProperty)empEntitySet.getEntityType().getProperty("EmployeeId"), "@#$%").
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers('1%28%29%2A%3B')/nm_Employees('%40%23%24%25')", uri.toASCIIString());
}
@Test
public void testFunctionImportWithEmptyParams() throws EdmException {
EdmFunctionImport functionImport = edm.getDefaultEntityContainer().getFunctionImport("AllLocations");
Map<EdmParameter, Object> functionImportParams = new HashMap<EdmParameter, Object>();
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendFunctionImportSegment(functionImport).appendFunctionImportParameters(functionImportParams).build();
assertNotNull(uri);
assertEquals("http://host:80/service/AllLocations", uri.toASCIIString());
}
@Test
public void testFunctionImportWithNullParams() throws EdmException {
EdmFunctionImport functionImport = edm.getDefaultEntityContainer().getFunctionImport("AllLocations");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendFunctionImportSegment(functionImport).appendFunctionImportParameters(null).build();
assertNotNull(uri);
assertEquals("http://host:80/service/AllLocations", uri.toASCIIString());
}
@Test
public void testFunctionImportWithParams() throws Exception {
EdmFunctionImport functionImport = edm.getDefaultEntityContainer().getFunctionImport("EmployeeSearch");
Map<EdmParameter, Object> functionImportParams = new HashMap<EdmParameter, Object>();
EdmParameter param = edm.getDefaultEntityContainer().getFunctionImport("EmployeeSearch").getParameter("q");
functionImportParams.put(param, "Emp1");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendFunctionImportSegment(functionImport).appendFunctionImportParameters(functionImportParams).build();
assertNotNull(uri);
assertEquals("http://host:80/service/EmployeeSearch?q='Emp1'", uri.toASCIIString());
}
@Test
public void testFunctionImportWithPathSegmentsAndParams() throws Exception {
EdmFunctionImport functionImport = edm.getDefaultEntityContainer().getFunctionImport("EmployeeSearch");
Map<EdmParameter, Object> functionImportParams = new HashMap<EdmParameter, Object>();
EdmParameter param = edm.getDefaultEntityContainer().getFunctionImport("EmployeeSearch").getParameter("q");
functionImportParams.put(param, "Emp1");
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
EdmProperty property = (EdmProperty) entitySet.getEntityType().getProperty("Location");
try {
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendFunctionImportSegment(functionImport).appendPropertySegment(property, "Location").
appendFunctionImportParameters(functionImportParams).build();
} catch (RuntimeException e) {
assertEquals("Can't specify a property at this position", e.getMessage());
}
}
@Test
public void testUriWithFunctionImportWithKeyEncodedSegment() throws EdmException {
EdmFunctionImport functionImport = edm.getDefaultEntityContainer().getFunctionImport("EmployeeSearch");
Map<EdmParameter, Object> functionImportParams = new HashMap<EdmParameter, Object>();
EdmParameter param = edm.getDefaultEntityContainer().getFunctionImport("EmployeeSearch").getParameter("q");
functionImportParams.put(param, "Emp1");
Map<EdmProperty, Object> keySegParams = new HashMap<EdmProperty, Object>();
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
keySegParams.put((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1()*;");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendFunctionImportSegment(functionImport).
appendKeySegment(keySegParams).
appendFunctionImportParameters(functionImportParams).
build();
assertNotNull(uri);
assertEquals("http://host:80/service/EmployeeSearch(EmployeeId='1%28%29%2A%3B')?q='Emp1'", uri.toASCIIString());
}
@Test
public void testFunctionImportWithParamsWithNullFacets() throws Exception {
EdmFunctionImport functionImport = edm.getDefaultEntityContainer().getFunctionImport("FINullableParameter");
Map<EdmParameter, Object> functionImportParams = new HashMap<EdmParameter, Object>();
EdmParameter param = edm.getDefaultEntityContainer().getFunctionImport("FINullableParameter").getParameter("Id");
functionImportParams.put(param, "1");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendFunctionImportSegment(functionImport).appendFunctionImportParameters(functionImportParams).build();
assertNotNull(uri);
assertEquals("http://host:80/service/FINullableParameter?Id='1'", uri.toASCIIString());
}
@Test
public void testFunctionImportWithParamsWithFalseNullFacets() throws Exception {
EdmFunctionImport functionImport = edm.getDefaultEntityContainer().getFunctionImport("ManagerPhoto");
Map<EdmParameter, Object> functionImportParams = new HashMap<EdmParameter, Object>();
EdmParameter param = edm.getDefaultEntityContainer().getFunctionImport("FINullableParameter").getParameter("Id");
functionImportParams.put(param, "1");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendFunctionImportSegment(functionImport).appendFunctionImportParameters(functionImportParams).build();
assertNotNull(uri);
assertEquals("http://host:80/service/ManagerPhoto?Id='1'", uri.toASCIIString());
}
@Test
public void testFunctionImportWithMultipleParams() throws Exception {
EdmFunctionImport functionImport = edm.getDefaultEntityContainer().getFunctionImport("BuildingSearch");
Map<EdmParameter, Object> functionImportParams = new LinkedHashMap<EdmParameter, Object>();
EdmParameter param1 = edm.getDefaultEntityContainer().getFunctionImport("BuildingSearch").getParameter("q");
functionImportParams.put(param1, "1");
EdmParameter param2 = edm.getDefaultEntityContainer().getFunctionImport("BuildingSearch").getParameter("r");
functionImportParams.put(param2, 1);
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendFunctionImportSegment(functionImport).appendFunctionImportParameters(functionImportParams).build();
assertNotNull(uri);
assertEquals("http://host:80/service/BuildingSearch?q='1'&r=1", uri.toASCIIString());
}
@Test
public void testFunctionImportWithMultipleParamsWithMoreSegments() throws Exception {
EdmFunctionImport functionImport = edm.getDefaultEntityContainer().getFunctionImport("BuildingSearch");
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Buildings");
EdmProperty property = (EdmProperty) entitySet.getEntityType().getProperty("Id");
EdmNavigationProperty navProperty = (EdmNavigationProperty) entitySet.getEntityType().getProperty("nb_Rooms");
Map<EdmParameter, Object> functionImportParams = new LinkedHashMap<EdmParameter, Object>();
EdmParameter param1 = edm.getDefaultEntityContainer().getFunctionImport("BuildingSearch").getParameter("q");
functionImportParams.put(param1, "1");
EdmParameter param2 = edm.getDefaultEntityContainer().getFunctionImport("BuildingSearch").getParameter("r");
functionImportParams.put(param2, 1);
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendFunctionImportSegment(functionImport).appendKeySegment(property, "1").
appendNavigationSegment(navProperty).
appendFunctionImportParameters(functionImportParams).build();
assertNotNull(uri);
assertEquals("http://host:80/service/BuildingSearch('1')/nb_Rooms?q='1'&r=1", uri.toASCIIString());
}
@Test
public void testFunctionImportWithMultipleParamsWithCount() throws Exception {
EdmFunctionImport functionImport = edm.getDefaultEntityContainer().getFunctionImport("BuildingSearch");
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Buildings");
EdmProperty property = (EdmProperty) entitySet.getEntityType().getProperty("Id");
EdmNavigationProperty navProperty = (EdmNavigationProperty) entitySet.getEntityType().getProperty("nb_Rooms");
Map<EdmParameter, Object> functionImportParams = new LinkedHashMap<EdmParameter, Object>();
EdmParameter param1 = edm.getDefaultEntityContainer().getFunctionImport("BuildingSearch").getParameter("q");
functionImportParams.put(param1, "1");
EdmParameter param2 = edm.getDefaultEntityContainer().getFunctionImport("BuildingSearch").getParameter("r");
functionImportParams.put(param2, 1);
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendFunctionImportSegment(functionImport).appendKeySegment(property, "1").
appendNavigationSegment(navProperty).
appendCountSegment().
appendFunctionImportParameters(functionImportParams).build();
assertNotNull(uri);
assertEquals("http://host:80/service/BuildingSearch('1')/nb_Rooms/$count?q='1'&r=1", uri.toASCIIString());
}
@Test
public void testFunctionImportWithCount() throws Exception {
EdmFunctionImport functionImport = edm.getDefaultEntityContainer().getFunctionImport("BuildingSearch");
Map<EdmParameter, Object> functionImportParams = new LinkedHashMap<EdmParameter, Object>();
EdmParameter param1 = edm.getDefaultEntityContainer().getFunctionImport("BuildingSearch").getParameter("q");
functionImportParams.put(param1, "1");
EdmParameter param2 = edm.getDefaultEntityContainer().getFunctionImport("BuildingSearch").getParameter("r");
functionImportParams.put(param2, 1);
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendFunctionImportSegment(functionImport).
appendCountSegment().
appendFunctionImportParameters(functionImportParams).build();
assertNotNull(uri);
assertEquals("http://host:80/service/BuildingSearch/$count?q='1'&r=1", uri.toASCIIString());
}
@Test
public void testFunctionImportWithMultipleParamsWithPropertySegment() throws Exception {
EdmFunctionImport functionImport = edm.getDefaultEntityContainer().getFunctionImport("BuildingSearch");
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Buildings");
EdmProperty property = (EdmProperty) entitySet.getEntityType().getProperty("Id");
EdmNavigationProperty navProperty = (EdmNavigationProperty) entitySet.getEntityType().getProperty("nb_Rooms");
EdmEntitySet entitySet1 = edm.getDefaultEntityContainer().getEntitySet("Rooms");
EdmProperty property1 = (EdmProperty) entitySet1.getEntityType().getProperty("Id");
EdmProperty property2 = (EdmProperty) entitySet1.getEntityType().getProperty("Name");
Map<EdmParameter, Object> functionImportParams = new LinkedHashMap<EdmParameter, Object>();
EdmParameter param1 = edm.getDefaultEntityContainer().getFunctionImport("BuildingSearch").getParameter("q");
functionImportParams.put(param1, "1");
EdmParameter param2 = edm.getDefaultEntityContainer().getFunctionImport("BuildingSearch").getParameter("r");
functionImportParams.put(param2, 1);
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendFunctionImportSegment(functionImport).appendKeySegment(property, "1").
appendNavigationSegment(navProperty).appendKeySegment(property1, "1").
appendPropertySegment(property2, "Name").
appendFunctionImportParameters(functionImportParams).build();
assertNotNull(uri);
assertEquals("http://host:80/service/BuildingSearch('1')/nb_Rooms('1')/Name?q='1'&r=1", uri.toASCIIString());
}
@Test
public void testFunctionImportWithKeySegment() throws Exception {
EdmFunctionImport functionImport = edm.getEntityContainer("Container2").getFunctionImport("PhotoSearch");
EdmEntitySet entitySet = edm.getEntityContainer("Container2").getEntitySet("Photos");
EdmProperty property = (EdmProperty) entitySet.getEntityType().getProperty("Id");
EdmProperty property1 = (EdmProperty) entitySet.getEntityType().getProperty("Type");
Map<EdmProperty, Object> keySegments = new LinkedHashMap<EdmProperty, Object>();
keySegments.put(property, "1");
keySegments.put(property1, "Internal");
Map<EdmParameter, Object> functionImportParams = new LinkedHashMap<EdmParameter, Object>();
EdmParameter param1 = edm.getEntityContainer("Container2").getFunctionImport("PhotoSearch").getParameter("Id");
functionImportParams.put(param1, 1);
EdmParameter param2 = edm.getEntityContainer("Container2").getFunctionImport("PhotoSearch").getParameter("Type");
functionImportParams.put(param2, "Internal");
try {
new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendFunctionImportSegment(functionImport).
appendKeySegment(keySegments).
appendFunctionImportParameters(functionImportParams).build();
} catch (RuntimeException e) {
assertEquals(e.getMessage(), "Can't specify a key at this position");
}
}
@Test
public void testCustomQueryWithSystemQuery() throws Exception {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).appendEntitySetSegment(entitySet).
addCustomQueryOption("x", "y").filter("EmployeeName eq 'Walter Winter'").build();
assertEquals("http://host:80/service/Managers?$filter="
+ "EmployeeName%20eq%20'Walter%20Winter'&x=y", uri.toASCIIString());
}
@Test
public void testServiceDocument() throws Exception {
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).build();
assertEquals("http://host:80/service/", uri.toASCIIString());
}
@Test
public void testServiceDocument1() throws Exception {
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI_1).build();
assertEquals("http://host:80/service/", uri.toASCIIString());
}
@Test
public void addSameFilterOptionTwice() throws EdmException {
EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Managers");
URI uri = new EdmURIBuilderImpl(SERVICE_ROOT_URI).
appendEntitySetSegment(entitySet).
appendKeySegment((EdmProperty)entitySet.getEntityType().getProperty("EmployeeId"), "1").
appendNavigationSegment((EdmNavigationProperty)entitySet.getEntityType().getProperty("nm_Employees")).
addQueryOption(QueryOption.FILTER, "TeamId eq '1'").
addQueryOption(QueryOption.FILTER, "TeamId eq '1'").
top(2).
build();
assertNotNull(uri);
assertEquals("http://host:80/service/Managers('1')/nm_Employees"
+ "?$filter=TeamId%20eq%20'1'%2CTeamId%20eq%20'1'&$top=2", uri.toASCIIString());
}
}