Beispiel #1
0
def test_list_agencies_limits(monkeypatch, user_constants, domain_app):
    """List agencies should limit to only the user's agencies"""
    sess = GlobalDB.db().session
    user = UserFactory()
    cgac = CGACFactory()
    frec_cgac = CGACFactory()
    frec = FRECFactory(cgac=frec_cgac)
    sub_tiers = [
        SubTierAgencyFactory(sub_tier_agency_code='0',
                             cgac=cgac,
                             frec=None,
                             is_frec=False,
                             sub_tier_agency_name="Test Subtier Agency 0"),
        SubTierAgencyFactory(sub_tier_agency_code='1',
                             cgac=frec_cgac,
                             frec=frec,
                             is_frec=True,
                             sub_tier_agency_name="Test Subtier Agency 1")
    ]
    user.affiliations = [
        UserAffiliation(cgac=cgac, frec=None, permission_type_id=2),
        UserAffiliation(cgac=None, frec=frec, permission_type_id=2)
    ]
    sess.add_all([cgac] + [frec_cgac] + [frec] + sub_tiers + [user])
    sess.commit()
    monkeypatch.setattr(domainRoutes, 'g', Mock(user=user))

    result = domain_app.get('/v1/list_agencies/').data.decode('UTF-8')
    res = json.loads(result)
    assert len(res['cgac_agency_list']) == 1
    assert len(res['frec_agency_list']) == 1
    assert res['cgac_agency_list'][0]['agency_name'] == cgac.agency_name
    assert res['cgac_agency_list'][0]['cgac_code'] == cgac.cgac_code
    assert res['frec_agency_list'][0]['agency_name'] == frec.agency_name
    assert res['frec_agency_list'][0]['frec_code'] == frec.frec_code
def test_list_submission_users_frec_affil(database):
    """ Test listing users based on frec affiliations """
    cgacs = [CGACFactory(cgac_code='000'), CGACFactory(cgac_code='111')]
    frecs = [FRECFactory(frec_code='0000', cgac=cgacs[0]), FRECFactory(frec_code='1111', cgac=cgacs[1])]
    first_user = UserFactory.with_cgacs(cgacs[0], name='Test User 1')
    other_user = UserFactory.with_cgacs(cgacs[1], name='Test User')
    third_user = UserFactory(name='Frec User')
    third_user.affiliations = [UserAffiliation(frec=frecs[0], user_id=third_user.user_id,
                                               permission_type_id=PERMISSION_TYPE_DICT['reader'])]
    database.session.add_all(cgacs + frecs + [first_user, other_user])
    database.session.commit()

    sub_1 = SubmissionFactory(frec_code=frecs[0].frec_code, user_id=first_user.user_id, d2_submission=False)
    sub_2 = SubmissionFactory(cgac_code=cgacs[1].cgac_code, user_id=other_user.user_id, d2_submission=False)
    sub_3 = SubmissionFactory(frec_code=frecs[1].frec_code, user_id=other_user.user_id, d2_submission=False)
    database.session.add_all([sub_1, sub_2, sub_3])
    database.session.commit()

    g.user = third_user
    response = list_submission_users(False)
    user_response = json.loads(response.data.decode('UTF-8'))['users']

    # List the first user because they have a submission with that frec
    assert len(user_response) == 1
    assert user_response[0]['user_id'] == first_user.user_id
    assert user_response[0]['name'] == first_user.name
def test_list_agencies_limits(domain_app, database):
    """ List agencies should limit to only the user's agencies and should not duplicate the same agency even if there
        are multiple instances of the same agency in the user permissions.
    """
    user = UserFactory()
    cgac = CGACFactory()
    frec_cgac = CGACFactory()
    frec = FRECFactory(cgac=frec_cgac)
    sub_tiers = [SubTierAgencyFactory(sub_tier_agency_code='0', cgac=cgac, frec=None, is_frec=False,
                                      sub_tier_agency_name="Test Subtier Agency 0"),
                 SubTierAgencyFactory(sub_tier_agency_code='1', cgac=frec_cgac, frec=frec, is_frec=True,
                                      sub_tier_agency_name="Test Subtier Agency 1")]
    user.affiliations = [UserAffiliation(cgac=cgac, frec=None, permission_type_id=PERMISSION_SHORT_DICT['w']),
                         UserAffiliation(cgac=cgac, frec=None, permission_type_id=PERMISSION_SHORT_DICT['f']),
                         UserAffiliation(cgac=None, frec=frec, permission_type_id=PERMISSION_SHORT_DICT['w']),
                         UserAffiliation(cgac=None, frec=frec, permission_type_id=PERMISSION_SHORT_DICT['f'])]
    database.session.add_all([cgac] + [frec_cgac] + [frec] + sub_tiers + [user])
    database.session.commit()

    g.user = user
    result = domain_app.get('/v1/list_agencies/').data.decode('UTF-8')
    res = json.loads(result)
    assert len(res['cgac_agency_list']) == 1
    assert len(res['frec_agency_list']) == 1
    assert res['cgac_agency_list'][0]['agency_name'] == cgac.agency_name
    assert res['cgac_agency_list'][0]['cgac_code'] == cgac.cgac_code
    assert res['frec_agency_list'][0]['agency_name'] == frec.agency_name
    assert res['frec_agency_list'][0]['frec_code'] == frec.frec_code
Beispiel #4
0
def test_list_submission_users_frec_affil(database):
    """ Test listing users based on frec affiliations """
    cgacs = [CGACFactory(cgac_code='000'), CGACFactory(cgac_code='111')]
    frecs = [FRECFactory(frec_code='0000', cgac=cgacs[0]), FRECFactory(frec_code='1111', cgac=cgacs[1])]
    first_user = UserFactory.with_cgacs(cgacs[0], name='Test User 1', email='*****@*****.**')
    other_user = UserFactory.with_cgacs(cgacs[1], name='Test User', email='*****@*****.**')
    third_user = UserFactory(name='Frec User', email='*****@*****.**')
    third_user.affiliations = [UserAffiliation(frec=frecs[0], user_id=third_user.user_id,
                                               permission_type_id=PERMISSION_TYPE_DICT['reader'])]
    database.session.add_all(cgacs + frecs + [first_user, other_user])
    database.session.commit()

    sub_1 = SubmissionFactory(frec_code=frecs[0].frec_code, user_id=first_user.user_id, is_fabs=False)
    sub_2 = SubmissionFactory(cgac_code=cgacs[1].cgac_code, user_id=other_user.user_id, is_fabs=False)
    sub_3 = SubmissionFactory(frec_code=frecs[1].frec_code, user_id=other_user.user_id, is_fabs=False)
    database.session.add_all([sub_1, sub_2, sub_3])
    database.session.commit()

    g.user = third_user
    response = list_submission_users(False)
    user_response = json.loads(response.data.decode('UTF-8'))['users']

    # List the first user because they have a submission with that frec
    assert len(user_response) == 1
    assert user_response[0]['user_id'] == first_user.user_id
    assert user_response[0]['name'] == first_user.name
    assert user_response[0]['email'] == first_user.email
Beispiel #5
0
def test_get_accessible_agencies(database):
    """ Test listing all the agencies (CGAC and FREC) that are accessible based on permissions given """
    # The first cgac/frec don't have sub tiers associated, they should still show up when affiliations are present
    cgacs = [CGACFactory(cgac_code=str(i), agency_name="Test Agency " + str(i)) for i in range(3)]
    frec_cgac = CGACFactory()
    frecs = [FRECFactory(frec_code=str(i), cgac=frec_cgac) for i in range(3)]
    cgac_sub_tiers = [SubTierAgencyFactory(sub_tier_agency_code=str(i), cgac=cgacs[i], frec=None, is_frec=False,
                                           sub_tier_agency_name="Test Subtier Agency C" + str(i)) for i in range(1, 3)]
    frec_sub_tiers = [SubTierAgencyFactory(sub_tier_agency_code=str(3 + i), cgac=frec_cgac, frec=frecs[i], is_frec=True,
                                           sub_tier_agency_name="Test Subtier Agency F" + str(i)) for i in range(1, 3)]
    database.session.add_all(cgacs + [frec_cgac] + frecs + cgac_sub_tiers + frec_sub_tiers)
    database.session.commit()

    user = UserFactory(affiliations=[
        UserAffiliation(user_affiliation_id=1, cgac=cgacs[0], frec=None,
                        permission_type_id=PERMISSION_TYPE_DICT['writer']),
        UserAffiliation(user_affiliation_id=2, cgac=None, frec=frecs[1],
                        permission_type_id=PERMISSION_TYPE_DICT['reader']),
        UserAffiliation(user_affiliation_id=3, cgac=None, frec=frecs[2],
                        permission_type_id=PERMISSION_TYPE_DICT['reader'])
    ])
    database.session.add(user)
    database.session.commit()

    g.user = user

    # Test one CGAC and 2 FRECs, have to decode it because we send it back as a response already
    results = get_accessible_agencies()
    frec_code_result = {el["frec_code"] for el in results["frec_agency_list"]}
    frec_name_result = {el["agency_name"] for el in results["frec_agency_list"]}
    assert len(results["cgac_agency_list"]) == 1
    assert len(results["frec_agency_list"]) == 2
    assert results["cgac_agency_list"][0]["agency_name"] == cgacs[0].agency_name
    assert results["cgac_agency_list"][0]["cgac_code"] == cgacs[0].cgac_code
    assert frec_name_result == {frecs[1].agency_name, frecs[2].agency_name}
    assert frec_code_result == {frecs[1].frec_code, frecs[2].frec_code}

    # Test when user is website admin, should return everything, but only 2 frecs because only 2 of the 3 have the
    # frec flag
    user.affiliations = []
    user.website_admin = True
    results = get_accessible_agencies()
    assert len(results["cgac_agency_list"]) == 3
    assert len(results["frec_agency_list"]) == 2
Beispiel #6
0
def test_list_sub_tier_agencies_admin(domain_app, database):
    """ List all sub tiers that a user has FABS permissions for """
    user = UserFactory(website_admin=True)
    cgacs = [CGACFactory(cgac_code=str(i)) for i in range(3)]
    frec_cgac = CGACFactory()
    frecs = [FRECFactory(frec_code=str(i), cgac=frec_cgac) for i in range(3)]
    cgac_sub_tiers = [
        SubTierAgencyFactory(sub_tier_agency_code=str(i),
                             cgac=cgacs[i],
                             frec=None,
                             is_frec=False,
                             sub_tier_agency_name="Test Subtier Agency " +
                             str(i)) for i in range(3)
    ]
    frec_sub_tiers = [
        SubTierAgencyFactory(sub_tier_agency_code=str(3 + i),
                             cgac=frec_cgac,
                             frec=frecs[i],
                             is_frec=True,
                             sub_tier_agency_name="Test Subtier Agency " +
                             str(3 + i)) for i in range(3)
    ]
    user.affiliations = [
        UserAffiliation(cgac=cgacs[0],
                        frec=None,
                        permission_type_id=PERMISSION_SHORT_DICT['f']),
        UserAffiliation(cgac=None,
                        frec=frecs[2],
                        permission_type_id=PERMISSION_SHORT_DICT['f'])
    ]
    database.session.add_all(cgacs + [frec_cgac] + frecs + cgac_sub_tiers +
                             frec_sub_tiers + [user])
    database.session.commit()

    g.user = user
    result = domain_app.get('/v1/list_sub_tier_agencies/').data.decode('UTF-8')
    response = json.loads(result)
    result = {el['agency_code'] for el in response['sub_tier_agency_list']}
    assert len(response["sub_tier_agency_list"]
               ) == 6  # All of them, ignores affiliations
    assert result == {'0', '1', '2', '3', '4',
                      '5'}  # All of them, ignores affiliations
def test_list_sub_tier_agencies(domain_app, database):
    """ List all sub tiers that a user has FABS permissions for """
    user = UserFactory()
    cgacs = [CGACFactory(cgac_code=str(i)) for i in range(3)]
    frec_cgac = CGACFactory()
    frecs = [FRECFactory(frec_code=str(i), cgac=frec_cgac) for i in range(3)]
    cgac_sub_tiers = [SubTierAgencyFactory(sub_tier_agency_code=str(i), cgac=cgacs[i], frec=None, is_frec=False,
                                           sub_tier_agency_name="Test Subtier Agency " + str(i)) for i in range(3)]
    frec_sub_tiers = [SubTierAgencyFactory(sub_tier_agency_code=str(3 + i), cgac=frec_cgac, frec=frecs[i], is_frec=True,
                                           sub_tier_agency_name="Test Subtier Agency " + str(3 + i)) for i in range(3)]
    user.affiliations = [UserAffiliation(cgac=cgacs[0], frec=None, permission_type_id=PERMISSION_SHORT_DICT['f']),
                         UserAffiliation(cgac=None, frec=frecs[2], permission_type_id=PERMISSION_SHORT_DICT['f'])]
    database.session.add_all(cgacs + [frec_cgac] + frecs + cgac_sub_tiers + frec_sub_tiers + [user])
    database.session.commit()

    g.user = user
    result = domain_app.get('/v1/list_sub_tier_agencies/').data.decode('UTF-8')
    response = json.loads(result)
    result = {el['agency_code'] for el in response['sub_tier_agency_list']}
    assert len(response["sub_tier_agency_list"]) == 2  # Only one cgac and one frec
    assert result == {'0', '5'}  # Only subtiers created from the relevant cgacs
def test_list_agencies_all(domain_app, database):
    """All agencies should be visible to website admins"""
    user = UserFactory()
    cgacs = [CGACFactory(cgac_code=str(i)) for i in range(3)]
    frec_cgac = CGACFactory()
    frecs = [FRECFactory(frec_code=str(i), cgac=frec_cgac) for i in range(3)]
    cgac_sub_tiers = [SubTierAgencyFactory(sub_tier_agency_code=str(i), cgac=cgacs[i], frec=None, is_frec=False,
                                           sub_tier_agency_name="Test Subtier Agency "+str(i)) for i in range(3)]
    frec_sub_tiers = [SubTierAgencyFactory(sub_tier_agency_code=str(3+i), cgac=frec_cgac, frec=frecs[i], is_frec=True,
                                           sub_tier_agency_name="Test Subtier Agency "+str(3+i)) for i in range(3)]
    user.affiliations = [UserAffiliation(cgac=cgacs[0], frec=frecs[0], permission_type_id=PERMISSION_SHORT_DICT['w'])]
    database.session.add_all(cgacs + [frec_cgac] + frecs + cgac_sub_tiers + frec_sub_tiers + [user])
    database.session.commit()

    g.user = user
    result = domain_app.get('/v1/list_all_agencies/').data.decode('UTF-8')
    response = json.loads(result)
    result = {el['cgac_code'] for el in response['agency_list']}
    assert result == {'0', '1', '2'}    # i.e. all of them
    result = {el['frec_code'] for el in response['shared_agency_list']}
    assert result == {'0', '1', '2'}    # i.e. all of them
def test_list_agencies_all(domain_app, database):
    """ All agencies should be visible to website admins """
    user = UserFactory()
    cgacs = [CGACFactory(cgac_code=str(i)) for i in range(3)]
    frec_cgac = CGACFactory()
    frecs = [FRECFactory(frec_code=str(i), cgac=frec_cgac) for i in range(3)]
    cgac_sub_tiers = [SubTierAgencyFactory(sub_tier_agency_code=str(i), cgac=cgacs[i], frec=None, is_frec=False,
                                           sub_tier_agency_name="Test Subtier Agency "+str(i)) for i in range(3)]
    frec_sub_tiers = [SubTierAgencyFactory(sub_tier_agency_code=str(3+i), cgac=frec_cgac, frec=frecs[i], is_frec=True,
                                           sub_tier_agency_name="Test Subtier Agency "+str(3+i)) for i in range(3)]
    user.affiliations = [UserAffiliation(cgac=cgacs[0], frec=frecs[0], permission_type_id=PERMISSION_SHORT_DICT['w'])]
    database.session.add_all(cgacs + [frec_cgac] + frecs + cgac_sub_tiers + frec_sub_tiers + [user])
    database.session.commit()

    g.user = user
    result = domain_app.get('/v1/list_all_agencies/').data.decode('UTF-8')
    response = json.loads(result)
    result = {el['cgac_code'] for el in response['agency_list']}
    assert result == {'0', '1', '2'}    # i.e. all of them
    result = {el['frec_code'] for el in response['shared_agency_list']}
    assert result == {'0', '1', '2'}    # i.e. all of them
Beispiel #10
0
def test_list_agencies_all(monkeypatch, user_constants, domain_app):
    """All agencies should be visible to website admins"""
    sess = GlobalDB.db().session
    user = UserFactory()
    cgacs = [CGACFactory(cgac_code=str(i)) for i in range(3)]
    frec_cgac = CGACFactory()
    frecs = [FRECFactory(frec_code=str(i), cgac=frec_cgac) for i in range(3)]
    cgac_sub_tiers = [
        SubTierAgencyFactory(sub_tier_agency_code=str(i),
                             cgac=cgacs[i],
                             frec=None,
                             is_frec=False,
                             sub_tier_agency_name="Test Subtier Agency " +
                             str(i)) for i in range(3)
    ]
    frec_sub_tiers = [
        SubTierAgencyFactory(sub_tier_agency_code=str(3 + i),
                             cgac=frec_cgac,
                             frec=frecs[i],
                             is_frec=True,
                             sub_tier_agency_name="Test Subtier Agency " +
                             str(3 + i)) for i in range(3)
    ]
    user.affiliations = [
        UserAffiliation(cgac=cgacs[0], frec=frecs[0], permission_type_id=2)
    ]
    sess.add_all(cgacs + [frec_cgac] + frecs + cgac_sub_tiers +
                 frec_sub_tiers + [user])
    sess.commit()
    monkeypatch.setattr(domainRoutes, 'g', Mock(user=user))

    result = domain_app.get('/v1/list_all_agencies/').data.decode('UTF-8')
    response = json.loads(result)
    result = {el['cgac_code'] for el in response['agency_list']}
    assert result == {'0', '1', '2'}  # i.e. all of them
    result = {el['frec_code'] for el in response['shared_agency_list']}
    assert result == {'0', '1', '2'}  # i.e. all of them
def test_list_agencies_limits(domain_app, database):
    """List agencies should limit to only the user's agencies"""
    user = UserFactory()
    cgac = CGACFactory()
    frec_cgac = CGACFactory()
    frec = FRECFactory(cgac=frec_cgac)
    sub_tiers = [SubTierAgencyFactory(sub_tier_agency_code='0', cgac=cgac, frec=None, is_frec=False,
                                      sub_tier_agency_name="Test Subtier Agency 0"),
                 SubTierAgencyFactory(sub_tier_agency_code='1', cgac=frec_cgac, frec=frec, is_frec=True,
                                      sub_tier_agency_name="Test Subtier Agency 1")]
    user.affiliations = [UserAffiliation(cgac=cgac, frec=None, permission_type_id=PERMISSION_SHORT_DICT['w']),
                         UserAffiliation(cgac=None, frec=frec, permission_type_id=PERMISSION_SHORT_DICT['w'])]
    database.session.add_all([cgac] + [frec_cgac] + [frec] + sub_tiers + [user])
    database.session.commit()

    g.user = user
    result = domain_app.get('/v1/list_agencies/').data.decode('UTF-8')
    res = json.loads(result)
    assert len(res['cgac_agency_list']) == 1
    assert len(res['frec_agency_list']) == 1
    assert res['cgac_agency_list'][0]['agency_name'] == cgac.agency_name
    assert res['cgac_agency_list'][0]['cgac_code'] == cgac.cgac_code
    assert res['frec_agency_list'][0]['agency_name'] == frec.agency_name
    assert res['frec_agency_list'][0]['frec_code'] == frec.frec_code
Beispiel #12
0
def test_list_agencies_perm_params(domain_app, database):
    """ Users should be able to filter their affiliations based on the arguments provided """
    user = UserFactory()
    r_cgac = CGACFactory()
    w_cgac = CGACFactory()
    s_frec_cgac = CGACFactory()
    s_frec = FRECFactory(cgac=s_frec_cgac)
    e_frec_cgac = CGACFactory()
    e_frec = FRECFactory(cgac=e_frec_cgac)
    f_cgac = CGACFactory()
    user.affiliations = [
        UserAffiliation(cgac=r_cgac,
                        frec=None,
                        permission_type_id=PERMISSION_SHORT_DICT['r']),
        UserAffiliation(cgac=w_cgac,
                        frec=None,
                        permission_type_id=PERMISSION_SHORT_DICT['w']),
        UserAffiliation(cgac=None,
                        frec=s_frec,
                        permission_type_id=PERMISSION_SHORT_DICT['s']),
        UserAffiliation(cgac=None,
                        frec=e_frec,
                        permission_type_id=PERMISSION_SHORT_DICT['e']),
        UserAffiliation(cgac=f_cgac,
                        frec=None,
                        permission_type_id=PERMISSION_SHORT_DICT['f'])
    ]
    database.session.add_all(
        [r_cgac, w_cgac, s_frec_cgac, s_frec, e_frec_cgac, e_frec, f_cgac])
    database.session.commit()

    g.user = user

    def call_list_agencies(perm_level='reader', perm_type='mixed'):
        result = domain_app.get('/v1/list_agencies/?perm_level={}&perm_type={}'.format(perm_level, perm_type))\
            .data.decode('UTF-8')
        resp = json.loads(result)
        cgac_codes = [
            agency['cgac_code'] for agency in resp['cgac_agency_list']
        ]
        frec_codes = [
            agency['frec_code'] for agency in resp['frec_agency_list']
        ]
        return cgac_codes, frec_codes

    default_cgacs, default_frecs = call_list_agencies()
    assert {r_cgac.cgac_code, w_cgac.cgac_code,
            f_cgac.cgac_code} == set(default_cgacs)
    assert {s_frec.frec_code, e_frec.frec_code} == set(default_frecs)

    writer_cgacs, writer_frecs = call_list_agencies(perm_level='writer')
    assert {w_cgac.cgac_code, f_cgac.cgac_code} == set(writer_cgacs)
    assert {s_frec.frec_code, e_frec.frec_code} == set(writer_frecs)

    submitter_cgacs, submitter_frecs = call_list_agencies(
        perm_level='submitter')
    assert {f_cgac.cgac_code} == set(submitter_cgacs)
    assert {s_frec.frec_code} == set(submitter_frecs)

    dabs_cgacs, dabs_frecs = call_list_agencies(perm_type='dabs')
    assert {r_cgac.cgac_code, w_cgac.cgac_code} == set(dabs_cgacs)
    assert {s_frec.frec_code} == set(dabs_frecs)

    fabs_cgacs, fabs_frecs = call_list_agencies(perm_type='fabs')
    assert {f_cgac.cgac_code} == set(fabs_cgacs)
    assert {e_frec.frec_code} == set(fabs_frecs)

    # mix
    mix_cgacs, mix_frecs = call_list_agencies(perm_level='submitter',
                                              perm_type='fabs')
    assert {f_cgac.cgac_code} == set(mix_cgacs)
    assert set() == set(mix_frecs)