test_convert_ldap_to_db.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import json
  2. from pathlib import Path
  3. from unittest.mock import patch
  4. import pytest
  5. from ldap.convert_ldap_to_db import (
  6. get_ou_subgroups,
  7. get_subgroups,
  8. print_group_membership,
  9. read_ldap_json,
  10. read_or_create_selected_groups,
  11. set_group_member_of,
  12. )
  13. @pytest.fixture
  14. def tmp_path():
  15. return Path(__file__).parent / "temp"
  16. @pytest.fixture
  17. def sample_groups():
  18. return {
  19. "cn=group1,ou=groups,dc=example,dc=com": {
  20. "cn": "group1",
  21. "member": ["cn=group2,ou=groups,dc=example,dc=com"],
  22. },
  23. "cn=group2,ou=groups,dc=example,dc=com": {
  24. "cn": "group2",
  25. "member": ["cn=user1,ou=users,dc=example,dc=com"],
  26. },
  27. "cn=user1,ou=users,dc=example,dc=com": {"cn": "user1", "member": []},
  28. }
  29. @pytest.fixture
  30. def sample_users():
  31. return {
  32. "cn=user1,ou=users,dc=example,dc=com": {
  33. "sAMAccountName": "user1",
  34. "cn": "User One",
  35. "mail": "user1@example.com",
  36. "memberOf": ["cn=group2,ou=groups,dc=example,dc=com"],
  37. },
  38. }
  39. def test_read_ldap_json(tmp_path):
  40. json_file = tmp_path / "test.json"
  41. test_data = {
  42. "entries": [
  43. {"dn": "cn=group1,dc=example,dc=com", "attributes": {"cn": "group1"}},
  44. ]
  45. }
  46. json_file.write_text(json.dumps(test_data), encoding="latin-1")
  47. with patch("ldap.convert_ldap_to_db.base_dir", tmp_path):
  48. result = read_ldap_json("test.json")
  49. assert result == {"cn=group1,dc=example,dc=com": {"cn": "group1"}}
  50. def test_read_or_create_selected_groups_existing(tmp_path, sample_groups):
  51. json_file = tmp_path / "selected.json"
  52. selected = ["cn=group1,ou=groups,dc=example,dc=com"]
  53. json_file.write_text(json.dumps(selected), encoding="latin-1")
  54. with patch("ldap.convert_ldap_to_db.base_dir", tmp_path):
  55. result = read_or_create_selected_groups("selected.json", sample_groups)
  56. assert result == selected
  57. def test_read_or_create_selected_groups_create_new(tmp_path, sample_groups):
  58. with patch("ldap.convert_ldap_to_db.base_dir", tmp_path):
  59. result = read_or_create_selected_groups("new_selected.json", sample_groups)
  60. assert "cn=group1,ou=groups,dc=example,dc=com" in result
  61. assert "cn=group2,ou=groups,dc=example,dc=com" in result
  62. def test_get_subgroups(sample_groups):
  63. sel_groups = ["cn=group1,ou=groups,dc=example,dc=com"]
  64. result = get_subgroups(sample_groups, sel_groups)
  65. assert "cn=group1,ou=groups,dc=example,dc=com" in result
  66. assert "cn=group2,ou=groups,dc=example,dc=com" in result
  67. def test_get_subgroups_missing_group(sample_groups):
  68. sel_groups = ["cn=nonexistent,ou=groups,dc=example,dc=com"]
  69. result = get_subgroups(sample_groups, sel_groups)
  70. assert result == []
  71. def test_set_group_member_of(sample_groups):
  72. sel_groups = ["cn=group1,ou=groups,dc=example,dc=com"]
  73. set_group_member_of(sample_groups, sel_groups)
  74. assert sample_groups["cn=group1,ou=groups,dc=example,dc=com"]["memberOf"] == []
  75. assert sample_groups["cn=group2,ou=groups,dc=example,dc=com"]["memberOf"] == [
  76. "cn=group1,ou=groups,dc=example,dc=com"
  77. ]
  78. def test_get_ou_subgroups():
  79. group_dn = "cn=group1,ou=sales,ou=departments,dc=example,dc=com"
  80. result = get_ou_subgroups(group_dn)
  81. assert "ou=sales,ou=departments,dc=example,dc=com" in result
  82. assert "ou=departments,dc=example,dc=com" in result
  83. def test_get_ou_subgroups_no_ou():
  84. group_dn = "cn=group1,dc=example,dc=com"
  85. result = get_ou_subgroups(group_dn)
  86. assert result == []
  87. def test_print_group_membership(capsys, sample_groups):
  88. sel_groups = ["cn=group1,ou=groups,dc=example,dc=com"]
  89. print_group_membership(sample_groups, sel_groups)
  90. captured = capsys.readouterr()
  91. assert "group1" in captured.out or "cn=group1" in captured.out