package com.bagri.rest.service;
import static com.bagri.rest.RestConstants.bg_cookie;
import static org.junit.Assert.*;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.Test;
import com.bagri.core.api.SchemaRepository;
import com.bagri.core.api.TransactionIsolation;
import com.bagri.core.api.TransactionManagement;
import com.bagri.core.api.BagriException;
import com.bagri.rest.BagriRestServer;
import com.bagri.rest.RepositoryProvider;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.Properties;
public class TransactionServiceTest extends JerseyTest {
private TransactionManagement txMgr;
private SchemaRepository mockRepo;
private RepositoryProvider mockPro;
@Override
protected Application configure() {
txMgr = mock(TransactionManagement.class);
mockRepo = mock(SchemaRepository.class);
mockPro = mock(RepositoryProvider.class);
when(mockPro.getRepository("client-id")).thenReturn(mockRepo);
when(mockRepo.getTxManagement()).thenReturn(txMgr);
when(txMgr.isInTransaction()).thenReturn(false);
try {
when(txMgr.beginTransaction(TransactionIsolation.readCommited)).thenReturn(100L);
} catch (BagriException ex) {
ex.printStackTrace();
}
BagriRestServer server = new BagriRestServer(mockPro, null, new Properties());
return server.buildConfig();
}
@Test
public void testTransactionService() throws Exception {
Boolean inTx = target("tx").request(MediaType.TEXT_PLAIN)
.cookie(bg_cookie, "client-id")
.get(Boolean.class);
assertFalse(inTx);
Entity<String> isolation = Entity.entity("readCommited", MediaType.TEXT_PLAIN);
Response resp = target("tx").request(MediaType.TEXT_PLAIN)
.cookie(bg_cookie, "client-id")
.post(isolation);
assertEquals(Status.CREATED.getStatusCode(), resp.getStatus());
assertTrue(resp.getLocation().getPath().endsWith("/100"));
long txId = resp.readEntity(Long.class);
assertEquals(100L, txId);
resp = target("tx").path("100").request(MediaType.TEXT_PLAIN)
.cookie(bg_cookie, "client-id")
.delete();
assertEquals(Status.OK.getStatusCode(), resp.getStatus());
txId = target("tx").request(MediaType.TEXT_PLAIN)
.cookie(bg_cookie, "client-id")
.post(isolation, Long.class);
assertEquals(100L, txId);
Entity<Long> entity = Entity.entity(100L, MediaType.TEXT_PLAIN);
resp = target("tx").path("100").request(MediaType.TEXT_PLAIN)
.cookie(bg_cookie, "client-id")
.put(entity);
assertEquals(Status.OK.getStatusCode(), resp.getStatus());
}
}