[OLINGO-260] provided entity update integration test on proxy
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/b1889c0d Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/b1889c0d Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/b1889c0d Branch: refs/heads/olingo-266-ref Commit: b1889c0d82712837583ef6e3eb90edef7fb4ce74 Parents: a528af7 Author: fmartelli <[email protected]> Authored: Tue May 13 15:16:45 2014 +0200 Committer: Stephan Klevenz <[email protected]> Committed: Mon May 19 12:33:25 2014 +0200 ---------------------------------------------------------------------- .../resources/V30/Customer/-9/links/Orders.xml | 24 ++++ .../fit/proxy/v3/EntityUpdateTestITCase.java | 127 +++++++++++++++++++ .../fit/proxy/v4/EntityUpdateTestITCase.java | 118 +++++++++++++++++ 3 files changed, 269 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/b1889c0d/fit/src/main/resources/V30/Customer/-9/links/Orders.xml ---------------------------------------------------------------------- diff --git a/fit/src/main/resources/V30/Customer/-9/links/Orders.xml b/fit/src/main/resources/V30/Customer/-9/links/Orders.xml new file mode 100644 index 0000000..6b6b5d8 --- /dev/null +++ b/fit/src/main/resources/V30/Customer/-9/links/Orders.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + + 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. + +--> +<links xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices"> + <uri>http://localhost:8080/DefaultService.svc/Order(-9)</uri> +</links> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/b1889c0d/fit/src/test/java/org/apache/olingo/fit/proxy/v3/EntityUpdateTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/EntityUpdateTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/EntityUpdateTestITCase.java new file mode 100644 index 0000000..82660eb --- /dev/null +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/EntityUpdateTestITCase.java @@ -0,0 +1,127 @@ +/* + * 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.fit.proxy.v3; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertNotNull; + +import java.lang.reflect.Proxy; +import org.apache.commons.lang3.StringUtils; +import org.apache.olingo.ext.proxy.commons.EntityTypeInvocationHandler; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice. + types.ConcurrencyInfo; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice. + types.Customer; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice. + types.Message; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice. + types.MessageKey; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice. + types.Order; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice. + types.OrderCollection; +import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice. + types.Product; +import org.junit.Test; + +/** + * This is the unit test class to check entity update operations. + */ +public class EntityUpdateTestITCase extends AbstractTestITCase { + + @Test + public void update() { + Order order = container.getOrder().get(-9); + + final ConcurrencyInfo ci = order.getConcurrency(); + ci.setToken("XXX"); + + container.flush(); + + order = container.getOrder().get(-9); + assertEquals("XXX", order.getConcurrency().getToken()); + } + + @Test + public void multiKey() { + final MessageKey key = new MessageKey(); + key.setFromUsername("1"); + key.setMessageId(-10); + + Message message = container.getMessage().get(key); + assertNotNull(message); + + message.setBody("XXX"); + + container.flush(); + + message = container.getMessage().get(key); + assertNotNull(message); + assertEquals("XXX", message.getBody()); + } + + @Test + public void patchLink() { + Order order = container.getOrder().newOrder(); + order.setOrderId(400); + order.setCustomerId(-9); + + OrderCollection orders = container.getOrder().newOrderCollection(); + orders.add(order); + + Customer customer = container.getCustomer().get(-9); + customer.setOrders(orders); + order.setCustomer(customer); + + container.flush(); + + order = container.getOrder().get(400); + assertEquals(400, order.getOrderId().intValue()); + assertEquals(-9, order.getCustomerId().intValue()); + + customer = container.getCustomer().get(-9); + + assertEquals(2, customer.getOrders().size()); + + int count = 0; + for (Order inside : customer.getOrders()) { + if (inside.getOrderId() == 400) { + count++; + } + } + assertEquals(1, count); + assertEquals(-9, order.getCustomer().getCustomerId(), 0); + } + + @Test + public void concurrentModification() { + Product product = container.getProduct().get(-10); + final String etag = ((EntityTypeInvocationHandler) Proxy.getInvocationHandler(product)).getETag(); + assertTrue(StringUtils.isNotBlank(etag)); + + final String baseConcurrency = String.valueOf(System.currentTimeMillis()); + product.setBaseConcurrency(baseConcurrency); + + container.flush(); + + product = container.getProduct().get(-10); + assertEquals(baseConcurrency, product.getBaseConcurrency()); + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/b1889c0d/fit/src/test/java/org/apache/olingo/fit/proxy/v4/EntityUpdateTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/EntityUpdateTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/EntityUpdateTestITCase.java new file mode 100644 index 0000000..cd00901 --- /dev/null +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/EntityUpdateTestITCase.java @@ -0,0 +1,118 @@ +/* + * 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.fit.proxy.v4; + +import java.lang.reflect.Proxy; +import java.math.BigDecimal; +import org.apache.commons.lang3.StringUtils; +import org.apache.olingo.ext.proxy.commons.EntityTypeInvocationHandler; +import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Address; +import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Order; +import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.OrderCollection; +import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Customer; +import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.OrderDetail; +import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.OrderDetailKey; +import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import org.junit.Test; + +/** + * This is the unit test class to check entity update operations. + */ +public class EntityUpdateTestITCase extends AbstractTestITCase { + + @Test + public void update() { + Person person = container.getPeople().get(1); + + final Address address = person.getHomeAddress(); + address.setCity("XXX"); + + container.flush(); + + person = container.getPeople().get(1); + assertEquals("XXX", person.getHomeAddress().getCity()); + } + + @Test + public void multiKey() { + final OrderDetailKey orderDetailKey = new OrderDetailKey(); + orderDetailKey.setOrderID(7); + orderDetailKey.setProductID(5); + + OrderDetail orderDetail = container.getOrderDetails().get(orderDetailKey); + assertNotNull(orderDetail); + assertEquals(7, orderDetail.getOrderID(), 0); + assertEquals(5, orderDetail.getProductID(), 0); + + orderDetail.setQuantity(5); + + container.flush(); + + orderDetail = container.getOrderDetails().get(orderDetailKey); + orderDetail.setQuantity(5); + } + + @Test + public void patchLink() { + Order order = container.getOrders().newOrder(); + order.setOrderID(400); + + OrderCollection orders = container.getOrders().newOrderCollection(); + orders.add(order); + + Customer customer = container.getCustomers().get(1); + customer.setOrders(orders); + order.setCustomerForOrder(customer); + + container.flush(); + + order = container.getOrders().get(400); + assertEquals(400, order.getOrderID().intValue()); + + customer = container.getCustomers().get(1); + + assertEquals(2, customer.getOrders().size()); + + int count = 0; + for (Order inside : customer.getOrders()) { + if (inside.getOrderID() == 400) { + count++; + } + } + assertEquals(1, count); + assertEquals(1, order.getCustomerForOrder().getPersonID(), 0); + } + + @Test + public void concurrentModification() { + Order order = container.getOrders().get(8); + final String etag = ((EntityTypeInvocationHandler) Proxy.getInvocationHandler(order)).getETag(); + assertTrue(StringUtils.isNotBlank(etag)); + + order.setShelfLife(BigDecimal.TEN); + + container.flush(); + + order = container.getOrders().get(8); + assertEquals(BigDecimal.TEN, order.getShelfLife()); + } +}
