pki_ca/tests/test_group.py

90 lines
3.5 KiB
Python

import unittest
import psycopg
from psycopg.rows import dict_row
from ca_core import entity, group_member # <-- your code package
class TestGroupMember(unittest.TestCase):
"""Unit tests for group_member functionality including cascade deletions."""
def setUp(self):
self.conn = psycopg.connect("dbname=ca")
self.conn.autocommit = False
self.cur = self.conn.cursor(row_factory=dict_row)
# Create a creator
self.creator_id = entity.insert_creator(self.cur, "Alice", "pubkeyA")
# Create two persons
self.person1_id = entity.enroll_person(self.cur, "Bob", "pubkeyB", self.creator_id)
self.person2_id = entity.enroll_person(self.cur, "Charlie", "pubkeyC", self.creator_id)
# Create a group
self.group_id = entity.create_group(self.cur, "Admins", "gpub", self.creator_id)
def tearDown(self):
self.conn.rollback()
self.cur.close()
self.conn.close()
# -------------------------
# Add / remove members
# -------------------------
def test_add_member(self):
group_member.add_group_member(self.cur, self.group_id, self.person1_id, "member")
members = group_member.get_members_of_group(self.cur, self.group_id)
self.assertEqual(len(members), 1)
self.assertEqual(members[0]["person_id"], self.person1_id)
self.assertEqual(members[0]["role"], "member")
def test_remove_member(self):
group_member.add_group_member(self.cur, self.group_id, self.person1_id, "member")
group_member.remove_group_member(self.cur, self.group_id, self.person1_id)
members = group_member.get_members_of_group(self.cur, self.group_id)
self.assertEqual(len(members), 0)
def test_get_groups_for_person(self):
group_member.add_group_member(self.cur, self.group_id, self.person1_id, "admin")
group_member.add_group_member(self.cur, self.group_id, self.person2_id, "member")
groups = group_member.get_groups_for_person(self.cur, self.person2_id)
self.assertEqual(len(groups), 1)
self.assertEqual(groups[0]["group_id"], self.group_id)
self.assertEqual(groups[0]["role"], "member")
# -------------------------
# Cascade deletion tests
# -------------------------
def test_cascade_delete_person(self):
group_member.add_group_member(self.cur, self.group_id, self.person1_id, "admin")
group_member.add_group_member(self.cur, self.group_id, self.person2_id, "member")
# Delete person1
entity.delete_person(self.cur, self.person1_id, self.creator_id)
# Membership should be gone for person1
members = group_member.get_members_of_group(self.cur, self.group_id)
self.assertEqual(len(members), 1)
self.assertEqual(members[0]["person_id"], self.person2_id)
def test_cascade_delete_group(self):
group_member.add_group_member(self.cur, self.group_id, self.person1_id, "admin")
group_member.add_group_member(self.cur, self.group_id, self.person2_id, "member")
# Delete the group
entity.delete_group(self.cur, self.group_id, self.creator_id)
# Persons should have no group membership
groups_person1 = group_member.get_groups_for_person(self.cur, self.person1_id)
groups_person2 = group_member.get_groups_for_person(self.cur, self.person2_id)
self.assertEqual(len(groups_person1), 0)
self.assertEqual(len(groups_person2), 0)
if __name__ == "__main__":
unittest.main()