@ -238,8 +238,26 @@ def test_authz_check(client, create_user_result):
@pytest . mark . parametrize ( ' term_attr ' , [ ' terms ' , ' non_member_terms ' ] )
def test_expire ( client , new_user_gen , term_attr ) :
start_of_current_term = Term . current ( ) . to_datetime ( )
def test_expire ( client , new_user , term_attr , syscom_group , ldap_conn ) :
assert new_user . shadowExpire is None
current_term = Term . current ( )
start_of_current_term = current_term . to_datetime ( )
def reset_terms ( ) :
if term_attr == ' terms ' :
attr = ' term '
else :
attr = ' nonMemberTerm '
changes = {
attr : [ ( ldap3 . MODIFY_REPLACE , [ str ( current_term ) ] ) ]
}
dn = new_user . ldap_srv . uid_to_dn ( new_user . uid )
ldap_conn . modify ( dn , changes )
if term_attr == ' terms ' :
new_user . terms = [ str ( current_term ) ]
else :
new_user . non_member_terms = [ str ( current_term ) ]
# test_date, should_expire
test_cases = [
# same term, membership is still valid
@ -251,16 +269,13 @@ def test_expire(client, new_user_gen, term_attr):
# next next term, membership is definitely invalid
( start_of_current_term + datetime . timedelta ( days = 250 ) , True ) ,
]
uid = new_user . uid
for test_date , should_expire in test_cases :
with new_user_gen ( ) as user_obj , \
patch . object ( ceo_common . utils , ' get_current_datetime ' ) as datetime_mock :
user = user_obj . to_dict ( )
uid = user [ ' uid ' ]
with patch . object ( ceo_common . utils , ' get_current_datetime ' ) as datetime_mock :
user = new_user . to_dict ( )
datetime_mock . return_value = test_date
assert user [ ' shadowExpire ' ] is None
status , data = client . post ( ' /api/members/expire?dry_run=yes ' )
assert status == 200
assert ( data == [ uid ] ) == should_expire
@ -284,3 +299,25 @@ def test_expire(client, new_user_gen, term_attr):
_ , user = client . get ( f ' /api/members/ { uid } ' )
assert user [ ' shadowExpire ' ] is None
reset_terms ( )
@pytest . mark . parametrize ( ' in_syscom ' , [ True , False ] )
def test_expire_syscom_member ( client , new_user , syscom_group , g_admin_ctx , ldap_conn , in_syscom ) :
uid = new_user . uid
start_of_current_term = Term . current ( ) . to_datetime ( )
if in_syscom :
group_dn = new_user . ldap_srv . group_cn_to_dn ( ' syscom ' )
user_dn = new_user . ldap_srv . uid_to_dn ( uid )
changes = {
' uniqueMember ' : [ ( ldap3 . MODIFY_ADD , [ user_dn ] ) ]
}
ldap_conn . modify ( group_dn , changes )
with patch . object ( ceo_common . utils , ' get_current_datetime ' ) as datetime_mock :
datetime_mock . return_value = start_of_current_term + datetime . timedelta ( days = 160 )
status , data = client . post ( ' /api/members/expire ' )
assert status == 200
if in_syscom :
assert data == [ ]
else :
assert data == [ uid ]