def test_mass_delete(self): g1 = Group(name="g1", project_id=self.project1._id) g1.save() g2 = Group(name="g2", project_id=self.project1._id) g2.save() g3 = Group(name="g3", project_id=self.project1._id) g3.save() g4 = Group(name="g4", project_id=self.project1._id) g4.save() g1.add_child(g2) g2.add_child(g3) g3.add_child(g4) group_ids = [str(g2._id), str(g3._id)] r = self.post_json("/api/v1/groups/mass_delete", {"group_ids": group_ids}) self.assertEqual(200, r.status_code) deleted_groups = Group.find({"_id": {"$in": [g2._id, g3._id]}}) self.assertEqual(0, deleted_groups.count()) g1 = Group.find_one({"_id": g1._id}) self.assertEqual(0, len(g1.child_ids)) g4 = Group.find_one({"_id": g4._id}) self.assertEqual(0, len(g4.parent_ids))
group_cache[group_name] = g i += 1 if i % 1000 == 0: print i print i i = 0 print "Setting children" for group_name, group_desc in data["Groups"].items(): child_ids = [] for child in group_desc["children"]: child_ids.append(group_cache[child]._id) if len(child_ids) > 0: g = group_cache[group_name] for cid in child_ids: g.add_child(cid) i += 1 if i % 100 == 0: print i print i print "Processing datacenters" Datacenter.destroy_all() datacenter_cache = {} for datacenter_name, datacenter_desc in data["Datacenters"].items(): dc = Datacenter(name=datacenter_name, human_readable=datacenter_desc["golem_name"]) dc.save() datacenter_cache[datacenter_name] = dc print "Setting parents" for datacenter_name, datacenter_desc in data["Datacenters"].items():
def test_mass_move(self): g1 = Group(name="g1", project_id=self.project1._id) g1.save() g2 = Group(name="g2", project_id=self.project1._id) g2.save() g3 = Group(name="g3", project_id=self.project1._id) g3.save() g4 = Group(name="g4", project_id=self.project1._id) g4.save() g1.add_child(g2) g2.add_child(g3) g3.add_child(g4) # 400, no group_ids given r = self.post_json("/api/v1/groups/mass_move", {"project_id": str(self.project2._id)}) self.assertEqual(r.status_code, 400) # 400, no project_id given r = self.post_json("/api/v1/groups/mass_move", {"group_ids": [str(g2._id)]}) self.assertEqual(r.status_code, 400) # 400, invalid group_ids type r = self.post_json("/api/v1/groups/mass_move", { "project_id": str(self.project2._id), "group_ids": str(g2._id) }) self.assertEqual(r.status_code, 400) # group is already in the project - 404, no group suitable for moving found r = self.post_json("/api/v1/groups/mass_move", { "project_id": str(self.project1._id), "group_ids": [str(g2._id)] }) self.assertEqual(r.status_code, 404) # no project found r = self.post_json("/api/v1/groups/mass_move", { "project_id": str(ObjectId()), "group_ids": [str(g2._id)] }) self.assertEqual(r.status_code, 404) # real case payload = { "group_ids": [str(g2._id)], "project_id": str(self.project2._id) } r = self.post_json("/api/v1/groups/mass_move", payload) self.assertEqual(r.status_code, 200) # reload groups g1 = Group.find_one({"_id": g1._id}) g2 = Group.find_one({"_id": g2._id}) g3 = Group.find_one({"_id": g3._id}) g4 = Group.find_one({"_id": g4._id}) # group 1 should have remained in project1 self.assertEqual(g1.project_id, self.project1._id) # groups 2, 3, 4 should have been moved to project2 self.assertEqual(g2.project_id, self.project2._id) self.assertEqual(g3.project_id, self.project2._id) self.assertEqual(g4.project_id, self.project2._id) # group 2 should have been detached from g1 self.assertItemsEqual([], g2.parent_ids) self.assertItemsEqual([], g1.child_ids) # groups 3, 4 should have kept its' parents self.assertItemsEqual([g2._id], g3.parent_ids) self.assertItemsEqual([g3._id], g4.parent_ids)