package be.cytomine.client.test;
import be.cytomine.client.CytomineException;
import be.cytomine.client.Project;
import be.cytomine.client.Server;
import be.cytomine.client.abst.AbstractDomain;
import be.cytomine.client.abst.AbstractProject;
import junit.framework.TestCase;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.FileReader;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* Created by lrollus on 4/6/14.
*/
public class ProjectTest extends TestCase{
JSONObject json57;
JSONObject json110;
Server server;
String date;
static long ID_PROJECT = 401l;
static long ID_USER1 = 101l;
static long ID_ONTOLOGY = 301;
@Before
public void setUp() throws Exception {
server = new Server();
JSONParser parser=new JSONParser();
json57 =(JSONObject)parser.parse(new FileReader("testdata/project/project_57.json"));
json110 =(JSONObject)parser.parse(new FileReader("testdata/project/project_110.json"));
date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(new Date());
}
@After
public void tearDown() throws Exception {
}
@Test
public void testBuildFromParams() throws Exception {
Project project = new Project();
project.build("TEST",63l,false,true,new ArrayList(), new ArrayList());
assertEquals("TEST", project.getName());
assertEquals(null,project.getId());
assertEquals(new Boolean(false),project.getRetrievalDisable());
assertEquals(new Boolean(true),project.getRetrievalAllOntology());
}
@Test
public void testBuildFromJSON() throws Exception {
Project project = new Project();
project.build(json57);
assertEquals("ULG-LBTD-NEO04",project.getName());
assertEquals(new Long(57l),project.getId());
assertEquals(new Boolean(false),project.getIsReadOnly());
}
@Test
public void testToJSON() throws Exception {
Project project = new Project();
project.build(json110);
JSONObject json = project.toJSON();
assertEquals(json110.get("name"),json.get("name"));
//check if all JSON fields are there and equals
Iterator it = json110.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
assertEquals(pairs.getKey()+" check if present",true,json.containsKey(pairs.getKey()));
assertEquals(pairs.getKey()+" check if equals",pairs.getValue(),json.get(pairs.getKey()));
}
//check if not other JSON fields are there
it = json.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
assertEquals(pairs.getKey()+" check if present",true,json110.containsKey(pairs.getKey()));
assertEquals(pairs.getKey()+" check if equals",pairs.getValue(),json110.get(pairs.getKey()));
}
}
@Test
public void testGet() throws Exception {
Project project = Project.get(server,ID_PROJECT);
assertEquals("project",project.getName());
assertEquals(new Long(ID_PROJECT),project.getId());
try {
Project.get(server,-1l);
fail();
} catch(CytomineException e) {
assertEquals(404,e.code);
}
}
@Test
public void testAdd() throws Exception {
Project project = new Project();
List admins = new ArrayList();
admins.add(ID_USER1);
List users = new ArrayList();
users.add(ID_USER1);
project.build("TESTADD-"+date,ID_ONTOLOGY,false,true,admins,users);
assertNull(project.getId());
project.add(server);
assertNotNull(project.getId());
Project aBadProject = new Project();
try {
aBadProject.build("",-1l,false,true,admins,users);
aBadProject.add(server);
fail();
} catch(CytomineException e) {
assertFalse(e.code+" should be 4xx", e.code == 200);
}
}
@Test
public void testEdit() throws Exception {
Project project = new Project();
project.build("TESTEDIT-"+date,ID_ONTOLOGY,false,true,new ArrayList(),new ArrayList());
project.add(server);
assertNotNull(project.getId());
project.setName("TESTEDIT-EDITED-"+date);
project.edit(server);
assertNotNull(project.getId());
assertEquals("TESTEDIT-EDITED-"+date,project.getName());
try {
project.setName("");
project.edit(server);
fail();
} catch(CytomineException e) {
assertFalse(e.code+" should be 4xx", e.code == 200);
}
}
@Test
public void testDelete() throws Exception {
Project project = new Project();
project.build("TESTDELETE-"+date,ID_ONTOLOGY,false,true,new ArrayList(),new ArrayList());
project.add(server);
assertNotNull(project.getId());
Long id = project.getId();
project.delete(server);
assertNull(project.getId());
try {
Project.get(server,id);
fail();
} catch(CytomineException e) {
assertTrue(e.code + " should be 404", e.code == 404);
}
try {
project.delete(server);
fail();
} catch(CytomineException e) {
assertTrue(e.code+" should be 404", e.code == 404);
}
}
@Test
public void testSave() throws Exception {
Project project = new Project();
List admins = new ArrayList();
admins.add(42l);//lrollus
project.build("TESTSAVE-"+date,ID_ONTOLOGY,false,true,admins,new ArrayList());
assertNull(project.getId());
project.save(server);
assertNotNull(project.getId());
project.setName("TESTSAVE-EDITED-"+date);
project.save(server);
assertNotNull(project.getId());
assertEquals("TESTSAVE-EDITED-"+date,project.getName());
}
@Test
public void testList() throws Exception {
List list = Project.list(server);
assertEquals(list.size() + " items", true, list.size() >= 1);
assertTrue(contains(list, ID_PROJECT));
assertFalse(contains(list, -1l));
list = Project.list(server,1,1);
assertEquals(list.size() + " items", 1, list.size());
}
@Test
public void testListByOntology() throws Exception {
List list = Project.listByOntology(server, ID_ONTOLOGY);
assertEquals(list.size() + " items", true, list.size() >= 1);
for(int i=0;i<list.size();i++) {
assertTrue(((Project)list.get(i)).getOntology().equals(ID_ONTOLOGY));
}
}
public boolean contains(List list, Long id) throws Exception{
boolean exist = false;
for(int i=0;i<list.size();i++) {
System.out.println((((Project)list.get(i)).getId()) + "=>" + (((AbstractDomain)list.get(i)).getId().equals(id)));
exist = exist || (((AbstractDomain)list.get(i)).getId().equals(id));
}
return exist;
}
//
// @Test
// public void testEquals() throws Exception {
// Project project1 = Project.build(json57);
// Project project2 = Project.get(json57.id)
// Project project3 = new Project("NotEquals");
// Project project4 = Project.build(json57);
//
// EqualsTester(project1, project2, project3, project4)
// }
}