pyceo/tests/ceod/model/test_user.py

150 lines
4.3 KiB
Python

import os
import subprocess
import pytest
from ceo_common.errors import UserNotFoundError, UserAlreadyExistsError
from ceod.model import User
def test_user_add_to_ldap(cfg, ldap_srv, simple_user, g_admin):
user = simple_user
min_id = cfg.get('members_min_id')
user.add_to_ldap()
retrieved_user = ldap_srv.get_user(user.uid)
assert retrieved_user.uid == user.uid
assert retrieved_user.uid_number >= min_id
with pytest.raises(UserAlreadyExistsError):
user.add_to_ldap()
user.remove_from_ldap()
with pytest.raises(UserNotFoundError):
ldap_srv.get_user(user.uid)
def test_club_add_to_ldap(cfg, ldap_srv, simple_club, g_admin):
club = simple_club
min_id = cfg.get('clubs_min_id')
club.add_to_ldap()
retrieved_club = ldap_srv.get_user(club.uid)
assert retrieved_club.uid_number >= min_id
club.remove_from_ldap()
def getprinc(username, admin_principal, should_exist=True):
proc = subprocess.run([
'kadmin', '-k', '-p', admin_principal,
'getprinc', username,
], capture_output=True)
if should_exist:
assert proc.returncode == 0
else:
assert proc.returncode != 0
def test_user_add_to_kerberos(cfg, simple_user):
user = simple_user
admin_principal = cfg.get('ldap_admin_principal')
user.add_to_kerberos('krb5')
getprinc(user.uid, admin_principal, True)
user.remove_from_kerberos()
getprinc(user.uid, admin_principal, False)
def test_user_forwarding_addresses(cfg, ldap_user):
user = ldap_user
user.create_home_dir()
assert os.path.isdir(user.home_directory)
assert os.path.isfile(os.path.join(user.home_directory, '.bashrc'))
assert user.get_forwarding_addresses() == []
user.set_forwarding_addresses(['jdoe@example.com'])
assert user.get_forwarding_addresses() == ['jdoe@example.com']
assert open(os.path.join(user.home_directory, '.forward')).read() \
== 'jdoe@example.com\n'
user.set_forwarding_addresses([])
assert user.get_forwarding_addresses() == []
assert open(os.path.join(user.home_directory, '.forward')).read() == ''
user.delete_home_dir()
assert not os.path.isdir(user.home_directory)
def test_user_terms(ldap_user, ldap_srv, g_admin):
user = ldap_user
user.add_terms(['f2021'])
assert user.terms == ['s2021', 'f2021']
assert ldap_srv.get_user(user.uid).terms == user.terms
user.add_non_member_terms(['w2022', 's2022'])
assert user.non_member_terms == ['w2022', 's2022']
assert ldap_srv.get_user(user.uid).non_member_terms == user.non_member_terms
def test_user_positions(ldap_user, ldap_srv, g_admin):
user = ldap_user
user.add_position('treasurer')
assert user.positions == ['treasurer']
assert ldap_srv.get_user(user.uid).positions == user.positions
user.add_position('cro')
assert user.positions == ['treasurer', 'cro']
assert ldap_srv.get_user(user.uid).positions == user.positions
user.remove_position('cro')
assert user.positions == ['treasurer']
assert ldap_srv.get_user(user.uid).positions == user.positions
def test_user_change_password(krb_user):
user = krb_user
# TODO: test the password with kinit or similar
user.change_password('new_password')
def test_login_shell(ldap_user, ldap_srv, g_admin):
user = ldap_user
user.replace_login_shell('/bin/sh')
assert user.login_shell == '/bin/sh'
assert ldap_srv.get_user(user.uid).login_shell == user.login_shell
def test_user_to_dict(cfg):
user = User(
uid='test_jsmith',
cn='John Smith',
program='Math',
terms=['s2021'],
uid_number=21000,
gid_number=21000,
positions=['secretary'],
)
expected = {
'uid': user.uid,
'cn': user.cn,
'program': user.program,
'terms': user.terms,
'uid_number': user.uid_number,
'gid_number': user.gid_number,
'positions': user.positions,
'login_shell': '/bin/bash',
'home_directory': user.home_directory,
'is_club': False,
}
assert user.to_dict() == expected
user.mail_local_addresses = ['john.smith@csclub.internal']
expected['mail_local_addresses'] = user.mail_local_addresses
assert user.to_dict() == expected
user.create_home_dir()
expected['forwarding_addresses'] = []
assert user.to_dict(True) == expected