- Add recursive delete for project
authorymh <ymh.work@gmail.com>
Sun, 17 Mar 2013 02:24:56 +0100
changeset 92 1723936b3836
parent 91 5e7a8805d9f6
child 93 8d05172e47f3
- Add recursive delete for project - correct copy - add unit tests
server/src/main/java/org/iri_research/renkan/models/Edge.java
server/src/main/java/org/iri_research/renkan/models/ProjectRevision.java
server/src/main/java/org/iri_research/renkan/repositories/ProjectRevisionsRepositoryImpl.java
server/src/main/java/org/iri_research/renkan/repositories/ProjectsRepositoryCustom.java
server/src/main/java/org/iri_research/renkan/repositories/ProjectsRepositoryImpl.java
server/src/main/java/org/iri_research/renkan/rest/ProjectsResource.java
server/src/main/java/org/iri_research/renkan/rest/RenkanResource.java
server/src/main/webapp/static/js/corenkan.js
server/src/test/java/org/iri_research/renkan/test/repositories/ProjectsRepositoryTest.java
server/src/test/java/org/iri_research/renkan/test/rest/ProjectRestTest.java
server/src/test/java/org/iri_research/renkan/test/rest/SpaceRestTest.java
--- a/server/src/main/java/org/iri_research/renkan/models/Edge.java	Sat Mar 16 04:37:05 2013 +0100
+++ b/server/src/main/java/org/iri_research/renkan/models/Edge.java	Sun Mar 17 02:24:56 2013 +0100
@@ -7,6 +7,7 @@
 import org.springframework.data.mongodb.core.mapping.Document;
 import org.springframework.data.mongodb.core.mapping.Field;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
 
@@ -32,7 +33,7 @@
 	}
 	
 	public Edge(Edge edge, Node from, Node to, String projectId) {
-		this(UUID.randomUUID().toString(), edge.title, edge.description, edge.uri, edge.color, edge.from, edge.to, edge.createdBy, projectId);
+		this(UUID.randomUUID().toString(), edge.title, edge.description, edge.uri, edge.color, from, to, edge.createdBy, projectId);
 	}	
 
 	public Edge(Edge edge) {
@@ -59,6 +60,11 @@
 		return createdBy;
 	}
 	
+	@JsonIgnore
+	public Node getFromNode() {
+		return this.from;
+	}
+	
 	public String getFrom() {
 		if(this.from != null) {
 			return this.from.id;
@@ -68,6 +74,11 @@
 		}
 	}
 
+	@JsonIgnore
+	public Node getToNode() {
+		return this.to;
+	}
+	
 	public String getTo() {
 		if(this.to != null) {
 			return this.to.id;
--- a/server/src/main/java/org/iri_research/renkan/models/ProjectRevision.java	Sat Mar 16 04:37:05 2013 +0100
+++ b/server/src/main/java/org/iri_research/renkan/models/ProjectRevision.java	Sun Mar 17 02:24:56 2013 +0100
@@ -35,6 +35,11 @@
 		super();
 	}
 
+	public ProjectRevision(String title, String description,
+			String uri, Project project, int revision, Date created) {
+		this(null, title, description, uri, project, revision,created);
+	}
+	
 	public ProjectRevision(ObjectId id, String title, String description,
 			String uri, Project project, int revision, Date created) {
 		super(id, title, description, uri, null);
--- a/server/src/main/java/org/iri_research/renkan/repositories/ProjectRevisionsRepositoryImpl.java	Sat Mar 16 04:37:05 2013 +0100
+++ b/server/src/main/java/org/iri_research/renkan/repositories/ProjectRevisionsRepositoryImpl.java	Sun Mar 17 02:24:56 2013 +0100
@@ -13,7 +13,6 @@
 	@Override
 	public ProjectRevision getProjectRevision(Project project, int revision) {
 		ProjectRevision pr = new ProjectRevision(
-				null,
 				project.getTitle(),
 				project.getDescription(),
 				project.getUri(),
--- a/server/src/main/java/org/iri_research/renkan/repositories/ProjectsRepositoryCustom.java	Sat Mar 16 04:37:05 2013 +0100
+++ b/server/src/main/java/org/iri_research/renkan/repositories/ProjectsRepositoryCustom.java	Sun Mar 17 02:24:56 2013 +0100
@@ -8,6 +8,11 @@
 	
 	public int getRevCounter(String projectId);
 	public Map<String, Integer> getCountBySpace();
+	
+	public void deleteRecursive(String projectId);
+	public void deleteRecursive(Project project);
+	public void deleteRecursive(Iterable<? extends Project> projects);
+	
 	public Project copy(Project p, String newTitle);
 	
 }
--- a/server/src/main/java/org/iri_research/renkan/repositories/ProjectsRepositoryImpl.java	Sat Mar 16 04:37:05 2013 +0100
+++ b/server/src/main/java/org/iri_research/renkan/repositories/ProjectsRepositoryImpl.java	Sun Mar 17 02:24:56 2013 +0100
@@ -1,9 +1,11 @@
 package org.iri_research.renkan.repositories;
 
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.iri_research.renkan.models.Project;
+import org.iri_research.renkan.models.ProjectRevision;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.stereotype.Component;
@@ -25,6 +27,9 @@
 
 	@Autowired
 	private EdgesRepository edgesRepository;
+	
+	@Autowired
+	private ProjectRevisionsRepository projectRevisionsRepository;
 
 	
 	private class GroupResult {
@@ -67,10 +72,40 @@
 		
 		Project res = new Project(p);
 		res.setTitle(newTitle);
-		this.nodesRepository.save(p.getNodes());
-		this.edgesRepository.save(p.getEdges());
+		this.nodesRepository.save(res.getNodes());
+		this.edgesRepository.save(res.getEdges());
 		
 		return this.projectsRepository.save(res);
 	}
 
+	@Override
+	public void deleteRecursive(String projectId) {		
+		this.deleteRecursive(this.projectsRepository.findOne(projectId));		
+	}
+
+	@Override
+	public void deleteRecursive(Project project) {
+		this.deleteRecursive(Arrays.asList(new Project[] {project}));
+	}
+
+	@Override
+	public void deleteRecursive(Iterable<? extends Project> projects) {
+		
+		for(Project p: projects) {
+			if( p == null) {
+				continue;
+			}
+			
+			ProjectRevision pr = this.projectRevisionsRepository.getProjectRevision(p, this.projectsRepository.getRevCounter(p.getId()));
+			this.projectRevisionsRepository.save(pr);
+			
+			//delete edges
+			this.edgesRepository.delete(p.getEdges());
+			//delete nodes
+			this.nodesRepository.delete(p.getNodes());
+			//delete project
+			this.projectsRepository.delete(p);
+		}
+	}
+
 }
--- a/server/src/main/java/org/iri_research/renkan/rest/ProjectsResource.java	Sat Mar 16 04:37:05 2013 +0100
+++ b/server/src/main/java/org/iri_research/renkan/rest/ProjectsResource.java	Sun Mar 17 02:24:56 2013 +0100
@@ -49,7 +49,11 @@
 	@Override
 	protected List<String> getObjectListFieldList() {
 		return Arrays.asList(this.baseObjectListFieldList);
-	}
+	}	
 	
-		
+	@Override
+	protected void doDeleteObject(String objectId) {
+		this.projectsRepository.deleteRecursive(objectId);
+	}
+
 }
--- a/server/src/main/java/org/iri_research/renkan/rest/RenkanResource.java	Sat Mar 16 04:37:05 2013 +0100
+++ b/server/src/main/java/org/iri_research/renkan/rest/RenkanResource.java	Sun Mar 17 02:24:56 2013 +0100
@@ -51,6 +51,10 @@
 	
 	abstract protected void prepareObject(T obj);
 	
+	protected void doDeleteObject(ID objectId) {
+		this.getRepository().delete(objectId);
+	}
+	
 	@GET
 	@Path("{id : [a-zA-Z\\-0-9]+}")
 	@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
@@ -73,8 +77,8 @@
 	public Response deleteObject(@PathParam("id") ID objectId) {
 		
 		this.logger.debug("DeleteObject : id " + objectId);
-				
-		this.getRepository().delete(objectId);
+		this.doDeleteObject(objectId);	
+		
 		return Response.ok(this.uriInfo.getAbsolutePathBuilder().build().toString() + " deleted").build();
 		
 	}
--- a/server/src/main/webapp/static/js/corenkan.js	Sat Mar 16 04:37:05 2013 +0100
+++ b/server/src/main/webapp/static/js/corenkan.js	Sun Mar 17 02:24:56 2013 +0100
@@ -55,12 +55,12 @@
     	
     	this.collab = coweb.initCollab({id : "renkan_" + id});    	    	    	
     	
-    	this.collab.subscribeStateResponse(this, "onStateResponse");
-    	
     	this.collab.subscribeSync("project", this, "onRemoteProjectChange");
     	this.collab.subscribeSync("user", this, "onRemoteUserChange");
     	this.collab.subscribeSync("node", this, "onRemoteNodeChange");
     	this.collab.subscribeSync("edge", this, "onRemoteEdgeChange");
+
+    	this.collab.subscribeStateResponse(this, "onStateResponse");    	
     	
     };
     
@@ -104,7 +104,7 @@
     	obj = json.parse(state);
     	console.log("State response", obj);
     	obj['_id'] = obj['id'];
-    	this.project.set(obj);
+    	this.project.set(obj, {silent: true});
     };
     
     function prepareValues(obj,c) {
@@ -299,7 +299,7 @@
 	        		    id: obj.id,
 	        		    _type: "project",
 	        		    _project_id: obj.id,
-	        		    _user_id : (this.project.current_user!=null)?this.project.current_user.id:null
+	        		    _user_id : (that.project.current_user!=null)?that.project.current_user.id:null
 	        		};
 	        		values[field] = c;
 	        		that.collab.sendSync("project", values);
--- a/server/src/test/java/org/iri_research/renkan/test/repositories/ProjectsRepositoryTest.java	Sat Mar 16 04:37:05 2013 +0100
+++ b/server/src/test/java/org/iri_research/renkan/test/repositories/ProjectsRepositoryTest.java	Sun Mar 17 02:24:56 2013 +0100
@@ -10,9 +10,11 @@
 import org.iri_research.renkan.models.Edge;
 import org.iri_research.renkan.models.Node;
 import org.iri_research.renkan.models.Project;
+import org.iri_research.renkan.models.ProjectRevision;
 import org.iri_research.renkan.models.Space;
 import org.iri_research.renkan.repositories.EdgesRepository;
 import org.iri_research.renkan.repositories.NodesRepository;
+import org.iri_research.renkan.repositories.ProjectRevisionsRepository;
 import org.iri_research.renkan.repositories.ProjectsRepository;
 import org.iri_research.renkan.repositories.SpacesRepository;
 import org.junit.After;
@@ -32,6 +34,7 @@
 import com.mongodb.DBCollection;
 import com.mongodb.DBCursor;
 import com.mongodb.DBObject;
+import com.mongodb.DBRef;
 
 
 @RunWith(SpringJUnit4ClassRunner.class)
@@ -55,6 +58,9 @@
 	private EdgesRepository edgesRepository;
 	
 	@Autowired
+	private ProjectRevisionsRepository projectRevisionsRepository;
+	
+	@Autowired
 	private MongoTemplate mongoTemplate;
 	
 	private ArrayList<Project> testProjects = new ArrayList<Project>();
@@ -112,6 +118,7 @@
 		logger.debug("Teardown");
 		edgesRepository.deleteAll();
 		nodesRepository.deleteAll();
+		projectRevisionsRepository.deleteAll();
 		projectsRepository.deleteAll();
 		spacesRepository.deleteAll();
 	}
@@ -228,11 +235,174 @@
 		
 		Assert.assertEquals("The project must be found", 1, resFind.count());
 		
-		for(DBObject obj: coll.find(filter)) {
+		for(DBObject obj: resFind) {
 			Assert.assertEquals("id must be equal", newProject.getId(), obj.get("_id"));
 			Assert.assertEquals("title must be must be copy_project", "copy_project", obj.get("title"));
 			Assert.assertEquals("space_id must be must be same than copyProject", this.copyProject.getSpaceId(), obj.get("space_id"));
 		}
+		
+		
+		filter = new BasicDBObject();
+		filter.put("project_id", newProject.getId());
+		
+		DBCollection nodesColl = mongoTemplate.getCollection(mongoTemplate.getCollectionName(Node.class));
+		resFind = nodesColl.find(filter);
+		
+		Assert.assertEquals("Must have 3 nodes", this.copyProject.getNodes().size(), resFind.count());
+		
+		for(DBObject obj: resFind) {
+			// find node with same title in copy project
+			Node originalNode = null;
+			for(Node n: this.copyProject.getNodes()) {
+				if(n.getTitle().equals(obj.get("title"))) {
+					originalNode = n;
+					break;
+				}
+			}
+			
+			Assert.assertNotNull("Must fincd original Node", originalNode);
+			
+			//color, desc, id diff, uri, created_by, image, position, diff projectif, size
+			Assert.assertNotSame("id must be differents", originalNode.getId(), obj.get("_id"));
+			Assert.assertNotSame("project id must be differents", originalNode.getProjectId(), obj.get("project_id"));
+
+			Assert.assertEquals("same color", originalNode.getColor(), obj.get("color"));
+			Assert.assertEquals("same desc", originalNode.getDescription(), obj.get("description"));
+			Assert.assertEquals("same uri", originalNode.getUri(), obj.get("uri"));
+			Assert.assertEquals("same image", originalNode.getImage(), obj.get("image"));
+			Assert.assertEquals("same position", originalNode.getPosition().getX(), ((DBObject)obj.get("position")).get("x"));
+			Assert.assertEquals("same position", originalNode.getPosition().getY(), ((DBObject)obj.get("position")).get("y"));
+			Assert.assertEquals("same size", originalNode.getSize(), obj.get("size"));			
+			
+		}
+		
+		DBCollection edgesColl = mongoTemplate.getCollection(mongoTemplate.getCollectionName(Edge.class));
+		resFind = edgesColl.find(filter);
+		
+		Assert.assertEquals("Must have 3 edges", this.copyProject.getEdges().size(), resFind.count());
+		
+		for(DBObject obj: resFind) {
+			// find node with same title in copy project
+			Edge originalEdge = null;
+			for(Edge e: this.copyProject.getEdges()) {
+				if(e.getTitle().equals(obj.get("title"))) {
+					originalEdge = e;
+					break;
+				}
+			}
+			
+			Assert.assertNotNull("Must find original Node", originalEdge);
+			
+			//color, desc, id diff, uri, created_by, image, position, diff projectif, size
+			Assert.assertFalse("id must be differents", originalEdge.getId().equals(obj.get("_id")));
+			Assert.assertFalse("project id must be differents", originalEdge.getProjectId().equals(obj.get("project_id")));
+
+			Assert.assertEquals("same color", originalEdge.getColor(), obj.get("color"));
+			Assert.assertEquals("same desc", originalEdge.getDescription(), obj.get("description"));
+			Assert.assertEquals("same uri", originalEdge.getUri(), obj.get("uri"));
+			
+			
+			// get FromNode
+			DBObject fromNode = nodesColl.findOne(((DBRef)obj.get("from")).getId());
+			Assert.assertNotNull("fromNode must exits ", fromNode);
+			Assert.assertFalse("must be different from node", originalEdge.getFrom().equals(fromNode.get("_id")));
+			Assert.assertEquals("same from title", originalEdge.getFromNode().getTitle(), fromNode.get("title"));
+			
+			DBObject toNode = nodesColl.findOne(((DBRef)obj.get("to")).getId());
+			Assert.assertNotNull("toNode must exits", toNode);
+			Assert.assertFalse("must be different to node", originalEdge.getTo().equals(toNode.get("_id")));
+			Assert.assertEquals("same to title", originalEdge.getToNode().getTitle(), toNode.get("title"));
+			
+		}		
+	}
+	
+	@Test
+	public void testDeleteRecursive() {
+		
+		List<Node> nodes= copyProject.getNodes();
+		List<Edge> edges= copyProject.getEdges();
+		
+		this.projectsRepository.deleteRecursive(copyProject);
+		
+		DBObject filter = new BasicDBObject();
+		filter.put("_id", copyProject.getId());
+		
+		DBCollection coll = mongoTemplate.getCollection(mongoTemplate.getCollectionName(Project.class));
+		DBCursor resFind = coll.find(filter);
+		
+		Assert.assertEquals("The project must not be found", 0, resFind.count());
+		
+		filter = new BasicDBObject();
+		filter.put("project_id", copyProject.getId());
+		
+		DBCollection nodesColl = mongoTemplate.getCollection(mongoTemplate.getCollectionName(Node.class));
+		resFind = nodesColl.find(filter);
+		
+		Assert.assertEquals("no nodes left", 0, resFind.count());
+		
+		for(Node n: nodes) {
+			DBObject nobj = nodesColl.findOne(n.getId());
+			Assert.assertNull("node should be deleted", nobj);
+		}
+
+		
+		DBCollection edgesColl = mongoTemplate.getCollection(mongoTemplate.getCollectionName(Edge.class));
+		resFind = edgesColl.find(filter);
+		
+		Assert.assertEquals("no edges left", 0, resFind.count());
+		
+		for(Edge e: edges) {
+			DBObject eobj = edgesColl.findOne(e.getId());
+			Assert.assertNull("edge should be deleted", eobj);
+		}
+		
+	}
+	
+	@SuppressWarnings("unchecked")
+	@Test
+	public void testDeleteRecursiveProjectRevision() {
+		
+		List<Node> nodes= copyProject.getNodes();
+		List<Edge> edges= copyProject.getEdges();
+		
+		int revCounter = copyProject.getRevCounter();
+		
+		this.projectsRepository.deleteRecursive(copyProject);
+
+		DBCollection coll = mongoTemplate.getCollection(mongoTemplate.getCollectionName(ProjectRevision.class));
+		
+		DBObject filter = new BasicDBObject();
+		filter.put("project", new DBRef(mongoTemplate.getDb(), "projects", copyProject.getId()));
+		filter.put("revision", new Integer(revCounter));
+		
+		DBObject revision = coll.findOne(filter);
+		
+		Assert.assertNotNull("Must find revision", revision);
+		
+		for(DBObject nobj: ((Iterable<DBObject>)revision.get("nodes"))) {
+			Node node = null;
+			for(Node n: nodes) {
+				if(n.getId().equals(nobj.get("_id"))) {
+					node = n;
+					break;
+				}
+			}
+			Assert.assertNotNull("Node must be in the original list", node);
+			Assert.assertEquals("Nodes must have same title", node.getTitle(), nobj.get("title"));
+		}
+		
+		for(DBObject eobj: ((Iterable<DBObject>)revision.get("edges"))) {
+			Edge edge = null;
+			for(Edge e: edges) {
+				if(e.getId().equals(eobj.get("_id"))) {
+					edge = e;
+					break;
+				}
+			}
+			Assert.assertNotNull("Edge must be in the original list", edge);
+			Assert.assertEquals("Edges must have same title", edge.getTitle(), eobj.get("title"));
+		}
+		
 	}
 	
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/test/java/org/iri_research/renkan/test/rest/ProjectRestTest.java	Sun Mar 17 02:24:56 2013 +0100
@@ -0,0 +1,171 @@
+package org.iri_research.renkan.test.rest;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+import org.iri_research.renkan.models.Edge;
+import org.iri_research.renkan.models.Node;
+import org.iri_research.renkan.models.Project;
+import org.iri_research.renkan.models.Space;
+import org.iri_research.renkan.repositories.EdgesRepository;
+import org.iri_research.renkan.repositories.NodesRepository;
+import org.iri_research.renkan.repositories.ProjectRevisionsRepository;
+import org.iri_research.renkan.repositories.ProjectsRepository;
+import org.iri_research.renkan.repositories.SpacesRepository;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.geo.Point;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.web.context.ContextLoaderListener;
+
+import com.mongodb.BasicDBObject;
+import com.mongodb.DBCollection;
+import com.mongodb.DBCursor;
+import com.mongodb.DBObject;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.spi.spring.container.servlet.SpringServlet;
+import com.sun.jersey.test.framework.AppDescriptor;
+import com.sun.jersey.test.framework.JerseyTest;
+import com.sun.jersey.test.framework.WebAppDescriptor;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration("rest-context.xml")
+public class ProjectRestTest extends JerseyTest {
+	
+	private Logger logger = LoggerFactory.getLogger(ProjectRestTest.class);
+	
+	@Autowired
+	private ProjectsRepository projectsRepository;
+	
+	@Autowired
+	private SpacesRepository spacesRepository;
+		
+	@Autowired
+	private NodesRepository nodesRepository;
+	
+	@Autowired
+	private EdgesRepository edgesRepository;
+	
+	@Autowired
+	private ProjectRevisionsRepository projectRevisionsRepository;
+	
+	@Autowired
+	private MongoTemplate mongoTemplate;
+	
+	private Project testProject;
+	private List<Node> testNodes = new ArrayList<Node>();
+	private List<Edge> testEdges = new ArrayList<>();
+	
+	private Date creationDate = new Date();
+	
+	private String spaceId = UUID.randomUUID().toString(); 
+		
+	public ProjectRestTest() {
+	}
+	
+	@Override
+	protected AppDescriptor configure() {
+		return new WebAppDescriptor.Builder("org.iri_research.renkan.rest")
+			.contextPath("rest")
+			.contextParam("contextConfigLocation", "classpath:/org/iri_research/renkan/test/rest/rest-context.xml")
+			.initParam("com.sun.jersey.config.property.packages", "org.iri_research.renkan.rest;com.fasterxml.jackson.jaxrs")
+			.servletClass(SpringServlet.class)
+			.contextListenerClass(ContextLoaderListener.class)
+			.build();
+	};
+	
+	@Before
+	public void setup() {
+
+		logger.debug("Setup");
+		Space testSpace = new Space(this.spaceId, "test space", "Test space", null, null, null, "test_user", null, this.creationDate);
+		testSpace = spacesRepository.save(testSpace);
+		testProject = new Project(testSpace.getId(), UUID.randomUUID().toString(), "test", "desc", "http://localhost:8080/rest/projects/id", this.creationDate);
+		
+		for(int i=0;i<3;i++) {
+			Node node = new Node("Node"+i, "Node"+i, "Node "+i, "http://renkan.org/nodes/node"+i, "#ffff0"+i, "test_user", new Point(0, i), "http://renkan.org/images/node"+i, i, testProject.getId());
+			node = this.nodesRepository.save(node);
+			testProject.getNodes().add(node);
+			this.testNodes.add(node);
+		}
+		
+		for(int i=0;i<3;i++) {
+			Edge edge = new Edge("Node"+i, "Node"+i, "Node "+i, "http://renkan.org/edges/edge"+i, "#ffff0"+i, this.testNodes.get((i+2)%3), this.testNodes.get(i), "test_user", testProject.getId());
+			edge = this.edgesRepository.save(edge);
+			testProject.getEdges().add(edge);
+			this.testEdges.add(edge);
+		}
+		
+		this.projectsRepository.save(testProject);
+
+	}
+	
+	@After
+	public void teardown() {
+		logger.debug("Teardown");
+		edgesRepository.deleteAll();
+		nodesRepository.deleteAll();
+		projectRevisionsRepository.deleteAll();
+		projectsRepository.deleteAll();
+		spacesRepository.deleteAll();
+	}
+	
+	
+	@Test
+	public void testDeleteProject() {
+
+		List<Node> nodes= testProject.getNodes();
+		List<Edge> edges= testProject.getEdges();
+		
+		WebResource webResource = this.resource();
+		String respString = webResource.path("projects").path(testProject.getId()).delete(String.class);
+		
+		Assert.assertTrue("Response text must contain deleted", respString.contains("deleted"));
+		Assert.assertTrue("Response text must contain id", respString.contains(this.testProject.getId()));
+		
+		DBObject filter = new BasicDBObject();
+		filter.put("_id", testProject.getId());
+		
+		DBCollection coll = mongoTemplate.getCollection(mongoTemplate.getCollectionName(Project.class));
+		DBCursor resFind = coll.find(filter);
+		
+		Assert.assertEquals("The project must not be found", 0, resFind.count());
+		
+		filter = new BasicDBObject();
+		filter.put("project_id", testProject.getId());
+		
+		DBCollection nodesColl = mongoTemplate.getCollection(mongoTemplate.getCollectionName(Node.class));
+		resFind = nodesColl.find(filter);
+		
+		Assert.assertEquals("no nodes left", 0, resFind.count());
+		
+		for(Node n: nodes) {
+			DBObject nobj = nodesColl.findOne(n.getId());
+			Assert.assertNull("node should be deleted", nobj);
+		}
+
+		
+		DBCollection edgesColl = mongoTemplate.getCollection(mongoTemplate.getCollectionName(Edge.class));
+		resFind = edgesColl.find(filter);
+		
+		Assert.assertEquals("no edges left", 0, resFind.count());
+		
+		for(Edge e: edges) {
+			DBObject eobj = edgesColl.findOne(e.getId());
+			Assert.assertNull("edge should be deleted", eobj);
+		}
+		
+	}
+
+
+}
--- a/server/src/test/java/org/iri_research/renkan/test/rest/SpaceRestTest.java	Sat Mar 16 04:37:05 2013 +0100
+++ b/server/src/test/java/org/iri_research/renkan/test/rest/SpaceRestTest.java	Sun Mar 17 02:24:56 2013 +0100
@@ -81,7 +81,7 @@
 	
 	@After
 	public void teardown() {
-		//spacesRepository.deleteAll();
+		spacesRepository.deleteAll();
 	}