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
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
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
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
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
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
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
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
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
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
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