blob: 264febdbc777c52176626daca837a19b44cc3e8c [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.tecsvc.data;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.apache.olingo.commons.api.data.Entity;
import org.apache.olingo.commons.api.data.EntitySet;
import org.apache.olingo.commons.api.data.LinkedComplexValue;
import org.apache.olingo.commons.api.data.Property;
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.edm.EdmEntityContainer;
import org.apache.olingo.commons.api.edm.EdmEntitySet;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.server.api.OData;
import org.apache.olingo.server.api.edmx.EdmxReference;
import org.apache.olingo.server.api.uri.UriParameter;
import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
public class DataProviderTest {
private final Edm edm = OData.newInstance().createServiceMetadata(new EdmTechProvider(
Collections.<EdmxReference> emptyList()), Collections.<EdmxReference> emptyList())
.getEdm();
private final EdmEntityContainer entityContainer = edm.getEntityContainer(
new FullQualifiedName("olingo.odata.test1", "Container"));
private final EdmEntitySet esAllPrim = entityContainer.getEntitySet("ESAllPrim");
private final EdmEntitySet esAllKey = entityContainer.getEntitySet("ESAllKey");
private final EdmEntitySet esCompAllPrim = entityContainer.getEntitySet("ESCompAllPrim");
private final EdmEntitySet esCollAllPrim = entityContainer.getEntitySet("ESCollAllPrim");
private final EdmEntitySet esMixPrimCollComp = entityContainer.getEntitySet("ESMixPrimCollComp");
private final EdmEntitySet esMedia = entityContainer.getEntitySet("ESMedia");
@Test
public void esAllPrimEntity() throws Exception {
final DataProvider dataProvider = new DataProvider();
final Entity entity = dataProvider.readAll(esAllPrim).getEntities().get(2);
Assert.assertEquals(16, entity.getProperties().size());
Assert.assertEquals(entity,
dataProvider.read(esAllPrim, Arrays.asList(mockParameter("PropertyInt16", "-0"))));
}
@Test
public void esAllKeyEntity() throws Exception {
final DataProvider dataProvider = new DataProvider();
final Entity entity = dataProvider.readAll(esAllKey).getEntities().get(0);
Assert.assertEquals(13, entity.getProperties().size());
Assert.assertEquals(entity, dataProvider.read(esAllKey, Arrays.asList(
mockParameter("PropertyBoolean", "true"),
mockParameter("PropertyByte", "255"),
mockParameter("PropertyDate", "2012-12-03"),
mockParameter("PropertyDateTimeOffset", "2012-12-03T07:16:23Z"),
mockParameter("PropertyDecimal", "34"),
mockParameter("PropertyDuration", "duration'PT6S'"),
mockParameter("PropertyGuid", "01234567-89AB-CDEF-0123-456789ABCDEF"),
mockParameter("PropertyInt16", "32767"),
mockParameter("PropertyInt32", "2147483647"),
mockParameter("PropertyInt64", "9223372036854775807"),
mockParameter("PropertySByte", "127"),
mockParameter("PropertyString", "'First'"),
mockParameter("PropertyTimeOfDay", "02:48:21"))));
}
@Test
public void esAllPrim() throws Exception {
final DataProvider data = new DataProvider();
EntitySet outSet = data.readAll(esAllPrim);
Assert.assertEquals(3, outSet.getEntities().size());
Entity first = outSet.getEntities().get(0);
Assert.assertEquals(16, first.getProperties().size());
Assert.assertEquals(2, first.getNavigationLinks().size());
final EntitySet target = first.getNavigationLink("NavPropertyETTwoPrimMany").getInlineEntitySet();
Assert.assertNotNull(target);
Assert.assertEquals(1, target.getEntities().size());
Assert.assertEquals(data.readAll(entityContainer.getEntitySet("ESTwoPrim")).getEntities().get(1),
target.getEntities().get(0));
Assert.assertEquals(16, outSet.getEntities().get(1).getProperties().size());
Assert.assertEquals(16, outSet.getEntities().get(2).getProperties().size());
}
@Test
public void esCollAllPrim() throws Exception {
EntitySet outSet = new DataProvider().readAll(esCollAllPrim);
Assert.assertEquals(3, outSet.getEntities().size());
Assert.assertEquals(17, outSet.getEntities().get(0).getProperties().size());
Property list = outSet.getEntities().get(0).getProperties().get(1);
Assert.assertTrue(list.isCollection());
Assert.assertEquals(3, list.asCollection().size());
Assert.assertEquals(17, outSet.getEntities().get(1).getProperties().size());
Assert.assertEquals(17, outSet.getEntities().get(2).getProperties().size());
}
@Test
public void esCompAllPrim() throws Exception {
EntitySet outSet = new DataProvider().readAll(esCompAllPrim);
Assert.assertEquals(3, outSet.getEntities().size());
Assert.assertEquals(2, outSet.getEntities().get(0).getProperties().size());
Property complex = outSet.getEntities().get(0).getProperties().get(1);
Assert.assertTrue(complex.isLinkedComplex());
Assert.assertEquals(16, complex.asLinkedComplex().getValue().size());
Assert.assertEquals(2, outSet.getEntities().get(1).getProperties().size());
Assert.assertEquals(2, outSet.getEntities().get(2).getProperties().size());
}
@Test
public void esMixPrimCollComp() throws Exception {
EntitySet outSet = new DataProvider().readAll(esMixPrimCollComp);
Assert.assertEquals(3, outSet.getEntities().size());
Assert.assertEquals(4, outSet.getEntities().get(0).getProperties().size());
Property complex = outSet.getEntities().get(0).getProperties().get(2);
Assert.assertTrue(complex.isLinkedComplex());
Assert.assertEquals(2, complex.asLinkedComplex().getValue().size());
Property complexCollection = outSet.getEntities().get(0).getProperties().get(3);
Assert.assertTrue(complexCollection.isCollection());
List<?> linkedComplexValues = complexCollection.asCollection();
Assert.assertEquals(3, linkedComplexValues.size());
LinkedComplexValue linkedComplexValue = (LinkedComplexValue) linkedComplexValues.get(0);
Assert.assertEquals(2, linkedComplexValue.getValue().size());
Property lcProp = linkedComplexValue.getValue().get(0);
Assert.assertFalse(lcProp.isCollection());
Assert.assertEquals(123, lcProp.getValue());
//
Assert.assertEquals(4, outSet.getEntities().get(1).getProperties().size());
Assert.assertEquals(4, outSet.getEntities().get(2).getProperties().size());
}
@Test
public void esMedia() throws Exception {
DataProvider dataProvider = new DataProvider();
Entity entity = dataProvider.read(esMedia, Arrays.asList(mockParameter("PropertyInt16", "3")));
Assert.assertNotNull(dataProvider.readMedia(entity));
dataProvider.delete(esMedia, entity);
Assert.assertEquals(3, dataProvider.readAll(esMedia).getEntities().size());
entity = dataProvider.create(esMedia);
Assert.assertEquals(5, entity.getProperty("PropertyInt16").getValue());
dataProvider.setMedia(entity, new byte[] { 1, 2, 3, 4 }, "x/y");
Assert.assertArrayEquals(new byte[] { 1, 2, 3, 4 }, dataProvider.readMedia(entity));
Assert.assertEquals("x/y", entity.getMediaContentType());
}
private static UriParameter mockParameter(final String name, final String text) {
UriParameter parameter = Mockito.mock(UriParameter.class);
Mockito.when(parameter.getName()).thenReturn(name);
Mockito.when(parameter.getText()).thenReturn(text);
return parameter;
}
}