package jnpf.limsService.impl;
|
|
import jnpf.lims.api.model.TestWorkItemSnapshotActorRequest;
|
import jnpf.lims.api.model.TestWorkItemSnapshotBatch;
|
import jnpf.lims.api.model.TestWorkItemSnapshotRequest;
|
import jnpf.limsService.LimsTestWorkItemSnapshotService;
|
import org.junit.Test;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicReference;
|
|
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertSame;
|
import static org.junit.Assert.fail;
|
|
public class LimsTestWorkItemActorSnapshotServiceImplTest {
|
|
@Test
|
public void switchesToActorTenantAndAlwaysClearsTheRoute() {
|
AtomicReference<String> switched = new AtomicReference<>();
|
AtomicReference<String> resolvedTenant = new AtomicReference<>();
|
AtomicReference<String> resolvedUser = new AtomicReference<>();
|
AtomicInteger cleared = new AtomicInteger();
|
TestWorkItemSnapshotBatch expected = new TestWorkItemSnapshotBatch();
|
LimsTestWorkItemSnapshotService snapshots = (request, tenantId, userId) -> {
|
resolvedTenant.set(tenantId);
|
resolvedUser.set(userId);
|
return expected;
|
};
|
LimsTestWorkItemActorSnapshotServiceImpl service =
|
new LimsTestWorkItemActorSnapshotServiceImpl(snapshots,
|
new LimsTestWorkItemActorSnapshotServiceImpl.TenantRoute() {
|
@Override public void switchTo(String tenantId) { switched.set(tenantId); }
|
@Override public void clear() { cleared.incrementAndGet(); }
|
});
|
|
assertSame(expected, service.resolve(actor()));
|
assertEquals("tenant-a", switched.get());
|
assertEquals("tenant-a", resolvedTenant.get());
|
assertEquals("user-a", resolvedUser.get());
|
assertEquals(1, cleared.get());
|
}
|
|
@Test
|
public void routeFailureFailsClosedAndStillClears() {
|
AtomicInteger cleared = new AtomicInteger();
|
LimsTestWorkItemActorSnapshotServiceImpl service =
|
new LimsTestWorkItemActorSnapshotServiceImpl(
|
(request, tenantId, userId) -> new TestWorkItemSnapshotBatch(),
|
new LimsTestWorkItemActorSnapshotServiceImpl.TenantRoute() {
|
@Override public void switchTo(String tenantId) {
|
throw new IllegalStateException("route failed");
|
}
|
@Override public void clear() { cleared.incrementAndGet(); }
|
});
|
|
try {
|
service.resolve(actor());
|
fail("tenant switch failure must fail closed");
|
} catch (IllegalStateException expected) {
|
assertEquals("route failed", expected.getMessage());
|
}
|
assertEquals(1, cleared.get());
|
}
|
|
private static TestWorkItemSnapshotActorRequest actor() {
|
TestWorkItemSnapshotActorRequest actor = new TestWorkItemSnapshotActorRequest();
|
actor.setTenantId("tenant-a");
|
actor.setUserId("user-a");
|
actor.setRequest(new TestWorkItemSnapshotRequest());
|
return actor;
|
}
|
}
|