package dk.statsbiblioteket.medieplatform.autonomous;
import org.testng.Assert;
import org.testng.annotations.Test;
import dk.statsbiblioteket.doms.central.connectors.fedora.pidGenerator.PIDGeneratorException;
import javax.xml.bind.JAXBException;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Properties;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
public class NewspaperSBOIEventStorageTest {
@Test(groups = {"externalTest"}, enabled = true)
public void testGetBatches() throws Exception {
Properties props = getProperties();
NewspaperSBOIEventStorage summa = getSboiClient(props);
Iterator<Batch> batches = summa.findItems(false,
Arrays.asList("Data_Received"), Arrays.asList("Roundtrip_Approved"));
int count = 0;
while (batches.hasNext()) {
Item next = batches.next();
count++;
}
Assert.assertTrue(count > 0, "No batches Found");
}
@Test(groups = {"externalTest"}, enabled = true)
public void testGetBatchFromList() throws Exception {
Properties props = getProperties();
NewspaperSBOIEventStorage summa = getSboiClient(props);
Iterator<Batch> batches = summa.findItems(false,
Arrays.asList("Data_Received"), Arrays.asList("Roundtrip_Approved"));
Batch first = batches.next();
EventTrigger.Query<Batch> query = new EventTrigger.Query<>();
query.getPastSuccessfulEvents().add("Data_Received");
query.getFutureEvents().add("Roundtrip_Approved");
query.getItems().add(first);
Iterator<Batch> batches2 = summa.getTriggeredItems(query);
assertEquals(
batches2.next(),first);
}
@Test(groups = {"externalTest"}, enabled = true)
public void testGetBatchesFromList() throws Exception {
Properties props = getProperties();
NewspaperSBOIEventStorage summa = getSboiClient(props);
Iterator<Batch> batches = summa.findItems(false,
Arrays.asList("Data_Received"), Arrays.asList("Roundtrip_Approved"));
Batch first = batches.next();
Batch second = batches.next();
EventTrigger.Query<Batch> query = new EventTrigger.Query<>();
query.getPastSuccessfulEvents().add("Data_Received");
query.getFutureEvents().add("Roundtrip_Approved");
query.getItems().add(first);
query.getItems().add(second);
Iterator<Batch> batches2 = summa.getTriggeredItems(query);
HashSet<Batch> results = new HashSet<>();
results.add(first);
results.add(second);
assertTrue(results.contains(batches2.next()));
assertTrue(results.contains(batches2.next()));
try {
batches2.next();
fail();
} catch (NoSuchElementException e){
}
}
private NewspaperSBOIEventStorage getSboiClient(Properties props) throws
MalformedURLException,
JAXBException,
PIDGeneratorException {
DomsEventStorageFactory<Batch> factory = new NewspaperDomsEventStorageFactory();
factory.setFedoraLocation(props.getProperty(ConfigConstants.DOMS_URL));
factory.setUsername(props.getProperty(ConfigConstants.DOMS_USERNAME));
factory.setPassword(props.getProperty(ConfigConstants.DOMS_PASSWORD));
DomsEventStorage<Batch> domsEventStorage = factory.createDomsEventStorage();
return new NewspaperSBOIEventStorage(props.getProperty(ConfigConstants.AUTONOMOUS_SBOI_URL),
new PremisManipulatorFactory<>(PremisManipulatorFactory.TYPE,
new BatchItemFactory()),
domsEventStorage,
Integer.parseInt(props.getProperty(ConfigConstants.SBOI_PAGESIZE,
"100")));
}
private Properties getProperties() throws IOException {
String pathToProperties = System.getProperty("integration.test.newspaper.properties");
Properties props = new Properties();
props.load(new FileInputStream(pathToProperties));
return props;
}
}