package org.ihtsdo.otf.refset.graph.gao;
import static org.junit.Assert.assertEquals;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.MapConfiguration;
import org.ihtsdo.otf.refset.domain.Member;
import org.ihtsdo.otf.refset.domain.Refset;
import org.ihtsdo.otf.refset.exception.EntityAlreadyExistException;
import org.ihtsdo.otf.refset.exception.EntityNotFoundException;
import org.ihtsdo.otf.refset.graph.RefsetGraphAccessException;
import org.ihtsdo.otf.refset.graph.RefsetGraphFactory;
import org.ihtsdo.otf.refset.schema.RefsetSchema;
import org.ihtsdo.otf.refset.service.RefsetBrowseServiceStubData;
import org.joda.time.DateTime;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"file:src/main/webapp/WEB-INF/spring/appServlet/spring-refset-browse-service-stub-data.xml"})
public class MemberGAOTest {
static {
System.setProperty("env", "junit");
}
private MemberGAO gao;
private RefsetGAO rGao;
private RefsetAdminGAO aGao;
@Autowired
private RefsetBrowseServiceStubData data;
private RefsetGraphFactory f;
@Before
public void setUp() throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
map.put("storage.directory", "/tmp/berkeley");
map.put("storage.backend", "berkeleyje");
Configuration config = new MapConfiguration(map);
/*create schema*/
RefsetSchema sg = new RefsetSchema("src/test/resources/titan-graph-es-junit.properties");
sg.createSchema();
rGao = new RefsetGAO();
f = new RefsetGraphFactory(config);
rGao.setRGFactory(f);
gao = new MemberGAO();
f = new RefsetGraphFactory(config);
gao.setFactory(f);
gao.setRefsetGao(rGao);
aGao = new RefsetAdminGAO();
aGao.setFactory(f);
aGao.setMemberGao(gao);
aGao.setRefsetGao(rGao);
}
@BeforeClass
public static void cleanUp() {
delete();
}
@After
public void tearDown() throws Exception {
//cleanup();
}
@AfterClass
public static void cleanup() throws RefsetGraphAccessException, EntityNotFoundException {
delete();
}
private static void delete() {
File f = new File("/tmp/berkeley");
String[] files = f.list();
if (files != null) {
for (int i = 0; i < files.length; i++) {
File file = new File("/tmp/berkeley/" + files[i]);
System.err.println(file.getAbsolutePath());
file.delete();
}
}
f.delete();
}
@Test
public void removeMember() throws EntityNotFoundException, RefsetGraphAccessException, EntityAlreadyExistException {
addRefset();
Refset before = rGao.getRefset("junit_1");
int beforeSize = before.getMembers().size();
assertEquals(2, beforeSize);
gao.removeMember("junit_1", "101", "junit");
Refset after = rGao.getRefset("junit_1");
int afterSize = after.getMembers().size();
assertEquals(1, afterSize);
}
@Test(expected = EntityNotFoundException.class)
public void removeMemberWhenNullReferenceComponentId() throws EntityNotFoundException, RefsetGraphAccessException {
gao.removeMember("junit_1", null, "junit");
}
@Test(expected = EntityNotFoundException.class)
public void removeMemberWhenEmptyReferenceComponentId() throws EntityNotFoundException, RefsetGraphAccessException {
gao.removeMember("junit_1", "", "junit");
}
@Test(expected = EntityNotFoundException.class)
public void removeMemberWhenNullRefsetId() throws EntityNotFoundException, RefsetGraphAccessException {
gao.removeMember(null, "junit_1", "junit");
}
@Test(expected = EntityNotFoundException.class)
public void removeMemberWhenEmptyRefsetId() throws EntityNotFoundException, RefsetGraphAccessException {
gao.removeMember("", "junit_1", "junit");
}
private void addRefset() throws RefsetGraphAccessException, EntityAlreadyExistException {
Refset r = new Refset();
r.setUuid("junit_1");
r.setDescription("Junit");
Member m = new Member();
m.setReferencedComponentId("101");
Member m_1 = new Member();
m_1.setReferencedComponentId("102");
List<Member> members = new ArrayList<Member>();
members.add(m);
members.add(m_1);
r.setMembers(members);
r.setCreated(new DateTime());
r.setCreatedBy("junit");
r.setModuleId("somenumber");
aGao.addRefset(r);
}
}