def test_delete_group(self):
     self.test_create_group()
     group = Group.find_one({"name": "group1"})
     r = self.delete("/api/v1/groups/%s" % group._id)
     self.assertEqual(r.status_code, 200)
     data = json.loads(r.data)
     self.assertIn("data", data)
     group_data = data["data"]
     self.assertEqual(group_data["_id"], None)
     group = Group.find_one({"_id": group._id})
     self.assertIsNone(group)
 def test_mass_delete(self):
     from app.models import Group
     g1 = Group(name="g1", project_id=self.project1._id)
     g1.save()
     h1 = Host(fqdn="host1", group_id=g1._id)
     h1.save()
     h2 = Host(fqdn="host2", group_id=g1._id)
     h2.save()
     h3 = Host(fqdn="host3", group_id=g1._id)
     h3.save()
     h4 = Host(fqdn="host4", group_id=g1._id)
     h4.save()
     r = self.post_json("/api/v1/hosts/mass_delete",
                        {"host_ids": [str(h2._id), str(h3._id)]})
     self.assertEqual(200, r.status_code)
     data = json.loads(r.data)
     self.assertIn("data", data)
     hosts_data = data["data"]
     self.assertIn("hosts", hosts_data)
     hosts_data = hosts_data["hosts"]
     self.assertIs(list, type(hosts_data))
     self.assertEqual(2, len(hosts_data))
     deleted_hosts = Host.find({"_id": {"$in": [h2._id, h3._id]}})
     self.assertEqual(0, deleted_hosts.count())
     g1 = Group.find_one({"_id": g1._id})
     self.assertItemsEqual([h1._id, h4._id], g1.host_ids)
Beispiel #3
0
def _get_group_by_id(group_id):
    from app.models import Group
    group_id = resolve_id(group_id)
    return Group.find_one({
        "$or": [
            { "_id": group_id },
            { "name": group_id }
        ]
    })
 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))
 def test_update_group(self):
     self.test_create_group()
     group = Group.find_one({"name": "group1"})
     payload = {
         "tags": ["support", "sre", "swe"],
         "name": "group2",
         "description": "my mega description"
     }
     r = self.put_json("/api/v1/groups/%s" % group._id, payload)
     self.assertEqual(r.status_code, 200)
     data = json.loads(r.data)
     self.assertIn("data", data)
     group = data["data"]
     self.assertEqual(group["name"], payload["name"])
     self.assertEqual(group["description"], payload["description"])
     self.assertItemsEqual(group["tags"], payload["tags"])
    def test_set_children(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()

        child_ids = [str(x._id) for x in (g2, g3, g4)]
        payload = {"child_ids": child_ids}

        r = self.put_json("/api/v1/groups/%s/set_children" % g1._id, payload)
        self.assertEqual(r.status_code, 200)
        data = json.loads(r.data)
        self.assertIn("data", data)
        group_data = data["data"]
        self.assertEqual(group_data["_id"], str(g1._id))
        self.assertItemsEqual(group_data["child_ids"], child_ids)
        g1 = Group.find_one({"_id": g1._id})
        self.assertItemsEqual([str(x) for x in g1.child_ids], child_ids)
    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)