def test_both_fain_and_url_supplied(database):
    """ Tests File D2 (award financial assistance) having both uri and fain populated. """
    tas = _TAS
    afa_1 = AwardFinancialAssistanceFactory(tas=tas,
                                            fain='aBc',
                                            uri='xYz',
                                            federal_action_obligation=1,
                                            original_loan_subsidy_cost='1',
                                            record_type='2')
    afa_2 = AwardFinancialAssistanceFactory(tas=tas,
                                            fain='dEf',
                                            uri='gHi',
                                            federal_action_obligation=1,
                                            original_loan_subsidy_cost='1',
                                            record_type='1')
    af_1 = AwardFinancialFactory(tas=tas,
                                 submisson_id=afa_1.submission_id,
                                 fain=afa_1.fain.lower(),
                                 uri=None,
                                 transaction_obligated_amou=1)
    af_2 = AwardFinancialFactory(tas=tas,
                                 submisson_id=afa_2.submission_id,
                                 fain=None,
                                 uri=afa_2.uri.lower(),
                                 transaction_obligated_amou=0)

    errors = number_of_errors(_FILE,
                              database,
                              models=[afa_1, afa_2, af_1, af_2])
    assert errors == 0
Example #2
0
def test_failure(database):
    """ Test failure for each unique URI in File C, the sum of each TransactionObligatedAmount should match (but with
        opposite signs) the sum of the FederalActionObligation or OriginalLoanSubsidyCost amounts reported in D2. This
        rule does not apply if the ATA field is populated and is different from the Agency ID. """
    # Create a 12 character random uri
    uri_1 = ''.join(choice(ascii_uppercase + ascii_lowercase + digits) for _ in range(12))
    uri_2 = ''.join(choice(ascii_uppercase + ascii_lowercase + digits) for _ in range(12))
    uri_3 = ''.join(choice(ascii_uppercase + ascii_lowercase + digits) for _ in range(12))

    # Simple addition that doesn't add up right
    af_1_row_1 = AwardFinancialFactory(transaction_obligated_amou=1100, uri=uri_1, allocation_transfer_agency=None)
    af_1_row_2 = AwardFinancialFactory(transaction_obligated_amou=11, uri=uri_1, allocation_transfer_agency=None)
    # Incorrect addition based on assistance type in AFA
    af_2 = AwardFinancialFactory(transaction_obligated_amou=9999, uri=uri_2, allocation_transfer_agency=None)
    # Don't ignore when ATA and AID match
    af_3 = AwardFinancialFactory(transaction_obligated_amou=1100, uri=uri_3, allocation_transfer_agency="good",
                                 agency_identifier="good")

    # Sum of this uri doesn't add up to af uri sum
    afa_1_row_1 = AwardFinancialAssistanceFactory(uri=uri_1, federal_action_obligation=-1100,
                                                  original_loan_subsidy_cost=None)
    afa_1_row_2 = AwardFinancialAssistanceFactory(uri=uri_1, federal_action_obligation=-10,
                                                  original_loan_subsidy_cost=None)
    # Both of these rows use the column that isn't filled in for summing so neither results in the correct number
    afa_2_row_1 = AwardFinancialAssistanceFactory(uri=uri_2, federal_action_obligation=-9999,
                                                  original_loan_subsidy_cost=None)
    afa_2_row_2 = AwardFinancialAssistanceFactory(uri=uri_2, federal_action_obligation=None,
                                                  original_loan_subsidy_cost=-1000, assistance_type='07')
    # This shouldn't be ignored
    afa_3 = AwardFinancialAssistanceFactory(uri=uri_3, federal_action_obligation=0, original_loan_subsidy_cost=None)

    errors = number_of_errors(_FILE, database, models=[af_1_row_1, af_1_row_2, af_2, af_3, afa_1_row_1, afa_1_row_2,
                                                       afa_2_row_1, afa_2_row_2, afa_3])
    assert errors == 3
def test_generate_file_e_sql(database, monkeypatch):
    """ test_generate_file_e_sql should provide the query representing E file data related to a submission """
    # Setup - create submission, awards, subawards
    sess = database.session

    sub1 = SubmissionFactory(submission_id=1)
    sub2 = SubmissionFactory(submission_id=2)

    d1_show = AwardProcurementFactory(submission_id=sub1.submission_id, awardee_or_recipient_uei='00000000000e')
    d2_show = AwardFinancialAssistanceFactory(submission_id=sub1.submission_id, awardee_or_recipient_uei='11111111111e')
    d1_hide = AwardProcurementFactory(submission_id=sub2.submission_id, awardee_or_recipient_uei='22222222222e')
    d2_hide = AwardFinancialAssistanceFactory(submission_id=sub2.submission_id, awardee_or_recipient_uei='33333333333e')

    recipient_show = [SAMRecipientFactory(uei=(str(i) * 11) + 'e') for i in range(0, 2)]
    recipient_hide = [SAMRecipientFactory(uei=(str(i) * 11) + 'e') for i in range(2, 4)]
    recipient_s = recipient_show + recipient_hide

    sess.add_all([sub1, sub2, d1_hide, d1_show, d2_hide, d2_show] + recipient_s)
    sess.commit()

    # Gather the sql
    file_e_query = fileE_F.generate_file_e_sql(sub1.submission_id)

    # Get the records
    file_e_records = sess.execute(file_e_query)
    file_e_cols = file_e_records.keys()
    file_e_value_sets = file_e_records.fetchall()
    file_e_results = [OrderedDict(list(zip(file_e_cols, file_e_value_set))) for file_e_value_set in file_e_value_sets]

    # Expected Results
    expected_file_e_results = [replicate_file_e_results(recipient) for recipient in recipient_show]

    assert file_e_results == expected_file_e_results
def test_ignored_and_failed_original_loan_subsidy_cost_values(database):
    """ Tests that a single warning is thrown for both a federal action obligation of 0 and an original loan subsidy
        cost of 0.
    """

    tas = _TAS
    afa = AwardFinancialAssistanceFactory(tas=tas,
                                          fain='abc',
                                          uri=None,
                                          federal_action_obligation=1,
                                          original_loan_subsidy_cost='0',
                                          assistance_type='09',
                                          record_type='3')
    afa_2 = AwardFinancialAssistanceFactory(tas=tas,
                                            fain='aBc',
                                            uri=None,
                                            federal_action_obligation=1,
                                            original_loan_subsidy_cost='-2.3',
                                            assistance_type='09',
                                            record_type='2')
    afa_3 = AwardFinancialAssistanceFactory(tas=tas,
                                            fain='abC',
                                            uri=None,
                                            federal_action_obligation=1,
                                            original_loan_subsidy_cost='2.3',
                                            assistance_type='08',
                                            record_type='3')
    af = AwardFinancialFactory(tas=tas,
                               submisson_id=afa.submission_id,
                               fain=None,
                               uri=None,
                               transaction_obligated_amou=1)

    errors = number_of_errors(_FILE, database, models=[afa, af, afa_2, afa_3])
    assert errors == 3

    # Test that this is ignored if assistance type is 08
    afa = AwardFinancialAssistanceFactory(tas=tas,
                                          fain='abc',
                                          uri=None,
                                          federal_action_obligation=1,
                                          original_loan_subsidy_cost='0',
                                          assistance_type='08',
                                          record_type='2')
    afa_2 = AwardFinancialAssistanceFactory(tas=tas,
                                            fain='aBc',
                                            uri=None,
                                            federal_action_obligation=1,
                                            original_loan_subsidy_cost='-2.3',
                                            assistance_type='08',
                                            record_type='3')
    af = AwardFinancialFactory(tas=tas,
                               submisson_id=afa.submission_id,
                               fain=None,
                               uri=None,
                               transaction_obligated_amou=1)

    errors = number_of_errors(_FILE, database, models=[afa, af, afa_2])
    assert errors == 0
Example #5
0
def test_generate_e_file_query(monkeypatch, mock_broker_config_paths,
                               database):
    """Verify that generate_e_file makes an appropriate query (matching both
    D1 and D2 entries)"""
    # Generate several file D1 entries, largely with the same submission_id,
    # and with two overlapping DUNS. Generate several D2 entries with the same
    # submission_id as well
    model = AwardProcurementFactory()
    aps = [AwardProcurementFactory(submission_id=model.submission_id)
           for i in range(4)]
    afas = [AwardFinancialAssistanceFactory(submission_id=model.submission_id)
            for i in range(5)]
    same_duns = AwardProcurementFactory(
        submission_id=model.submission_id,
        awardee_or_recipient_uniqu=model.awardee_or_recipient_uniqu)
    unrelated = AwardProcurementFactory(submission_id=model.submission_id + 1)
    database.session.add_all(aps + afas + [model, same_duns, unrelated])

    monkeypatch.setattr(jobQueue.fileE, 'retrieveRows', Mock(return_value=[]))

    # Mock out the interface holder class; rather nasty, as we want to _keep_
    # the database session handler
    interface_class = Mock()
    interface_class.return_value.jobDb.session = database.session
    jobQueue.generate_e_file(
        model.submission_id, 1, interface_class, 'uniq', 'uniq',
        is_local=True)

    # [0][0] gives us the first, non-keyword args
    call_args = jobQueue.fileE.retrieveRows.call_args[0][0]
    expected = [ap.awardee_or_recipient_uniqu for ap in aps]
    expected.append(model.awardee_or_recipient_uniqu)
    expected.extend(afa.awardee_or_recipient_uniqu for afa in afas)
    assert list(sorted(call_args)) == list(sorted(expected))
Example #6
0
def test_failure(database):
    """ Test that a three digit object class with no flag is an error"""
    # Create a 12 character random fain
    fain = ''.join(
        choice(ascii_uppercase + ascii_lowercase + digits) for i in range(12))
    fain_two = ''.join(
        choice(ascii_uppercase + ascii_lowercase + digits) for i in range(12))
    first_fain_row_one = AwardFinancialFactory(transaction_obligated_amou=1100,
                                               fain=fain,
                                               allocation_transfer_agency=None)
    first_fain_row_two = AwardFinancialFactory(transaction_obligated_amou=11,
                                               fain=fain,
                                               allocation_transfer_agency=None)
    # And add a row that shouldn't be included
    second_fain_row_one = AwardFinancialFactory(
        transaction_obligated_amou=9999,
        fain=fain_two,
        allocation_transfer_agency=None)
    first_afa_row = AwardFinancialAssistanceFactory(
        fain=fain,
        federal_action_obligation=-1100,
        original_loan_subsidy_cost=None)
    second_afa_row = AwardFinancialAssistanceFactory(
        fain=fain,
        federal_action_obligation=-10,
        original_loan_subsidy_cost=None)
    other_fain_afa_row = AwardFinancialAssistanceFactory(
        fain=fain_two,
        federal_action_obligation=-9999,
        original_loan_subsidy_cost=None)
    other_fain_loan_afa_row = AwardFinancialAssistanceFactory(
        fain=fain_two,
        federal_action_obligation=None,
        original_loan_subsidy_cost=-1000,
        assistance_type='07')

    errors = number_of_errors(_FILE,
                              database,
                              models=[
                                  first_fain_row_one, first_fain_row_two,
                                  second_fain_row_one, first_afa_row,
                                  second_afa_row, other_fain_afa_row,
                                  other_fain_loan_afa_row
                              ])
    assert errors == 2
Example #7
0
def test_unequal_uri_null(database):
    """ Tests NULL File D2 (award financial assistance) uri compared to a non-NULL uri in File C (award financial). """
    tas = _TAS
    afa = AwardFinancialAssistanceFactory(tas=tas, fain=None, uri=None, federal_action_obligation=1,
                                          original_loan_subsidy_cost='1')
    af = AwardFinancialFactory(tas=tas, submisson_id=afa.submission_id, fain=None, uri='abc')

    errors = number_of_errors(_FILE, database, models=[afa, af])
    assert errors == 0
def test_unequal_uri(database):
    """ Tests File C (award financial) uri different than File D2 (award financial assistance) fain. """
    tas = _TAS
    af = AwardFinancialFactory(tas=tas, fain=None, uri='abc', allocation_transfer_agency=None)
    afa = AwardFinancialAssistanceFactory(tas=tas, submission_id=af.submission_id, fain=None, uri='xyz',
                                          allocation_transfer_agency=None)

    errors = number_of_errors(_FILE, database, models=[af, afa])
    assert errors == 1
Example #9
0
def test_equal_fain(database):
    """ Tests that File D2 (award financial assistance) fain matches File C (award financial) fain. """
    tas = _TAS
    afa = AwardFinancialAssistanceFactory(tas=tas, fain='abc', uri=None, federal_action_obligation=1,
                                          original_loan_subsidy_cost='1')
    af = AwardFinancialFactory(tas=tas, submisson_id=afa.submission_id, fain=afa.fain, uri=None)

    errors = number_of_errors(_FILE, database, models=[afa, af])
    assert errors == 0
def test_equal_fain(database):
    """ Tests that File C (award financial) fain matches File D2 (award financial assistance) fain. """
    tas = _TAS
    af = AwardFinancialFactory(tas=tas, fain='abc', uri=None, allocation_transfer_agency=None)
    afa = AwardFinancialAssistanceFactory(tas=tas, submisson_id=af.submission_id, fain='abc', uri=None,
                                          allocation_transfer_agency=None)

    errors = number_of_errors(_FILE, database, models=[af, afa])
    assert errors == 0
def test_unequal_uri_null(database):
    """ Tests NULL File C (award financial) uri compared to a non-NULL uri in File D2 (award financial assistance). """
    tas = _TAS
    af = AwardFinancialFactory(tas=tas, fain=None, uri=None, allocation_transfer_agency=None)
    afa = AwardFinancialAssistanceFactory(tas=tas, submission_id=af.submission_id, fain=None, uri='abc',
                                          allocation_transfer_agency=None)

    errors = number_of_errors(_FILE, database, models=[af, afa])
    assert errors == 0
Example #12
0
def test_both_fain_and_url_supplied(database):
    """ Tests File D2 (award financial assistance) having both uri and fain populated. """
    tas = _TAS
    afa = AwardFinancialAssistanceFactory(tas=tas, fain='abc', uri='xyz', federal_action_obligation=1,
                                          original_loan_subsidy_cost='1')
    af = AwardFinancialFactory(tas=tas, submisson_id=afa.submission_id, fain=afa.fain, uri=afa.uri)

    errors = number_of_errors(_FILE, database, models=[afa, af])
    assert errors == 0
Example #13
0
def test_unequal_uri(database):
    """ Tests File D2 (award financial assistance) uri different than File C (award financial) uri. """
    tas = _TAS
    afa = AwardFinancialAssistanceFactory(tas=tas, fain=None, uri='abc', federal_action_obligation=1,
                                          original_loan_subsidy_cost='1')
    af = AwardFinancialFactory(tas=tas, submisson_id=afa.submission_id, fain=None, uri='xyz')

    errors = number_of_errors(_FILE, database, models=[afa, af])
    assert errors == 1
def test_both_fain_and_url_supplied(database):
    """ Tests File C (award financial) having both uri and fain populated . """
    tas = _TAS
    af = AwardFinancialFactory(tas=tas, fain='abc', uri='xyz', allocation_transfer_agency=None)
    afa = AwardFinancialAssistanceFactory(tas=tas, submisson_id=af.submission_id, fain='abc', uri='xyz',
                                          allocation_transfer_agency=None)

    errors = number_of_errors(_FILE, database, models=[af, afa])
    assert errors == 0
def test_ignore_when_different_ata(database):
    """ Tests that rule is not applied when allocation transfer agency does not match agency id. """
    tas = _TAS
    af = AwardFinancialFactory(tas=tas, fain='abc', uri='xyz', allocation_transfer_agency='good',
                               agency_identifier='bad', transaction_obligated_amou='12345')
    afa = AwardFinancialAssistanceFactory(tas=tas, submission_id=af.submission_id, fain='123', uri='456',
                                          allocation_transfer_agency=None)

    errors = number_of_errors(_FILE, database, models=[af, afa])
    assert errors == 0
def test_equal_fain_unequal_uri(database):
    """ Tests equal fain and unequal uri values between File C (award financial) and File D2
        (award financial assistance). """
    tas = _TAS
    af = AwardFinancialFactory(tas=tas, fain='abc', uri=None, allocation_transfer_agency=None)
    afa = AwardFinancialAssistanceFactory(tas=tas, submission_id=af.submission_id, fain='abc', uri='xyz',
                                          allocation_transfer_agency=None)

    errors = number_of_errors(_FILE, database, models=[af, afa])
    assert errors == 0
Example #17
0
def test_zero_federal_action_obligation_and_original_loan_subsidy_cost(database):
    """ Tests that a single warning is thrown for both a federal action obligation of 0
        and an original loan subsidy cost of 0 """
    tas = _TAS
    afa = AwardFinancialAssistanceFactory(tas=tas, fain='abc', uri=None, federal_action_obligation=0,
                                          original_loan_subsidy_cost='0')
    af = AwardFinancialFactory(tas=tas, submisson_id=afa.submission_id, fain=None, uri=None)

    errors = number_of_errors(_FILE, database, models=[afa, af])
    assert errors == 0
Example #18
0
def test_null_uri_fain(database):
    """ Tests File D2 (award financial assistance) and File C (award financial)
        having NULL values for both fain and uri. """
    tas = _TAS
    afa = AwardFinancialAssistanceFactory(tas=tas, fain=None, uri=None, federal_action_obligation=1,
                                          original_loan_subsidy_cost='1')
    af = AwardFinancialFactory(tas=tas, submisson_id=afa.submission_id, fain=None, uri=None)

    errors = number_of_errors(_FILE, database, models=[afa, af])
    assert errors == 0
def test_null_uri_fain(database):
    """ Tests File C (award financial) and File D2 (award financial assistance) having NULL values for both fain and
        uri. """
    tas = _TAS
    af = AwardFinancialFactory(tas=tas, fain=None, uri=None, allocation_transfer_agency=None)
    afa = AwardFinancialAssistanceFactory(tas=tas, submission_id=af.submission_id, fain=None, uri=None,
                                          allocation_transfer_agency=None)

    errors = number_of_errors(_FILE, database, models=[af, afa])
    assert errors == 0
def test_matching_allocation_transfer_agency(database):
    """ Tests that validation processes when there's an allocation transfer agency in File C (award financial)
        if it matches AID """
    tas = _TAS
    af = AwardFinancialFactory(tas=tas, fain='abc', uri='xyz', allocation_transfer_agency='good',
                               agency_identifier='good', transaction_obligated_amou='12345')
    afa = AwardFinancialAssistanceFactory(tas=tas, submission_id=af.submission_id, fain='123', uri='456',
                                          allocation_transfer_agency=None)

    errors = number_of_errors(_FILE, database, models=[af, afa])
    assert errors == 1
def test_ignored_and_failed_federal_action_obligation_values(database):
    """ Tests that a single warning is thrown for both a federal action obligation of 0 and an original loan subsidy
        cost of 0.
    """

    tas = _TAS
    afa = AwardFinancialAssistanceFactory(tas=tas,
                                          fain='abc',
                                          uri=None,
                                          federal_action_obligation=0,
                                          original_loan_subsidy_cost='1',
                                          assistance_type='08')
    afa_2 = AwardFinancialAssistanceFactory(tas=tas,
                                            fain='aBc',
                                            uri=None,
                                            federal_action_obligation=2,
                                            original_loan_subsidy_cost='1',
                                            assistance_type='09')
    af = AwardFinancialFactory(tas=tas,
                               submisson_id=afa.submission_id,
                               fain=None,
                               uri=None)

    errors = number_of_errors(_FILE, database, models=[afa, af, afa_2])
    assert errors == 2

    # Test that this is ignored if assistance type is 09
    afa = AwardFinancialAssistanceFactory(tas=tas,
                                          fain='abc',
                                          uri=None,
                                          federal_action_obligation=0,
                                          original_loan_subsidy_cost='1',
                                          assistance_type='09')
    af = AwardFinancialFactory(tas=tas,
                               submisson_id=afa.submission_id,
                               fain=None,
                               uri=None)

    errors = number_of_errors(_FILE, database, models=[afa, af])
    assert errors == 0
Example #22
0
def test_success(database):
    """ Test that a four digit object class with no flag is a success, and a three digit object class with
        a flag is a success """
    # Create a 12 character random fain
    fain = ''.join(
        choice(ascii_uppercase + ascii_lowercase + digits) for _ in range(12))
    fain_two = ''.join(
        choice(ascii_uppercase + ascii_lowercase + digits) for _ in range(12))
    fain_three = ''.join(
        choice(ascii_uppercase + ascii_lowercase + digits) for _ in range(12))
    first_fain_row_one = AwardFinancialFactory(transaction_obligated_amou=1100,
                                               fain=fain,
                                               allocation_transfer_agency=None)
    first_fain_row_two = AwardFinancialFactory(transaction_obligated_amou=11,
                                               fain=fain,
                                               allocation_transfer_agency=None)
    # And add a row for a different fain
    second_fain_row_one = AwardFinancialFactory(
        transaction_obligated_amou=9999,
        fain=fain_two,
        allocation_transfer_agency=None)
    third_fain_row_one = AwardFinancialFactory(transaction_obligated_amou=8888,
                                               fain=fain_three,
                                               allocation_transfer_agency=123)

    first_afa_row = AwardFinancialAssistanceFactory(
        fain=fain,
        federal_action_obligation=-1100,
        original_loan_subsidy_cost=None)
    second_afa_row = AwardFinancialAssistanceFactory(
        fain=fain,
        federal_action_obligation=-10,
        original_loan_subsidy_cost=None)
    third_afa_row = AwardFinancialAssistanceFactory(
        fain=fain,
        original_loan_subsidy_cost=-1,
        assistance_type='08',
        federal_action_obligation=None)
    wrong_type_afa_row = AwardFinancialAssistanceFactory(
        fain=fain,
        original_loan_subsidy_cost=-2222,
        assistance_type='09',
        federal_action_obligation=None)
    other_fain_afa_row = AwardFinancialAssistanceFactory(
        fain=fain_two,
        federal_action_obligation=-9999,
        original_loan_subsidy_cost=None)
    third_fain_ap_row = AwardFinancialAssistanceFactory(
        fain=fain_three, federal_action_obligation=-9999)

    errors = number_of_errors(_FILE,
                              database,
                              models=[
                                  first_fain_row_one, first_fain_row_two,
                                  second_fain_row_one, first_afa_row,
                                  second_afa_row, third_afa_row,
                                  wrong_type_afa_row, other_fain_afa_row,
                                  third_fain_row_one, third_fain_ap_row
                              ])
    assert errors == 0
Example #23
0
def test_unequal_uri_null(database):
    """ Tests NULL File C (award financial) fain/uri compared to filled in File D2 (award financial assistance). """
    tas = _TAS
    af = AwardFinancialFactory(tas=tas,
                               fain=None,
                               uri=None,
                               allocation_transfer_agency=None)
    afa_1 = AwardFinancialAssistanceFactory(tas=tas,
                                            submission_id=af.submission_id,
                                            fain=None,
                                            uri='abc',
                                            allocation_transfer_agency=None,
                                            record_type='1')
    afa_2 = AwardFinancialAssistanceFactory(tas=tas,
                                            submission_id=af.submission_id,
                                            fain='abc',
                                            uri=None,
                                            allocation_transfer_agency=None,
                                            record_type='3')

    errors = number_of_errors(_FILE, database, models=[af, afa_1, afa_2])
    assert errors == 0
Example #24
0
def test_generate_e_file_query(monkeypatch, mock_broker_config_paths,
                               database):
    """ Verify that generate_e_file makes an appropriate query (matching both D1 and D2 entries) """
    # Generate several file D1 entries, largely with the same submission_id, and with two overlapping DUNS. Generate
    # several D2 entries with the same submission_id as well
    sess = database.session
    sub = SubmissionFactory()
    sub_2 = SubmissionFactory()
    sess.add_all([sub, sub_2])
    sess.commit()

    file_path = str(mock_broker_config_paths['broker_files'].join('e_test1'))
    job = JobFactory(job_status_id=JOB_STATUS_DICT['running'],
                     job_type_id=JOB_TYPE_DICT['file_upload'],
                     file_type_id=FILE_TYPE_DICT['executive_compensation'],
                     filename=file_path,
                     original_filename='e_test1',
                     submission_id=sub.submission_id)
    database.session.add(job)
    database.session.commit()

    model = AwardProcurementFactory(submission_id=sub.submission_id)
    aps = [
        AwardProcurementFactory(submission_id=sub.submission_id)
        for _ in range(4)
    ]
    afas = [
        AwardFinancialAssistanceFactory(submission_id=sub.submission_id)
        for _ in range(5)
    ]
    same_duns = AwardProcurementFactory(
        submission_id=sub.submission_id,
        awardee_or_recipient_uniqu=model.awardee_or_recipient_uniqu)
    unrelated = AwardProcurementFactory(submission_id=sub_2.submission_id)
    sess.add_all(aps + afas + [model, same_duns, unrelated])
    sess.commit()

    monkeypatch.setattr(file_generation_manager, 'mark_job_status', Mock())
    monkeypatch.setattr(file_generation_manager.fileE, 'retrieve_rows',
                        Mock(return_value=[]))

    file_gen_manager = FileGenerationManager(job, None, None,
                                             CONFIG_BROKER['local'])
    file_gen_manager.generate_e_file()

    # [0][0] gives us the first, non-keyword args
    call_args = file_generation_manager.fileE.retrieve_rows.call_args[0][0]
    expected = [ap.awardee_or_recipient_uniqu for ap in aps]
    expected.append(model.awardee_or_recipient_uniqu)
    expected.extend(afa.awardee_or_recipient_uniqu for afa in afas)
    assert list(sorted(call_args)) == list(sorted(expected))
Example #25
0
def test_non_matching_non_aggregate_fain(database):
    """ Tests File C (award financial) having fain not matching in non-aggregate but uri matching. """
    tas = _TAS
    af = AwardFinancialFactory(tas=tas,
                               fain=None,
                               uri='xyz',
                               allocation_transfer_agency=None)
    afa = AwardFinancialAssistanceFactory(tas=tas,
                                          submisson_id=af.submission_id,
                                          fain='aBc',
                                          uri='xYz',
                                          allocation_transfer_agency=None,
                                          record_type='1')

    errors = number_of_errors(_FILE, database, models=[af, afa])
    assert errors == 0
Example #26
0
def test_valid_allocation_transfer_agency(database):
    """Tests that rule is not applied when File C (award financial)
    record has a valid allocation transfer agency."""
    tas = _TAS
    cgac = CGACFactory(cgac_code='good')
    af = AwardFinancialFactory(tas=tas,
                               fain='abc',
                               uri='xyz',
                               allocation_transfer_agency=cgac.cgac_code)
    afa = AwardFinancialAssistanceFactory(tas=tas,
                                          submission_id=af.submission_id,
                                          fain='123',
                                          uri='456')

    errors = number_of_errors(_FILE, database, models=[af, afa, cgac])
    assert errors == 0
Example #27
0
def test_invalid_allocation_transfer_agency(database):
    """Tests that validation processes when there's an invalid allocation
    transfer agency in File C (award financial). Per rule C24."""
    tas = _TAS
    cgac = CGACFactory(cgac_code='good')
    af = AwardFinancialFactory(tas=tas,
                               fain='abc',
                               uri='xyz',
                               allocation_transfer_agency='bad')
    afa = AwardFinancialAssistanceFactory(tas=tas,
                                          submission_id=af.submission_id,
                                          fain='123',
                                          uri='456')

    errors = number_of_errors(_FILE, database, models=[af, afa, cgac])
    assert errors == 1
Example #28
0
def test_equal_uri(database):
    """ Tests that File C (award financial) uri matches File D2 (award financial assistance) uri. """
    tas = _TAS
    af = AwardFinancialFactory(tas=tas,
                               fain=None,
                               uri='xyz',
                               allocation_transfer_agency=None)
    afa = AwardFinancialAssistanceFactory(tas=tas,
                                          submisson_id=af.submission_id,
                                          fain=None,
                                          uri='xYz',
                                          allocation_transfer_agency=None,
                                          record_type='1')

    errors = number_of_errors(_FILE, database, models=[af, afa])
    assert errors == 0
def test_null_toa(database):
    """ Tests that null TOA is ignored even though everything else matches. """
    tas = _TAS
    afa = AwardFinancialAssistanceFactory(tas=tas,
                                          fain='aBc',
                                          uri=None,
                                          federal_action_obligation=1,
                                          original_loan_subsidy_cost='1',
                                          record_type='2')
    af = AwardFinancialFactory(tas=tas,
                               submisson_id=afa.submission_id,
                               fain=afa.fain.lower(),
                               uri=None,
                               transaction_obligated_amou=None)

    errors = number_of_errors(_FILE, database, models=[afa, af])
    assert errors == 1
def test_equal_uri(database):
    """ Tests that File D2 (award financial assistance) uri matches File C (award financial) uri. """
    tas = _TAS
    afa = AwardFinancialAssistanceFactory(tas=tas,
                                          fain=None,
                                          uri='xYz',
                                          federal_action_obligation=1,
                                          original_loan_subsidy_cost='1',
                                          record_type='1')
    af = AwardFinancialFactory(tas=tas,
                               submisson_id=afa.submission_id,
                               fain=None,
                               uri=afa.uri.lower(),
                               transaction_obligated_amou=0)

    errors = number_of_errors(_FILE, database, models=[afa, af])
    assert errors == 0