| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- import json
- from pathlib import Path
- from unittest.mock import patch
- import pytest
- from ldap.convert_ldap_to_db import (
- get_ou_subgroups,
- get_subgroups,
- print_group_membership,
- read_ldap_json,
- read_or_create_selected_groups,
- set_group_member_of,
- )
- @pytest.fixture
- def tmp_path():
- return Path(__file__).parent / "temp"
- @pytest.fixture
- def sample_groups():
- return {
- "cn=group1,ou=groups,dc=example,dc=com": {
- "cn": "group1",
- "member": ["cn=group2,ou=groups,dc=example,dc=com"],
- },
- "cn=group2,ou=groups,dc=example,dc=com": {
- "cn": "group2",
- "member": ["cn=user1,ou=users,dc=example,dc=com"],
- },
- "cn=user1,ou=users,dc=example,dc=com": {"cn": "user1", "member": []},
- }
- @pytest.fixture
- def sample_users():
- return {
- "cn=user1,ou=users,dc=example,dc=com": {
- "sAMAccountName": "user1",
- "cn": "User One",
- "mail": "user1@example.com",
- "memberOf": ["cn=group2,ou=groups,dc=example,dc=com"],
- },
- }
- def test_read_ldap_json(tmp_path):
- json_file = tmp_path / "test.json"
- test_data = {
- "entries": [
- {"dn": "cn=group1,dc=example,dc=com", "attributes": {"cn": "group1"}},
- ]
- }
- json_file.write_text(json.dumps(test_data), encoding="latin-1")
- with patch("ldap.convert_ldap_to_db.base_dir", tmp_path):
- result = read_ldap_json("test.json")
- assert result == {"cn=group1,dc=example,dc=com": {"cn": "group1"}}
- def test_read_or_create_selected_groups_existing(tmp_path, sample_groups):
- json_file = tmp_path / "selected.json"
- selected = ["cn=group1,ou=groups,dc=example,dc=com"]
- json_file.write_text(json.dumps(selected), encoding="latin-1")
- with patch("ldap.convert_ldap_to_db.base_dir", tmp_path):
- result = read_or_create_selected_groups("selected.json", sample_groups)
- assert result == selected
- def test_read_or_create_selected_groups_create_new(tmp_path, sample_groups):
- with patch("ldap.convert_ldap_to_db.base_dir", tmp_path):
- result = read_or_create_selected_groups("new_selected.json", sample_groups)
- assert "cn=group1,ou=groups,dc=example,dc=com" in result
- assert "cn=group2,ou=groups,dc=example,dc=com" in result
- def test_get_subgroups(sample_groups):
- sel_groups = ["cn=group1,ou=groups,dc=example,dc=com"]
- result = get_subgroups(sample_groups, sel_groups)
- assert "cn=group1,ou=groups,dc=example,dc=com" in result
- assert "cn=group2,ou=groups,dc=example,dc=com" in result
- def test_get_subgroups_missing_group(sample_groups):
- sel_groups = ["cn=nonexistent,ou=groups,dc=example,dc=com"]
- result = get_subgroups(sample_groups, sel_groups)
- assert result == []
- def test_set_group_member_of(sample_groups):
- sel_groups = ["cn=group1,ou=groups,dc=example,dc=com"]
- set_group_member_of(sample_groups, sel_groups)
- assert sample_groups["cn=group1,ou=groups,dc=example,dc=com"]["memberOf"] == []
- assert sample_groups["cn=group2,ou=groups,dc=example,dc=com"]["memberOf"] == [
- "cn=group1,ou=groups,dc=example,dc=com"
- ]
- def test_get_ou_subgroups():
- group_dn = "cn=group1,ou=sales,ou=departments,dc=example,dc=com"
- result = get_ou_subgroups(group_dn)
- assert "ou=sales,ou=departments,dc=example,dc=com" in result
- assert "ou=departments,dc=example,dc=com" in result
- def test_get_ou_subgroups_no_ou():
- group_dn = "cn=group1,dc=example,dc=com"
- result = get_ou_subgroups(group_dn)
- assert result == []
- def test_print_group_membership(capsys, sample_groups):
- sel_groups = ["cn=group1,ou=groups,dc=example,dc=com"]
- print_group_membership(sample_groups, sel_groups)
- captured = capsys.readouterr()
- assert "group1" in captured.out or "cn=group1" in captured.out
|