def test_success_scenario2(database):
    tas1 = TASFactory()
    tas2 = TASFactory()
    database.session.add_all([tas1, tas2])
    database.session.flush()

    ap = AppropriationFactory(account_num=tas1.account_num,
                              deobligations_recoveries_r_cpe=8)
    # Contributes 4
    op_1 = ObjectClassProgramActivityFactory(account_num=tas1.account_num,
                                             ussgl487100_downward_adjus_cpe=1,
                                             ussgl497100_downward_adjus_cpe=1,
                                             ussgl487200_downward_adjus_cpe=1,
                                             ussgl497200_downward_adjus_cpe=1)
    # Contributes another 4
    op_2 = ObjectClassProgramActivityFactory(account_num=tas1.account_num,
                                             ussgl487100_downward_adjus_cpe=1,
                                             ussgl497100_downward_adjus_cpe=1,
                                             ussgl487200_downward_adjus_cpe=1,
                                             ussgl497200_downward_adjus_cpe=1)
    # Doesn't contribute, different TAS
    op_3 = ObjectClassProgramActivityFactory(account_num=tas2.account_num,
                                             ussgl487100_downward_adjus_cpe=1,
                                             ussgl497100_downward_adjus_cpe=1,
                                             ussgl487200_downward_adjus_cpe=1,
                                             ussgl497200_downward_adjus_cpe=1)
    assert number_of_errors(_FILE, database, models=[ap, op_1, op_2,
                                                     op_3]) == 0
def test_success(database):
    """ Tests that, for entries with the matching TAS, Appropriations
    deobligations_recoveries_r_cpe equals the sum of all corresponding entries
    for Object Class Program Acitivity fields ussgl487100_downward_adjus_cpe,
    ussgl497100_downward_adjus_cpe, ussgl487200_downward_adjus_cpe,
    ussgl497200_downward_adjus_cpe"""
    tas = TASFactory()
    database.session.add(tas)
    database.session.flush()

    ap = AppropriationFactory(account_num=tas.account_num,
                              deobligations_recoveries_r_cpe=8)
    # Contributes 4
    op_1 = ObjectClassProgramActivityFactory(account_num=tas.account_num,
                                             ussgl487100_downward_adjus_cpe=1,
                                             ussgl497100_downward_adjus_cpe=1,
                                             ussgl487200_downward_adjus_cpe=1,
                                             ussgl497200_downward_adjus_cpe=1)
    # Contributes another 4
    op_2 = ObjectClassProgramActivityFactory(account_num=tas.account_num,
                                             ussgl487100_downward_adjus_cpe=1,
                                             ussgl497100_downward_adjus_cpe=1,
                                             ussgl487200_downward_adjus_cpe=1,
                                             ussgl497200_downward_adjus_cpe=1)

    assert number_of_errors(_FILE, database, models=[ap, op_1, op_2]) == 0
示例#3
0
def test_success(database):
    """ Test that agency codes are matched against cgac correctly """
    ocpa = ObjectClassProgramActivityFactory()
    ocpa_null = ObjectClassProgramActivityFactory(allocation_transfer_agency = None)
    cgac = CGACFactory(cgac_code = ocpa.allocation_transfer_agency)

    errors = number_of_errors(_FILE, database, models=[ocpa, ocpa_null, cgac])
    assert errors == 0
示例#4
0
def test_success(database):
    """ Test for USSGL 48XX & 49XX (except 487X & 497X) if any one is provided then
    by_direct_reimbursable_fun is not empty """

    op = ObjectClassProgramActivityFactory()
    assert number_of_errors(_FILE, database, models=[op]) == 0

    op = ObjectClassProgramActivityFactory(object_class=1234, by_direct_reimbursable_fun=None)
    assert number_of_errors(_FILE, database, models=[op]) == 0
def test_sum_matches(database):
    tas = TASFactory()
    database.session.add(tas)
    database.session.flush()

    op1 = ObjectClassProgramActivityFactory(tas_id=tas.tas_id)
    op2 = ObjectClassProgramActivityFactory(tas_id=tas.tas_id)
    approp_val = -sum(op.obligations_incurred_by_pr_cpe for op in (op1, op2))
    approp = AppropriationFactory(tas_id=tas.tas_id, obligations_incurred_total_cpe=approp_val)
    assert number_of_errors(_FILE, database, models=[approp, op1, op2]) == 0
示例#6
0
def test_success(database):
    """ Test that calculation passes with equal values and with a null """

    value = Decimal('100.23')
    ocpa = ObjectClassProgramActivityFactory(obligations_undelivered_or_fyb = value,
                                             ussgl480100_undelivered_or_fyb = value)
    ocpa_null = ObjectClassProgramActivityFactory(obligations_undelivered_or_fyb = 0,
                                                  ussgl480100_undelivered_or_fyb = None)

    assert number_of_errors(_FILE, database, models=[ocpa, ocpa_null]) == 0
def test_failure(database):
    """ Test invalid 4 digit object class code and corresponding reimbursable funding source """

    op = ObjectClassProgramActivityFactory(object_class='1234',
                                           by_direct_reimbursable_fun='x')
    assert number_of_errors(_FILE, database, models=[op]) == 1

    op = ObjectClassProgramActivityFactory(object_class='2234',
                                           by_direct_reimbursable_fun='Y')
    assert number_of_errors(_FILE, database, models=[op]) == 1
def test_success(database):
    """ Test that availability type code is either x or absent """
    ocpa = ObjectClassProgramActivityFactory(availability_type_code='X')
    ocpa_lower = ObjectClassProgramActivityFactory(availability_type_code='x')
    ocpa_null = ObjectClassProgramActivityFactory(availability_type_code=None)

    errors = number_of_errors(_FILE,
                              database,
                              models=[ocpa, ocpa_null, ocpa_lower])
    assert errors == 0
def test_sum_matches(database):
    tas = TASFactory()
    database.session.add(tas)
    database.session.flush()

    op1 = ObjectClassProgramActivityFactory(tas_id=tas.tas_id)
    op2 = ObjectClassProgramActivityFactory(tas_id=tas.tas_id)
    approp_val = sum(op.gross_outlay_amount_by_pro_cpe for op in (op1, op2))
    approp = AppropriationFactory(tas_id=tas.tas_id,
                                  gross_outlay_amount_by_tas_cpe=approp_val)
    assert number_of_errors(_FILE, database, models=[approp, op1, op2]) == 0
def test_failure(database):
    """ Test fail DEFC values must be A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, or T (plus future
        codes as determined by OMB). DEFC cannot be blank.
    """
    op1 = ObjectClassProgramActivityFactory(disaster_emergency_fund_code='z')
    op2 = ObjectClassProgramActivityFactory(disaster_emergency_fund_code='3')
    op3 = ObjectClassProgramActivityFactory(disaster_emergency_fund_code='AA')
    op4 = ObjectClassProgramActivityFactory(disaster_emergency_fund_code='')

    errors = number_of_errors(_FILE, database, models=[op1, op2, op3, op4])
    assert errors == 4
示例#11
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"""
    not_req_ocpa = ObjectClassProgramActivityFactory(
        object_class=randint(1000, 9999), by_direct_reimbursable_fun="")
    req_present_ocpa = ObjectClassProgramActivityFactory(
        object_class=str(randint(0, 999)).zfill(3),
        by_direct_reimbursable_fun="d")

    errors = number_of_errors(_FILE,
                              database,
                              models=[not_req_ocpa, req_present_ocpa])
    assert errors == 0
示例#12
0
def test_sum_does_not_match(database):
    tas = TASFactory()
    database.session.add(tas)
    database.session.flush()

    op1 = ObjectClassProgramActivityFactory(account_num=tas.account_num)
    op2 = ObjectClassProgramActivityFactory(account_num=tas.account_num)
    approp_val = -sum(op.obligations_incurred_by_pr_cpe for op in (op1, op2))
    approp_val += randint(1, 9999)  # different value now
    approp = AppropriationFactory(account_num=tas.account_num,
                                  obligations_incurred_total_cpe=approp_val)
    assert number_of_errors(_FILE, database, models=[approp, op1, op2]) == 1
def test_success(database):
    """ Test that calculation passes with equal values and with a null """

    value_one = Decimal('100.00')
    value_two = Decimal('200.00')
    ocpa = ObjectClassProgramActivityFactory(obligations_delivered_orde_cpe = value_one+value_two,
                                             ussgl490100_delivered_orde_cpe = value_one,
                                             ussgl498100_upward_adjustm_cpe = value_two)
    ocpa_null = ObjectClassProgramActivityFactory(obligations_delivered_orde_cpe = value_one,
                                                  ussgl490100_delivered_orde_cpe = None,
                                                  ussgl498100_upward_adjustm_cpe = value_one)

    assert number_of_errors(_FILE, database, models=[ocpa, ocpa_null]) == 0
def test_success(database):
    """ Tests that Beginning Period of Availability and Ending Period of Availability are blank
    if Availability Type Code = X """
    tas = "".join([_TAS, "_success"])

    op1 = ObjectClassProgramActivityFactory(availability_type_code='x',
                                            beginning_period_of_availa=None,
                                            ending_period_of_availabil=None)
    op2 = ObjectClassProgramActivityFactory(availability_type_code='X',
                                            beginning_period_of_availa=None,
                                            ending_period_of_availabil=None)

    assert number_of_errors(_FILE, database, models=[op1, op2]) == 0
def test_failure(database):
    """ Test invalid object class code (3 digits) """

    # This should return because if it's '0000' '000', '00', '0' a warning should be returned
    op = ObjectClassProgramActivityFactory(object_class='0000')
    assert number_of_errors(_FILE, database, models=[op]) == 1

    op = ObjectClassProgramActivityFactory(object_class='000')
    assert number_of_errors(_FILE, database, models=[op]) == 1

    op = ObjectClassProgramActivityFactory(object_class='00')
    assert number_of_errors(_FILE, database, models=[op]) == 1

    op = ObjectClassProgramActivityFactory(object_class='0')
    assert number_of_errors(_FILE, database, models=[op]) == 1
def test_success(database):
    """ Test DEFC values must be A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, or T (plus future codes as
        determined by OMB). DEFC cannot be blank.
    """
    op1 = ObjectClassProgramActivityFactory(disaster_emergency_fund_code='a')
    op2 = ObjectClassProgramActivityFactory(disaster_emergency_fund_code='Q')
    op3 = ObjectClassProgramActivityFactory(disaster_emergency_fund_code='o')
    defc1 = DEFCFactory(code='A')
    defc2 = DEFCFactory(code='Q')
    defc3 = DEFCFactory(code='O')

    errors = number_of_errors(_FILE,
                              database,
                              models=[op1, op2, op3, defc1, defc2, defc3])
    assert errors == 0
示例#17
0
def test_failure(database):
    """ Test that calculation fails for unequal values """
    ocpa = ObjectClassProgramActivityFactory(
        obligations_delivered_orde_fyb=Decimal('101.23'),
        ussgl490100_delivered_orde_fyb=Decimal('102.34'))

    assert number_of_errors(_FILE, database, models=[ocpa]) == 1
def test_success_null_ata(database):
    """ Tests that TAS/DEFC for SF-133 are present in File B (null ATA) """
    submission_id = randint(1000, 10000)
    tas, period, year, code = 'some-tas', 2, 2002, 'some-code'

    sf1 = SF133Factory(tas=tas,
                       period=period,
                       fiscal_year=year,
                       allocation_transfer_agency=None,
                       agency_identifier=code,
                       disaster_emergency_fund_code='N',
                       line=2190,
                       amount=4)
    submission = SubmissionFactory(submission_id=submission_id,
                                   reporting_fiscal_period=period,
                                   reporting_fiscal_year=year,
                                   cgac_code=code,
                                   is_quarter_format=False)
    op = ObjectClassProgramActivityFactory(tas=tas,
                                           disaster_emergency_fund_code='n',
                                           submission_id=submission_id)

    errors = number_of_errors(_FILE,
                              database,
                              models=[sf1, op],
                              submission=submission)
    assert errors == 0
def test_non_matching_defc(database):
    """ Tests that even if TAS matches, if DEFC doesn't it throws an error """
    submission_id = randint(1000, 10000)
    tas, period, year, code = 'some-tas', 2, 2002, 'some-code'

    sf1 = SF133Factory(tas=tas,
                       period=period,
                       fiscal_year=year,
                       allocation_transfer_agency=code,
                       agency_identifier='some-other-code',
                       disaster_emergency_fund_code='N',
                       line=3020,
                       amount=4)
    submission = SubmissionFactory(submission_id=submission_id,
                                   reporting_fiscal_period=period,
                                   reporting_fiscal_year=year,
                                   cgac_code=code,
                                   is_quarter_format=False)
    op = ObjectClassProgramActivityFactory(tas=tas,
                                           disaster_emergency_fund_code='m',
                                           submission_id=submission_id)

    errors = number_of_errors(_FILE,
                              database,
                              models=[sf1, op],
                              submission=submission)
    assert errors == 1
def test_ignore_quarterly_submissions(database):
    """ Tests that rule doesn't apply to quarterly submissions """
    submission_id = randint(1000, 10000)
    tas, period, year, code = 'some-tas', 2, 2002, 'some-code'

    sf1 = SF133Factory(tas=tas,
                       period=period,
                       fiscal_year=year,
                       allocation_transfer_agency=code,
                       agency_identifier=code,
                       disaster_emergency_fund_code='N',
                       line=3020,
                       amount=4)
    submission = SubmissionFactory(submission_id=submission_id,
                                   reporting_fiscal_period=period,
                                   reporting_fiscal_year=year,
                                   cgac_code=code,
                                   is_quarter_format=True)
    op = ObjectClassProgramActivityFactory(tas='a-different-tas',
                                           submission_id=submission_id,
                                           disaster_emergency_fund_code='n')

    errors = number_of_errors(_FILE,
                              database,
                              models=[sf1, op],
                              submission=submission)
    assert errors == 0
def test_success_fiscal_year(database):
    """ Testing valid name for FY that matches with budget_year"""

    op = ObjectClassProgramActivityFactory(row_number=1,
                                           submission_id='1',
                                           agency_identifier='test',
                                           main_account_code='test',
                                           program_activity_name='test',
                                           program_activity_code='test')

    pa_1 = ProgramActivityFactory(budget_year=2016,
                                  agency_id='test',
                                  allocation_transfer_id='test',
                                  account_number='test',
                                  program_activity_name='test',
                                  program_activity_code='test')

    pa_2 = ProgramActivityFactory(budget_year=2017,
                                  agency_id='test2',
                                  allocation_transfer_id='test2',
                                  account_number='test2',
                                  program_activity_name='test2',
                                  program_activity_code='test2')

    submission = SubmissionFactory(submission_id='1',
                                   reporting_fiscal_year='2017')

    assert number_of_errors(_FILE,
                            database,
                            models=[op, pa_1, pa_2],
                            submission=submission) == 0
def test_success_ignore_case(database):
    """ Testing program activity validation to ignore case """

    populate_publish_status(database)

    op = ObjectClassProgramActivityFactory(row_number=1,
                                           submission_id=1,
                                           beginning_period_of_availa=2016,
                                           agency_identifier='test',
                                           main_account_code='test',
                                           program_activity_name='TEST',
                                           program_activity_code='test')

    pa = ProgramActivityFactory(fiscal_year_quarter='FY17Q4',
                                agency_id='test',
                                allocation_transfer_id='test',
                                account_number='test',
                                program_activity_name='test',
                                program_activity_code='test')

    submission = SubmissionFactory(
        submission_id=1,
        reporting_fiscal_year='2017',
        reporting_fiscal_period=12,
        publish_status_id=PUBLISH_STATUS_DICT['unpublished'])

    assert number_of_errors(_FILE,
                            database,
                            models=[op, pa],
                            submission=submission) == 0
def test_failure_fiscal_year_quarter(database):
    """ Testing invalid program activity, does not match with fiscal_year_quarter """

    populate_publish_status(database)

    op = ObjectClassProgramActivityFactory(row_number=1,
                                           submission_id=1,
                                           agency_identifier='test2',
                                           main_account_code='test2',
                                           program_activity_name='test2',
                                           program_activity_code='test2')

    pa = ProgramActivityFactory(fiscal_year_quarter='FY15Q1',
                                agency_id='test',
                                allocation_transfer_id='test',
                                account_number='test',
                                program_activity_name='test',
                                program_activity_code='test')

    submission = SubmissionFactory(
        submission_id=1,
        reporting_fiscal_year='2018',
        reporting_fiscal_period=9,
        publish_status_id=PUBLISH_STATUS_DICT['unpublished'])

    assert number_of_errors(_FILE,
                            database,
                            models=[op, pa],
                            submission=submission) == 1
def test_failure(database):
    """ Tests that all combinations of TAS, program activity code, and object class in File C do not exist in File B """
    tas1 = TASFactory()
    tas2 = TASFactory()
    database.session.add_all([tas1, tas2])
    database.session.flush()

    op = ObjectClassProgramActivityFactory(tas_id=tas1.tas_id,
                                           program_activity_code='1',
                                           object_class='1')

    af1 = AwardFinancialFactory(tas_id=tas1.tas_id,
                                program_activity_code='1',
                                object_class='1')
    af2 = AwardFinancialFactory(tas_id=tas2.tas_id,
                                program_activity_code='1',
                                object_class='1')
    af3 = AwardFinancialFactory(tas_id=tas1.tas_id,
                                program_activity_code='2',
                                object_class='1')
    af4 = AwardFinancialFactory(tas_id=tas1.tas_id,
                                program_activity_code='1',
                                object_class='2')

    assert number_of_errors(_FILE, database, models=[op, af1, af2, af3,
                                                     af4]) == 3
def test_sum_matches(database):
    """ Test the GrossOutlayAmountByTAS_CPE amount in the appropriation file (A) does not equal the sum of the
        corresponding GrossOutlayAmountByProgramObjectClass_CPE values in the award financial file (B).
        {This value is the sum of all Gross Outlay Amounts reported in file B, to indicate year-to-date activity by
        TAS/Subaccount.}
    """
    tas = TASFactory()
    database.session.add(tas)
    database.session.flush()

    op1 = ObjectClassProgramActivityFactory(account_num=tas.account_num)
    op2 = ObjectClassProgramActivityFactory(account_num=tas.account_num)
    approp_val = sum(op.gross_outlay_amount_by_pro_cpe for op in (op1, op2))
    approp = AppropriationFactory(account_num=tas.account_num,
                                  gross_outlay_amount_by_tas_cpe=approp_val)
    assert number_of_errors(_FILE, database, models=[approp, op1, op2]) == 0
def test_success_ignore_optional_before_2021(database):
    """ Ignore AwardFinancial entries that are prior to year 2021 and are indicated by the proper PAC and PAN. """
    tas = TASFactory()
    database.session.add(tas)
    database.session.flush()

    op = ObjectClassProgramActivityFactory(account_num=tas.account_num,
                                           program_activity_code='1',
                                           program_activity_name='PA1',
                                           object_class='1',
                                           disaster_emergency_fund_code='s')

    af = AwardFinancialFactory(account_num=tas.account_num,
                               program_activity_code='1',
                               program_activity_name='PA1',
                               object_class='1',
                               disaster_emergency_fund_code='s')
    af2 = AwardFinancialFactory(
        account_num=tas.account_num,
        program_activity_code='OPTN',
        program_activity_name='FIELD IS optional PRIOR TO FY21',
        object_class='1',
        disaster_emergency_fund_code='s')

    sub = SubmissionFactory(reporting_fiscal_year=2020)

    assert number_of_errors(_FILE,
                            database,
                            models=[op, af, af2],
                            submission=sub) == 0
def test_success(database):
    """ Test valid object class code (3 digits) """

    op = ObjectClassProgramActivityFactory(object_class='object_class')
    oc = ObjectClassFactory(object_class_code='object_class')

    assert number_of_errors(_FILE, database, models=[op, oc]) == 0
def test_fail_ignore_blank_program_activity_name(database):
    """ Testing program activity name validation to not ignore blanks """
    op = ObjectClassProgramActivityFactory(row_number=1, beginning_period_of_availa=2016, agency_identifier='test',
                                           main_account_code='test', program_activity_name='',
                                           program_activity_code='test',
                                           deobligations_recov_by_pro_cpe=0, gross_outlay_amount_by_pro_cpe=0,
                                           gross_outlay_amount_by_pro_fyb=0, gross_outlays_delivered_or_cpe=0,
                                           gross_outlays_delivered_or_fyb=0, gross_outlays_undelivered_cpe=0,
                                           gross_outlays_undelivered_fyb=0, obligations_delivered_orde_cpe=0,
                                           obligations_delivered_orde_fyb=0, obligations_incurred_by_pr_cpe=0,
                                           obligations_undelivered_or_cpe=0, obligations_undelivered_or_fyb=0,
                                           ussgl480100_undelivered_or_cpe=0, ussgl480100_undelivered_or_fyb=0,
                                           ussgl480200_undelivered_or_cpe=0, ussgl480200_undelivered_or_fyb=0,
                                           ussgl483100_undelivered_or_cpe=0, ussgl483200_undelivered_or_cpe=0,
                                           ussgl487100_downward_adjus_cpe=0, ussgl487200_downward_adjus_cpe=0,
                                           ussgl488100_upward_adjustm_cpe=0, ussgl488200_upward_adjustm_cpe=0,
                                           ussgl490100_delivered_orde_cpe=0, ussgl490100_delivered_orde_fyb=0,
                                           ussgl490200_delivered_orde_cpe=0, ussgl490800_authority_outl_cpe=0,
                                           ussgl490800_authority_outl_fyb=0, ussgl493100_delivered_orde_cpe=0,
                                           ussgl497100_downward_adjus_cpe=0, ussgl497200_downward_adjus_cpe=0,
                                           ussgl498100_upward_adjustm_cpe=0, ussgl498200_upward_adjustm_cpe=0)

    pa = ProgramActivityFactory(fiscal_year_period='FYP', agency_id='test', allocation_transfer_id='test',
                                account_number='test', program_activity_name='test', program_activity_code='test')

    assert number_of_errors(_FILE, database, models=[op, pa]) == 1
def test_failure_success_ignore_recertification(database):
    """ Testing invalid program activity, ingored since FY2017 Q2 or Q3 """

    populate_publish_status(database)

    populate_publish_status(database)

    op = ObjectClassProgramActivityFactory(row_number=1, submission_id=1, agency_identifier='test2',
                                           main_account_code='test2', program_activity_name='test2',
                                           program_activity_code='test2')

    pa = ProgramActivityFactory(fiscal_year_period='FY14P03', agency_id='test', allocation_transfer_id='test',
                                account_number='test', program_activity_name='test', program_activity_code='test')

    # Test with published submission
    submission = SubmissionFactory(submission_id=1, reporting_fiscal_year='2017', reporting_fiscal_period=6,
                                   publish_status_id=PUBLISH_STATUS_DICT['updated'])

    assert number_of_errors(_FILE, database, models=[op, pa], submission=submission) == 0

    # Test with unpublished submission
    submission = SubmissionFactory(submission_id=2, reporting_fiscal_year='2017', reporting_fiscal_period=6,
                                   publish_status_id=PUBLISH_STATUS_DICT['unpublished'])

    assert number_of_errors(_FILE, database, models=[op, pa], submission=submission) == 0
def test_success(database):
    """ Test Object Class Program Activity gross_outlays_delivered_or_fyb equals ussgl490800_authority_outl_fyb """

    op = ObjectClassProgramActivityFactory(gross_outlays_delivered_or_fyb=1,
                                           ussgl490800_authority_outl_fyb=1)

    assert number_of_errors(_FILE, database, models=[op]) == 0