package org.odata4j.test.integration.issues;
import junit.framework.Assert;
import org.core4j.Enumerable;
import org.core4j.Func;
import org.core4j.Funcs;
import org.junit.Test;
import org.odata4j.consumer.ODataConsumer;
import org.odata4j.core.OEntityKey;
import org.odata4j.producer.EntityQueryInfo;
import org.odata4j.producer.EntityResponse;
import org.odata4j.producer.ODataContext;
import org.odata4j.producer.inmemory.InMemoryProducer;
import org.odata4j.producer.resources.DefaultODataProducerProvider;
import org.odata4j.producer.server.ODataServer;
import org.odata4j.test.integration.AbstractRuntimeTest;
public class Issue13Test extends AbstractRuntimeTest {
public Issue13Test(RuntimeFacadeType type) {
super(type);
}
@Test
public void issue13() throws Exception {
String endpointUri = "http://localhost:8813/Issue13.svc/";
final OEntityKey[] lastEntityKey = new OEntityKey[1];
InMemoryProducer producer = new InMemoryProducer("Issue13") {
@Override
public EntityResponse getEntity(ODataContext context, String entitySetName, OEntityKey entityKey, EntityQueryInfo queryInfo) {
lastEntityKey[0] = entityKey;
return super.getEntity(context, entitySetName, entityKey, queryInfo);
}
};
producer.register(Long.class, Long.class, "Entity", new Func<Iterable<Long>>() {
public Iterable<Long> apply() {
return Enumerable.create(1L, 2L, 3L);
}
}, Funcs.identity(Long.class));
DefaultODataProducerProvider.setInstance(producer);
ODataServer server = this.rtFacade.startODataServer(endpointUri);
ODataConsumer c = this.rtFacade.createODataConsumer(endpointUri, null);
lastEntityKey[0] = null;
Assert.assertNotNull(c.getEntity("Entity", 2L).execute());
Assert.assertNotNull(lastEntityKey[0]);
Assert.assertEquals(OEntityKey.create(2L), lastEntityKey[0]);
server.stop();
}
}