Exemple #1
0
def test_failure(database):
    """ Tests that SF 133 amount sum for lines 1750, 1850 does not match Appropriation spending_authority_from_of_cpe
        for the specified fiscal year and period
    """
    tas = "".join([_TAS, "_failure"])

    sf_1 = SF133(line=1750,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    sf_2 = SF133(line=1850,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    ap_1 = Appropriation(job_id=1,
                         row_number=1,
                         tas=tas,
                         spending_authority_from_of_cpe=1)
    ap_2 = Appropriation(job_id=1,
                         row_number=1,
                         tas=tas,
                         spending_authority_from_of_cpe=None)

    assert number_of_errors(_FILE, database, models=[sf_1, sf_2, ap_1,
                                                     ap_2]) == 2
Exemple #2
0
def test_success(database):
    """ Tests that SF 133 amount for line 1000 matches Appropriation budget_authority_unobligat_fyb for the specified
        fiscal year and period
    """
    tas_1 = "".join([_TAS, "_success"])
    tas_2 = "".join([_TAS, "_success_2"])

    sf_1 = SF133(line=1000,
                 tas=tas_1,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    sf_2 = SF133(line=1000,
                 tas=tas_2,
                 period=1,
                 fiscal_year=2016,
                 amount=0,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    ap_1 = Appropriation(job_id=1,
                         row_number=1,
                         tas=tas_1,
                         budget_authority_unobligat_fyb=1)
    ap_2 = Appropriation(job_id=2,
                         row_number=1,
                         tas=tas_2,
                         budget_authority_unobligat_fyb=None)

    assert number_of_errors(_FILE, database, models=[sf_1, sf_2, ap_1,
                                                     ap_2]) == 0
def test_move_certified_data(database):
    """ Tests the move_certified_data function """
    with Flask('test-app').app_context():
        sess = database.session

        # Create 2 submissions
        sub_1 = SubmissionFactory()
        sub_2 = SubmissionFactory()
        sess.add_all([sub_1, sub_2])
        sess.commit()

        # Create jobs so we can put a job ID into the tables
        job_1 = JobFactory(submission_id=sub_1.submission_id)
        job_2 = JobFactory(submission_id=sub_2.submission_id)
        sess.add_all([job_1, job_2])
        sess.commit()

        # Create Appropriation entries, 1 per submission, and one of each other kind
        approp_1 = Appropriation(submission_id=sub_1.submission_id, job_id=job_1.job_id, row_number=1,
                                 spending_authority_from_of_cpe=2)
        approp_2 = Appropriation(submission_id=sub_2.submission_id, job_id=job_2.job_id, row_number=1,
                                 spending_authority_from_of_cpe=2)
        ocpa = ObjectClassProgramActivity(submission_id=sub_1.submission_id, job_id=job_1.job_id, row_number=1)
        award_fin = AwardFinancial(submission_id=sub_1.submission_id, job_id=job_1.job_id, row_number=1)
        error_1 = ErrorMetadata(job_id=job_1.job_id)
        error_2 = ErrorMetadata(job_id=job_2.job_id)
        sess.add_all([approp_1, approp_2, ocpa, award_fin, error_1, error_2])
        sess.commit()

        move_certified_data(sess, sub_1.submission_id)

        # There are 2 entries, we only want to move the 1 with the submission ID that matches
        approp_query = sess.query(CertifiedAppropriation).filter_by(submission_id=sub_1.submission_id).all()
        assert len(approp_query) == 1
        assert approp_query[0].spending_authority_from_of_cpe == 2

        # Make sure the others got moved as well
        ocpa_query = sess.query(CertifiedObjectClassProgramActivity).filter_by(submission_id=sub_1.submission_id).all()
        award_query = sess.query(CertifiedAwardFinancial).filter_by(submission_id=sub_1.submission_id).all()
        # Query all job IDs but only one result should show up
        error_query = sess.query(CertifiedErrorMetadata).\
            filter(CertifiedErrorMetadata.job_id.in_([job_1.job_id, job_2.job_id])).all()
        assert len(ocpa_query) == 1
        assert len(award_query) == 1
        assert len(error_query) == 1

        # Change the Appropriation data
        approp_1.spending_authority_from_of_cpe = 5
        sess.refresh(approp_1)

        # Move the data again (recertify) and make sure we didn't add extras, just adjusted the one we had
        move_certified_data(sess, sub_1.submission_id)
        approp_query = sess.query(CertifiedAppropriation).filter_by(submission_id=sub_1.submission_id).all()
        assert len(approp_query) == 1
        assert approp_query[0].spending_authority_from_of_cpe == 2
Exemple #4
0
def test_failure(database):
    """ Tests that SF 133 amount for line 1000 does not match Appropriation budget_authority_unobligat_fyb for the
        specified fiscal year and period
    """
    tas = "".join([_TAS, "_failure"])

    sf = SF133(line=1000, tas=tas, period=1, fiscal_year=2016, amount=1, agency_identifier="sys",
               main_account_code="000", sub_account_code="000")
    ap_1 = Appropriation(job_id=1, row_number=1, tas=tas, budget_authority_unobligat_fyb=0)
    ap_2 = Appropriation(job_id=2, row_number=1, tas=tas, budget_authority_unobligat_fyb=None)

    assert number_of_errors(_FILE, database, models=[sf, ap_1, ap_2]) == 2
def test_success(database):
    """ Tests that SF 133 amount sum for lines 1540, 1640 matches Appropriation contract_authority_amount_cpe for the
        specified fiscal year and period
    """
    tas_1 = "".join([_TAS, "_success"])
    tas_2 = "".join([_TAS, "_success_2"])

    sf_1 = SF133(line=1540,
                 tas=tas_1,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    sf_2 = SF133(line=1640,
                 tas=tas_1,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    sf_3 = SF133(line=1540,
                 tas=tas_2,
                 period=1,
                 fiscal_year=2016,
                 amount=0,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    sf_4 = SF133(line=1640,
                 tas=tas_2,
                 period=1,
                 fiscal_year=2016,
                 amount=0,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    ap_1 = Appropriation(job_id=1,
                         row_number=1,
                         tas=tas_1,
                         contract_authority_amount_cpe=2)
    ap_2 = Appropriation(job_id=2,
                         row_number=1,
                         tas=tas_2,
                         contract_authority_amount_cpe=None)

    assert number_of_errors(_FILE,
                            database,
                            models=[sf_1, sf_2, sf_3, sf_4, ap_1, ap_2]) == 0
def test_move_certified_data(database):
    """ Tests the move_certified_data function """
    with Flask('test-app').app_context():
        sess = database.session

        # Create 2 submissions
        sub_1 = SubmissionFactory()
        sub_2 = SubmissionFactory()
        sess.add_all([sub_1, sub_2])
        sess.commit()

        # Create jobs so we can put a job ID into the tables
        job_1 = JobFactory(submission_id=sub_1.submission_id)
        job_2 = JobFactory(submission_id=sub_2.submission_id)
        sess.add_all([job_1, job_2])
        sess.commit()

        # Create Appropriation entries, 1 per submission, and one of each other kind
        approp_1 = Appropriation(submission_id=sub_1.submission_id, job_id=job_1.job_id, row_number=1,
                                 spending_authority_from_of_cpe=2)
        approp_2 = Appropriation(submission_id=sub_2.submission_id, job_id=job_2.job_id, row_number=1,
                                 spending_authority_from_of_cpe=2)
        ocpa = ObjectClassProgramActivity(submission_id=sub_1.submission_id, job_id=job_1.job_id, row_number=1)
        award_fin = AwardFinancial(submission_id=sub_1.submission_id, job_id=job_1.job_id, row_number=1)
        sess.add_all([approp_1, approp_2, ocpa, award_fin])
        sess.commit()

        move_certified_data(sess, sub_1.submission_id)

        # There are 2 entries, we only want to move the 1 with the submission ID that matches
        approp_query = sess.query(CertifiedAppropriation).filter_by(submission_id=sub_1.submission_id).all()
        assert len(approp_query) == 1
        assert approp_query[0].spending_authority_from_of_cpe == 2

        # Make sure the other 2 got moved as well
        ocpa_query = sess.query(CertifiedObjectClassProgramActivity).filter_by(submission_id=sub_1.submission_id).all()
        award_query = sess.query(CertifiedAwardFinancial).filter_by(submission_id=sub_1.submission_id).all()
        assert len(ocpa_query) == 1
        assert len(award_query) == 1

        # Change the Appropriation data
        approp_1.spending_authority_from_of_cpe = 5
        sess.refresh(approp_1)

        # Move the data again (recertify) and make sure we didn't add extras, just adjusted the one we had
        move_certified_data(sess, sub_1.submission_id)
        approp_query = sess.query(CertifiedAppropriation).filter_by(submission_id=sub_1.submission_id).all()
        assert len(approp_query) == 1
        assert approp_query[0].spending_authority_from_of_cpe == 2
def test_success(database):
    """ Tests that SF 133 amount for line 1910 matches Appropriation total_budgetary_resources_cpe
        for the specified fiscal year and period
    """

    tas = 'tas_one_line'

    sf = SF133(line=1910,
               tas=tas,
               period=1,
               fiscal_year=2016,
               amount=1,
               agency_identifier='sys',
               main_account_code='000',
               sub_account_code='000')
    ap = Appropriation(job_id=1,
                       row_number=1,
                       tas=tas,
                       total_budgetary_resources_cpe=1)

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

    # Test with split SF133 lines
    tas = 'tas_two_lines'

    sf_1 = SF133(line=1910,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier='sys',
                 main_account_code='000',
                 sub_account_code='000',
                 disaster_emergency_fund_code='n')
    sf_2 = SF133(line=1910,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=4,
                 agency_identifier='sys',
                 main_account_code='000',
                 sub_account_code='000',
                 disaster_emergency_fund_code='o')
    ap = Appropriation(job_id=1,
                       row_number=1,
                       tas=tas,
                       total_budgetary_resources_cpe=5)

    assert number_of_errors(_FILE, database, models=[sf_1, sf_2, ap]) == 0
def test_failure(database):
    """ Tests that SF 133 amount sum for lines 1540, 1640 does not match Appropriation contract_authority_amount_cpe
        for the specified fiscal year and period """
    tas = "".join([_TAS, "_failure"])

    sf_1 = SF133(line=1540,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    sf_2 = SF133(line=1640,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    ap = Appropriation(job_id=1,
                       row_number=1,
                       tas=tas,
                       contract_authority_amount_cpe=1)

    models = [sf_1, sf_2, ap]

    assert number_of_errors(_FILE, database, models=models) == 1
def test_sum_does_not_match(database):
    op1_val, op2_val = randint(1, 9999), randint(1, 9999)
    approp_val = -op1_val - op2_val + randint(1, 9999)
    op1 = ObjectClassProgramActivity(obligations_incurred_by_pr_cpe=op1_val)
    op2 = ObjectClassProgramActivity(obligations_incurred_by_pr_cpe=op2_val)
    approp = Appropriation(obligations_incurred_total_cpe=approp_val)
    set_shared_values(op1, op2, approp)
    assert number_of_errors(_FILE, database, models=[approp, op1, op2]) == 1
Exemple #10
0
def test_failure(database):
    """ Tests that TAS for File A are not present in SF-133 """
    tas = "".join([_TAS, "_failure"])

    ap1 = Appropriation(job_id=1, row_number=1, tas=tas)
    ap2 = Appropriation(job_id=1, row_number=2, tas=tas)

    sf = SF133(line=1021,
               tas='1',
               period=1,
               fiscal_year=2016,
               amount=1,
               agency_identifier="sys",
               main_account_code="000",
               sub_account_code="000")

    assert number_of_errors(_FILE, database, models=[ap1, ap2, sf]) == 2
def test_success(database):
    """ Tests that TAS values in File A should exist in File B for the same reporting period """
    tas = "".join([_TAS, "_success"])

    ap = Appropriation(job_id=1, row_number=1, tas=tas)

    op = ObjectClassProgramActivity(job_id=1, row_number=1, tas=tas)

    assert number_of_errors(_FILE, database, models=[ap, op]) == 0
Exemple #12
0
def test_failure(database):
    """ Tests that TAS values in File B do not exist in File A for the same reporting period """
    tas = "".join([_TAS, "_success"])

    op = ObjectClassProgramActivity(job_id=1, row_number=1, tas=tas)

    ap = Appropriation(job_id=1, row_number=1, tas='1')

    assert number_of_errors(_FILE, database, models=[op, ap]) == 1
Exemple #13
0
def test_sum_does_not_match(database):
    op1_val, op2_val = randint(1, 9999), randint(1, 9999)
    approp_val = op1_val + op2_val + randint(1, 9999)
    op1 = ObjectClassProgramActivity(gross_outlay_amount_by_pro_cpe=op1_val)
    op2 = ObjectClassProgramActivity(gross_outlay_amount_by_pro_cpe=op2_val)
    approp = Appropriation(gross_outlay_amount_by_tas_cpe=approp_val)
    set_shared_values(op1, op2, approp)
    assert number_of_errors(_FILE, database,
                            models=[approp, op1, op2]) == 1
Exemple #14
0
def test_success(database):
    """ Tests that SF 133 amount sum for line 2490 matches Appropriation unobligated_balance_cpe
        for the specified fiscal year and period """
    tas = "".join([_TAS, "_success"])

    sf = SF133(line=2490, tas=tas, period=1, fiscal_year=2016, amount=1, agency_identifier="sys",
               main_account_code="000", sub_account_code="000")
    ap = Appropriation(job_id=1, row_number=1, tas=tas, unobligated_balance_cpe=1)

    assert number_of_errors(_FILE, database, models=[sf, ap]) == 0
Exemple #15
0
def test_failure(database):
    """ Tests that SF 133 amount sum for line 3020 does not match Appropriation gross_outlay_amount_by_tas_cpe
        for the specified fiscal year and period """
    tas = "".join([_TAS, "_failure"])

    sf = SF133(line=3020, tas=tas, period=1, fiscal_year=2016, amount=1, agency_identifier="sys",
               main_account_code="000", sub_account_code="000")
    ap = Appropriation(job_id=1, row_number=1, tas=tas, gross_outlay_amount_by_tas_cpe=0)

    assert number_of_errors(_FILE, database, models=[sf, ap]) == 1
Exemple #16
0
def test_failure(database):
    """ Tests that SF 133 amount sum for line 2500 does not match Appropriation status_of_budgetary_resour_cpe
        for the specified fiscal year and period
    """
    tas = 'fail_tas'

    sf = SF133(line=2500, tas=tas, period=1, fiscal_year=2016, amount=1, agency_identifier='sys',
               main_account_code='000', sub_account_code='000')
    ap = Appropriation(job_id=1, row_number=1, tas=tas, status_of_budgetary_resour_cpe=0)

    assert number_of_errors(_FILE, database, models=[sf, ap]) == 1
def test_success(database):
    """ Tests that SF 133 amount sum for lines 1021, 1033 matches Appropriation deobligations_recoveries_r_cpe
        for the specified fiscal year and period """
    tas = "".join([_TAS, "_success"])

    sf_1 = SF133(line=1021, tas=tas, period=1, fiscal_year=2016, amount=1, agency_identifier="sys",
               main_account_code="000", sub_account_code="000")
    sf_2 = SF133(line=1033, tas=tas, period=1, fiscal_year=2016, amount=1, agency_identifier="sys",
               main_account_code="000", sub_account_code="000")
    ap = Appropriation(job_id=1, row_number=1, tas=tas, deobligations_recoveries_r_cpe=2)

    models = [sf_1, sf_2, ap]

    assert number_of_errors(_FILE, database, models=models) == 0
def test_success(database):
    """ Tests that SF 133 amount sum for lines 1010 through 1042 matches Appropriation adjustments_to_unobligated_cpe
        for the specified fiscal year and period
    """
    tas = "".join([_TAS, "_success"])

    sf_1 = SF133(line=1020,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    sf_2 = SF133(line=1030,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    sf_3 = SF133(line=1040,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    # This line should be ignored because it's before 2021
    sf_4 = SF133(line=1060,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=10,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    ap = Appropriation(job_id=1,
                       row_number=1,
                       tas=tas,
                       adjustments_to_unobligated_cpe=3)

    models = [sf_1, sf_2, sf_3, sf_4, ap]

    assert number_of_errors(_FILE, database, models=models) == 0
def test_success(database):
    """ Tests that SF 133 amount sum for lines 1160, 1180, 1260, 1280 matches Appropriation budget_authority_appropria_cpe
        for the specified fiscal year and period """

    tas = "".join([_TAS, "_success"])

    sf_1 = SF133(line=1160,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    sf_2 = SF133(line=1180,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    sf_3 = SF133(line=1260,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    sf_4 = SF133(line=1280,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    ap = Appropriation(job_id=1,
                       row_number=1,
                       tas=tas,
                       budget_authority_appropria_cpe=4)

    models = [sf_1, sf_2, sf_3, sf_4, ap]

    assert number_of_errors(_FILE, database, models=models) == 0
Exemple #20
0
def test_success(database):
    """ Tests that SF 133 amount for line 1910 matches Appropriation total_budgetary_resources_cpe
        for the specified fiscal year and period """

    tas = "".join([_TAS, "_success"])

    sf = SF133(line=1910,
               tas=tas,
               period=1,
               fiscal_year=2016,
               amount=1,
               agency_identifier="sys",
               main_account_code="000",
               sub_account_code="000")
    ap = Appropriation(job_id=1,
                       row_number=1,
                       tas=tas,
                       total_budgetary_resources_cpe=1)

    assert number_of_errors(_FILE, database, models=[sf, ap]) == 0
def test_failure(database):
    """ Tests that SF 133 amount sum for lines 1010 through 1042 does not match Appropriation
        adjustments_to_unobligated_cpe for the specified fiscal year and period
    """
    tas = "".join([_TAS, "_failure"])

    sf_1 = SF133(line=1020,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    sf_2 = SF133(line=1030,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    sf_3 = SF133(line=1040,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier="sys",
                 main_account_code="000",
                 sub_account_code="000")
    ap = Appropriation(job_id=1,
                       row_number=1,
                       tas=tas,
                       adjustments_to_unobligated_cpe=1)

    models = [sf_1, sf_2, sf_3, ap]

    assert number_of_errors(_FILE, database, models=models) == 1
Exemple #22
0
def test_success(database):
    """ Tests that SF 133 amount for line 1000 matches Appropriation budget_authority_unobligat_fyb for the specified
        fiscal year and period
    """
    tas_1 = 'tas_one_line_1'
    tas_2 = 'tas_one_line_2'

    sf_1 = SF133(line=1000,
                 tas=tas_1,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier='sys',
                 main_account_code='000',
                 sub_account_code='000')
    sf_2 = SF133(line=1000,
                 tas=tas_2,
                 period=1,
                 fiscal_year=2016,
                 amount=0,
                 agency_identifier='sys',
                 main_account_code='000',
                 sub_account_code='000')
    ap_1 = Appropriation(job_id=1,
                         row_number=1,
                         tas=tas_1,
                         budget_authority_unobligat_fyb=1)
    ap_2 = Appropriation(job_id=2,
                         row_number=1,
                         tas=tas_2,
                         budget_authority_unobligat_fyb=None)

    assert number_of_errors(_FILE, database, models=[sf_1, sf_2, ap_1,
                                                     ap_2]) == 0

    # Test with split SF133 lines
    tas = 'tas_two_lines'

    sf_1 = SF133(line=1000,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=1,
                 agency_identifier='sys',
                 main_account_code='000',
                 sub_account_code='000',
                 disaster_emergency_fund_code='n')
    sf_2 = SF133(line=1000,
                 tas=tas,
                 period=1,
                 fiscal_year=2016,
                 amount=4,
                 agency_identifier='sys',
                 main_account_code='000',
                 sub_account_code='000',
                 disaster_emergency_fund_code='o')
    ap = Appropriation(job_id=1,
                       row_number=1,
                       tas=tas,
                       budget_authority_unobligat_fyb=5)

    assert number_of_errors(_FILE, database, models=[sf_1, sf_2, ap]) == 0
def test_revert_submission(database, monkeypatch):
    """ Tests reverting an updated DABS certification """
    sess = database.session

    sub = Submission(publish_status_id=PUBLISH_STATUS_DICT['updated'], is_quarter_format=True, d2_submission=False,
                     publishable=False, number_of_errors=20, number_of_warnings=15)
    sess.add(sub)
    sess.commit()

    job = Job(submission_id=sub.submission_id, job_status_id=JOB_STATUS_DICT['finished'],
              job_type_id=JOB_TYPE_DICT['csv_record_validation'], file_type_id=FILE_TYPE_DICT['appropriations'],
              number_of_warnings=0, number_of_errors=10, filename='new/test/file.csv', number_of_rows=5,
              number_of_rows_valid=0)
    cert_history = CertifyHistory(submission_id=sub.submission_id)
    sess.add_all([job, cert_history])
    sess.commit()

    cert_approp = CertifiedAppropriation(submission_id=sub.submission_id, job_id=job.job_id, row_number=1,
                                         spending_authority_from_of_cpe=2, tas='test')
    approp = Appropriation(submission_id=sub.submission_id, job_id=job.job_id, row_number=1,
                           spending_authority_from_of_cpe=15, tas='test')
    cert_files = CertifiedFilesHistory(certify_history_id=cert_history.certify_history_id,
                                       submission_id=sub.submission_id, filename='old/test/file2.csv',
                                       file_type_id=FILE_TYPE_DICT['appropriations'], warning_filename='a/warning.csv')
    cert_meta1 = CertifiedErrorMetadata(job_id=job.job_id, file_type_id=FILE_TYPE_DICT['appropriations'],
                                        target_file_type_id=None, occurrences=15)
    cert_meta2 = CertifiedErrorMetadata(job_id=job.job_id, file_type_id=FILE_TYPE_DICT['appropriations'],
                                        target_file_type_id=None, occurrences=10)
    file_entry = File(file_id=FILE_TYPE_DICT['appropriations'], job_id=job.job_id,
                      file_status_id=FILE_STATUS_DICT['incomplete'], headers_missing='something')
    sess.add_all([cert_approp, approp, cert_files, cert_meta1, cert_meta2, file_entry])
    sess.commit()

    file_handler = fileHandler.FileHandler({}, is_local=True)
    monkeypatch.setattr(file_handler, 'revert_certified_error_files', Mock())
    revert_to_certified(sub, file_handler)

    # Test that certified data is moved back
    approp_query = sess.query(Appropriation).filter_by(submission_id=sub.submission_id).all()
    assert len(approp_query) == 1
    assert approp_query[0].spending_authority_from_of_cpe == 2

    # Test that the job got updated
    job_query = sess.query(Job).filter_by(submission_id=sub.submission_id).all()
    assert len(job_query) == 1
    assert job_query[0].filename == CONFIG_BROKER['broker_files'] + 'file2.csv'
    assert job_query[0].number_of_warnings == 25
    assert job_query[0].number_of_errors == 0
    assert job_query[0].number_of_rows == 2
    assert job_query[0].number_of_rows_valid == 1

    # Test that File got updated
    file_query = sess.query(File).filter_by(job_id=job.job_id).all()
    assert len(file_query) == 1
    assert file_query[0].headers_missing is None
    assert file_query[0].file_status_id == FILE_STATUS_DICT['complete']

    # Make sure submission got updated
    sub_query = sess.query(Submission).filter_by(submission_id=sub.submission_id).all()
    assert len(sub_query) == 1
    assert sub_query[0].publishable is True
    assert sub_query[0].number_of_errors == 0
    assert sub_query[0].number_of_warnings == 25