示例#1
0
    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
示例#2
0
    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
示例#3
0
    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
示例#4
0
    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
示例#5
0
    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
示例#6
0
    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
示例#7
0
 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
示例#8
0
    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'
示例#9
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
示例#10
0
    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
示例#11
0
    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')