def test_allows_advisor_to_change_departments(self): """Updates membership for a former CoE advisor who switches to L&S.""" user = AuthorizedUser.find_by_uid('242881') dept_coe = UniversityDept.query.filter_by(dept_code='COENG').first() UniversityDeptMember.create_or_update_membership( dept_coe.id, user.id, role='advisor', ) dept_ucls = UniversityDept.query.filter_by( dept_code='QCADVMAJ').first() UniversityDeptMember.delete_membership(dept_ucls.id, user.id) std_commit(allow_test_environment=True) ucls_users = [au.authorized_user for au in dept_ucls.authorized_users] assert len(ucls_users) == 2 from boac.api.cache_utils import refresh_department_memberships refresh_department_memberships() std_commit(allow_test_environment=True) ucls_users = [au.authorized_user for au in dept_ucls.authorized_users] assert len(ucls_users) == 3 assert next(u for u in ucls_users if u.uid == '242881') updated_user = AuthorizedUser.query.filter_by(uid='242881').first() assert updated_user.deleted_at is None assert updated_user.created_by == '0' assert updated_user.department_memberships[ 0].university_dept_id == dept_ucls.id
def test_deletes_drop_in_advisor_orphans(self): """Cleans up drop-in advisor record for a department membership that no longer exists.""" from boac.models.authorized_user_extension import DropInAdvisor dept_ucls = UniversityDept.query.filter_by( dept_code='QCADVMAJ').first() bad_user = AuthorizedUser.create_or_restore(uid='666', created_by='2040') UniversityDeptMember.create_or_update_membership( dept_ucls.id, bad_user.id, role='advisor', ) DropInAdvisor.create_or_update_membership(dept_ucls.dept_code, bad_user.id) std_commit(allow_test_environment=True) ucls_drop_in_advisors = DropInAdvisor.advisors_for_dept_code( dept_ucls.dept_code) assert len(ucls_drop_in_advisors) == 2 assert bad_user.id in [ d.authorized_user_id for d in ucls_drop_in_advisors ] from boac.api.cache_utils import refresh_department_memberships refresh_department_memberships() std_commit(allow_test_environment=True) ucls_drop_in_advisors = DropInAdvisor.advisors_for_dept_code( dept_ucls.dept_code) assert len(ucls_drop_in_advisors) == 1
def test_removes_coe_advisors(self, app): """Removes COE advisors not found in the loch.""" dept_coe = UniversityDept.query.filter_by(dept_code='COENG').first() bad_user = AuthorizedUser.create_or_restore(uid='666', created_by='2040') UniversityDeptMember.create_or_update_membership( dept_coe.id, bad_user.id, role='advisor', ) std_commit(allow_test_environment=True) coe_users = [au.authorized_user for au in dept_coe.authorized_users] coe_user_count = len(coe_users) assert coe_user_count assert next(u for u in coe_users if u.uid == '666') assert AuthorizedUser.query.filter_by( uid='666').first().deleted_at is None from boac.api.cache_utils import refresh_department_memberships refresh_department_memberships() std_commit(allow_test_environment=True) coe_users = [au.authorized_user for au in dept_coe.authorized_users] assert len(coe_users) == coe_user_count - 1 assert next((u for u in coe_users if u.uid == '666'), None) is None assert AuthorizedUser.query.filter_by(uid='666').first().deleted_at
def test_restores_coe_advisors(self, app): """Restores previously deleted COE advisors found in the loch.""" deleted_user = AuthorizedUser.delete(uid=coe_advisor_uid) UniversityDeptMember.query.filter_by( authorized_user_id=deleted_user.id).delete() std_commit(allow_test_environment=True) dept_coe = UniversityDept.find_by_dept_code(dept_code='COENG') coe_users = [au.authorized_user for au in dept_coe.authorized_users] coe_user_count = len(coe_users) assert coe_user_count assert next( (u for u in coe_users if u.uid == coe_advisor_uid), None) is None from boac.api.cache_utils import refresh_department_memberships refresh_department_memberships() std_commit(allow_test_environment=True) coe_users = [au.authorized_user for au in dept_coe.authorized_users] assert len(coe_users) == coe_user_count + 1 assert next(u for u in coe_users if u.uid == coe_advisor_uid) user = AuthorizedUser.find_by_uid(uid=coe_advisor_uid, ignore_deleted=False) assert user.can_access_canvas_data is False assert user.can_access_advising_data is False # And degree_progress_permission persists assert user.degree_progress_permission == 'read_write' assert user.deleted_at is None assert user.created_by == '0' assert user.department_memberships[0].automate_membership is True
def test_adds_coe_advisors(self, app): """Adds COE advisors newly found in the loch.""" # Note: You will not find this UID in development_db (test data setup). It is seeded in loch.sql test data. coe_uid = '1234567' if AuthorizedUser.find_by_uid(coe_uid): AuthorizedUser.query.filter_by(uid=coe_uid).delete() std_commit(allow_test_environment=True) dept_coe = UniversityDept.query.filter_by(dept_code='COENG').first() coe_users = [au.authorized_user for au in dept_coe.authorized_users] assert len(coe_users) assert next((u for u in coe_users if u.uid == coe_uid), None) is None from boac.api.cache_utils import refresh_department_memberships refresh_department_memberships() std_commit(allow_test_environment=True) coe_users = [au.authorized_user for au in dept_coe.authorized_users] assert next((u for u in coe_users if u.uid == coe_uid), None) user = AuthorizedUser.query.filter_by(uid=coe_uid).first() assert user.can_access_canvas_data is False assert user.can_access_advising_data is False assert user.degree_progress_permission == 'read' assert user.deleted_at is None assert user.created_by == '0' assert user.department_memberships[0].automate_membership is True
def test_respects_automate_memberships_flag(self, app, db): dept_coe = UniversityDept.query.filter_by(dept_code='COENG').first() manually_added_user = AuthorizedUser.create_or_restore( uid='1024', created_by='2040') manual_membership = UniversityDeptMember.create_or_update_membership( dept_coe, manually_added_user, is_advisor=True, is_director=False, is_scheduler=False, automate_membership=False, ) from boac.api.cache_utils import refresh_department_memberships refresh_department_memberships() std_commit(allow_test_environment=True) coe_users = [au.authorized_user for au in dept_coe.authorized_users] assert len(coe_users) == 6 assert next(u for u in coe_users if u.uid == '1024') assert AuthorizedUser.query.filter_by( uid='1024').first().deleted_at is None manual_membership.automate_membership = True db.session.add(manual_membership) std_commit(allow_test_environment=True) refresh_department_memberships() std_commit(allow_test_environment=True) coe_users = [au.authorized_user for au in dept_coe.authorized_users] assert len(coe_users) == 5 assert next((u for u in coe_users if u.uid == '1024'), None) is None assert AuthorizedUser.query.filter_by(uid='1024').first().deleted_at
def test_adds_non_advisors_to_other_group(self, app): dept_other = UniversityDept.query.filter_by(dept_code='ZZZZZ').first() from boac.api.cache_utils import refresh_department_memberships refresh_department_memberships() std_commit(allow_test_environment=True) other_users = [ au.authorized_user for au in dept_other.authorized_users ] assert len(other_users) == 1 assert other_users[0].can_access_canvas_data is False
def test_replaces_non_automated_user_with_automated_user(self, app, db): authorized_user_id = AuthorizedUser.query.filter_by( uid='1133397').first().id memberships = UniversityDeptMember.query.filter_by( authorized_user_id=authorized_user_id).all() assert len(memberships) == 1 memberships[0].automate_membership = False memberships[0].authorized_user.created_by = '2040' std_commit(allow_test_environment=True) from boac.api.cache_utils import refresh_department_memberships refresh_department_memberships() std_commit(allow_test_environment=True) memberships = UniversityDeptMember.query.filter_by( authorized_user_id=authorized_user_id).all() assert len(memberships) == 1 assert memberships[0].automate_membership is True assert memberships[0].authorized_user.created_by == '0'
def test_adds_l_s_advisors(self, app): """Adds L&S minor advisors who have no other affiliations to the correct dept.""" AuthorizedUser.query.filter_by(uid='1133397').delete() std_commit(allow_test_environment=True) dept_ucls = UniversityDept.query.filter_by( dept_code='QCADVMAJ').first() ucls_users = [au.authorized_user for au in dept_ucls.authorized_users] assert len(ucls_users) == 2 assert next( (u for u in ucls_users if u.uid == '1133397'), None) is None from boac.api.cache_utils import refresh_department_memberships refresh_department_memberships() std_commit(allow_test_environment=True) ucls_users = [au.authorized_user for au in dept_ucls.authorized_users] assert len(ucls_users) == 3 assert next(u for u in ucls_users if u.uid == '1133397') assert AuthorizedUser.query.filter_by( uid='1133397').first().deleted_at is None
def test_adds_coe_advisors(self, app): """Adds COE advisors newly found in the loch.""" AuthorizedUser.query.filter_by(uid='1022796').delete() std_commit(allow_test_environment=True) dept_coe = UniversityDept.query.filter_by(dept_code='COENG').first() coe_users = [au.authorized_user for au in dept_coe.authorized_users] assert len(coe_users) == 4 assert next((u for u in coe_users if u.uid == '1022796'), None) is None from boac.api.cache_utils import refresh_department_memberships refresh_department_memberships() std_commit(allow_test_environment=True) coe_users = [au.authorized_user for au in dept_coe.authorized_users] assert len(coe_users) == 5 assert next(u for u in coe_users if u.uid == '1022796') user = AuthorizedUser.query.filter_by(uid='1022796').first() assert user.deleted_at is None assert user.created_by == '0' assert user.department_memberships[0].automate_membership is True
def test_respects_automate_memberships_flag(self, app, db): dept_coe = UniversityDept.query.filter_by(dept_code='COENG').first() manually_added_user = AuthorizedUser.create_or_restore( uid='1024', created_by='2040', degree_progress_permission='read_write', ) manual_membership = UniversityDeptMember.create_or_update_membership( dept_coe.id, manually_added_user.id, role='advisor', automate_membership=False, ) from boac.api.cache_utils import refresh_department_memberships refresh_department_memberships() std_commit(allow_test_environment=True) coe_users = [au.authorized_user for au in dept_coe.authorized_users] coe_user_count = len(coe_users) assert coe_user_count assert next(u for u in coe_users if u.uid == '1024') user = AuthorizedUser.find_by_uid(uid='1024') assert user assert user.degree_progress_permission == 'read_write' manual_membership.automate_membership = True db.session.add(manual_membership) std_commit(allow_test_environment=True) refresh_department_memberships() std_commit(allow_test_environment=True) coe_users = [au.authorized_user for au in dept_coe.authorized_users] assert len(coe_users) == coe_user_count - 1 assert next((u for u in coe_users if u.uid == '1024'), None) is None assert not AuthorizedUser.find_by_uid(uid='1024')