package org.odata4j.test.unit.consumer; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.Collections; import java.util.List; import junit.framework.Assert; import org.junit.Test; import org.odata4j.consumer.AbstractODataConsumer; import org.odata4j.consumer.ODataClient; import org.odata4j.consumer.ODataClientRequest; import org.odata4j.core.ODataConstants.Headers; import org.odata4j.core.OEntities; import org.odata4j.core.OEntity; import org.odata4j.core.OEntityKey; import org.odata4j.core.OProperty; import org.odata4j.edm.EdmEntitySet; public class AbstractODataConsumerTest { private static class MockConsumer extends AbstractODataConsumer { public String lastMethodName; public Object[] lastMethodArgs; private final ODataClient client; protected MockConsumer() { super("MockServiceRoot"); InvocationHandler h = new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { lastMethodName = method.getName(); lastMethodArgs = args; return null; } }; client = (ODataClient) Proxy.newProxyInstance(ODataClient.class.getClassLoader(), new Class<?>[] { ODataClient.class }, h); } @Override protected ODataClient getClient() { return client; } } @Test public void deletesAndEtags() { MockConsumer c = new MockConsumer(); EdmEntitySet ees = new EdmEntitySet.Builder().build(); OEntityKey entityKey = OEntityKey.create(1); String entityTag = "ETAG"; List<OProperty<?>> properties = Collections.emptyList(); // with etag OEntity entityWithEtag = OEntities.create(ees, null, entityKey, entityTag, properties, null); c.deleteEntity(entityWithEtag).execute(); ODataClientRequest request = (ODataClientRequest) c.lastMethodArgs[0]; Assert.assertEquals("deleteEntity", c.lastMethodName); Assert.assertEquals(entityTag, request.getHeaders().get(Headers.IF_MATCH)); c.deleteEntity(entityWithEtag).ifMatch("*").execute(); Assert.assertEquals("deleteEntity", c.lastMethodName); request = (ODataClientRequest) c.lastMethodArgs[0]; Assert.assertEquals("*", request.getHeaders().get(Headers.IF_MATCH)); c.deleteEntity(entityWithEtag).ifMatch(null).execute(); Assert.assertEquals("deleteEntity", c.lastMethodName); request = (ODataClientRequest) c.lastMethodArgs[0]; Assert.assertEquals(false, request.getHeaders().containsKey(Headers.IF_MATCH)); // without etag OEntity entityWithoutEtag = OEntities.create(ees, null, entityKey, null, properties, null); c.deleteEntity(entityWithoutEtag).execute(); request = (ODataClientRequest) c.lastMethodArgs[0]; Assert.assertEquals("deleteEntity", c.lastMethodName); Assert.assertEquals(false, request.getHeaders().containsKey(Headers.IF_MATCH)); } }