def test_efilings(self): """ Check filings returns in general endpoint""" factories.EFilingsFactory(committee_id='C001') factories.EFilingsFactory(committee_id='C002') results = self._results(api.url_for(EFilingsView)) self.assertEqual(len(results), 2)
def test_filter_receipt_date_efile(self): [ factories.EFilingsFactory(committee_id='C013', beginning_image_number=5, filed_date=datetime.date(2015, 1, 1)), factories.EFilingsFactory(committee_id='C014', beginning_image_number=6, filed_date=datetime.date(2015, 1, 2)), ] results = self._results( api.url_for(EFilingsView, min_receipt_date=datetime.date(2015, 1, 1), max_receipt_date=datetime.date(2015, 1, 2))) self.assertEqual(len(results), 2)
def test_schedule_e_efile_filters(self): filters = [ ('image_number', ScheduleEEfile.image_number, ['456', '789']), ('committee_id', ScheduleEEfile.committee_id, ['C01', 'C02']), ('support_oppose_indicator', ScheduleEEfile.support_oppose_indicator, ['S', 'O']), ('most_recent', ScheduleEEfile.most_recent, [True, False]), ('candidate_office', ScheduleEEfile.candidate_office, ['H', 'S', 'P']), ('candidate_party', ScheduleEEfile.candidate_party, ['DEM', 'REP']), ('candidate_office_state', ScheduleEEfile.candidate_office_state, ['AZ', 'AK']), ('candidate_office_district', ScheduleEEfile.candidate_office_district, ['00', '01']), ('filing_form', ScheduleEEfile.filing_form, ['F3X', 'F5']), ('is_notice', ScheduleE.is_notice, [True, False]), ] factories.EFilingsFactory(file_number=123) for label, column, values in filters: [ factories.ScheduleEEfileFactory(**{column.key: value}) for value in values ] results = self._results( api.url_for(ScheduleEEfileView, **{label: values[0]})) assert len(results) == 1 assert results[0][column.key] == values[0]
def test_views(self, upload_s3): committee = factories.CommitteeFactory(committee_type='H') committee_id = committee.committee_id factories.CommitteeHistoryFactory(committee_id=committee_id, committee_type='H') filing = factories.FilingsFactory(committee_id=committee_id) efiling = factories.EFilingsFactory(committee_id=committee_id, receipt_date=datetime.datetime( 2012, 1, 1)) basef3pfiling = factories.BaseF3PFilingFactory( committee_id=committee_id, receipt_date=datetime.date(2012, 1, 1)) db.session.commit() for view in tasks.RESOURCE_WHITELIST: if view.endpoint in [ 'reportsview', 'efilingsummaryview', ]: url = api.url_for(view, committee_type=committee.committee_type) elif view.endpoint in [ 'filingsview', 'committeereportsview', ]: url = api.url_for(view, committee_id=committee.committee_id) else: url = api.url_for(view) tasks.export_query(url, b'')
def test_views(self, make_bundle): committee = factories.CommitteeFactory(committee_type='H') committee_id = committee.committee_id factories.CommitteeHistoryFactory(committee_id=committee_id, committee_type='H') filing = factories.FilingsFactory(committee_id=committee_id) # noqa efiling = factories.EFilingsFactory( # noqa committee_id=committee_id, receipt_date=datetime.datetime(2012, 1, 1)) basef3pfiling = factories.BaseF3PFilingFactory( # noqa committee_id=committee_id, receipt_date=datetime.date(2012, 1, 1)) db.session.commit() # these are the major downloadable resources, we may want to add more later RESOURCE_WHITELIST = { aggregates.ScheduleABySizeView, aggregates.ScheduleAByStateView, aggregates.ScheduleAByZipView, aggregates.ScheduleAByEmployerView, aggregates.ScheduleAByOccupationView, aggregates.ScheduleBByRecipientView, aggregates.ScheduleBByRecipientIDView, aggregates.ScheduleBByPurposeView, candidate_aggregates.TotalsCandidateView, candidates.CandidateList, committees.CommitteeList, costs.CommunicationCostView, costs.ElectioneeringView, filings.EFilingsView, filings.FilingsList, filings.FilingsView, reports.ReportsView, reports.CommitteeReportsView, reports.EFilingHouseSenateSummaryView, reports.EFilingPresidentialSummaryView, reports.EFilingPacPartySummaryView, sched_a.ScheduleAView, sched_a.ScheduleAEfileView, sched_b.ScheduleBView, sched_b.ScheduleBEfileView, sched_d.ScheduleDView, sched_e.ScheduleEView, sched_e.ScheduleEEfileView, sched_f.ScheduleFView, } for view in RESOURCE_WHITELIST: if view.endpoint in ['reportsview']: url = api.url_for(view, committee_type=committee.committee_type) elif view.endpoint in [ 'filingsview', 'committeereportsview', ]: url = api.url_for(view, committee_id=committee.committee_id) else: url = api.url_for(view) tasks.export_query(url, base64.b64encode(b'').decode('UTF-8'))
def test_file_number_efilings(self): """ Check filing returns with a specified file number""" file_number = 1124839 factories.EFilingsFactory(file_number=file_number) results = self._results( api.url_for(EFilingsView, file_number=file_number)) self.assertEqual(results[0]['file_number'], file_number)
def test_committee_efilings(self): """ Check filing returns with a specified committee id""" committee_id = 'C8675309' factories.EFilingsFactory(committee_id=committee_id) results = self._results( api.url_for(EFilingsView, committee_id=committee_id)) self.assertEqual(results[0]['committee_id'], committee_id)
def test_filter_date_efile(self): [ factories.EFilingsFactory( committee_id='C010', beginning_image_number=2, filed_date=datetime.date(2012, 1, 1), ), factories.EFilingsFactory( committee_id='C011', beginning_image_number=3, filed_date=datetime.date(2013, 1, 1), ), factories.EFilingsFactory( committee_id='C012', beginning_image_number=4, filed_date=datetime.date(2014, 1, 1), ), factories.EFilingsFactory( committee_id='C013', beginning_image_number=5, filed_date=datetime.date(2015, 1, 1), ), ] min_date = datetime.date(2013, 1, 1) results = self._results( api.url_for(EFilingsView, min_receipt_date=min_date)) self.assertTrue( all(each for each in results if each['filed_date'] >= min_date.isoformat())) max_date = datetime.date(2014, 1, 1) results = self._results( api.url_for(EFilingsView, max_receipt_date=max_date)) self.assertTrue( all(each for each in results if each['filed_date'] <= max_date.isoformat())) results = self._results( api.url_for(EFilingsView, min_receipt_date=min_date, max_receipt_date=max_date)) self.assertTrue( all(each for each in results if min_date.isoformat() <= each['filed_date'] <= max_date.isoformat()))
def test_schedule_e_efile_filter_cand_search(self): [ factories.ScheduleEEfileFactory( cand_fulltxt=sa.func.to_tsvector('C001, Rob, Senior')), factories.ScheduleEEfileFactory( cand_fulltxt=sa.func.to_tsvector('C002, Ted, Berry')), factories.ScheduleEEfileFactory( cand_fulltxt=sa.func.to_tsvector('C003, Rob, Junior')), ] factories.EFilingsFactory(file_number=123) db.session.flush() results = self._results( api.url_for(ScheduleEEfileView, candidate_search='Rob')) assert len(results) == 2
def test_schedule_e_efile_candidate_id_filter(self): filters = [ ('candidate_id', ScheduleEEfile.candidate_id, ['S01', 'S02']), ] factories.EFilingsFactory(file_number=123) for label, column, values in filters: [ factories.ScheduleEEfileFactory(**{column.key: value}) for value in values ] results = self._results( api.url_for(ScheduleEEfileView, **{label: values[0]})) assert len(results) == 1 assert results[0][column.key] == values[0]
def test_filters_sched_e_efile(self): filters = [ ('image_number', ScheduleEEfile.image_number, ['123', '456']), ('committee_id', ScheduleEEfile.committee_id, ['C01', 'C02']), ('support_oppose_indicator', ScheduleEEfile.support_oppose_indicator, ['S', 'O']), ] factories.EFilingsFactory(file_number=123) for label, column, values in filters: [ factories.ScheduleEEfileFactory(**{column.key: value}) for value in values ] results = self._results(api.url_for(ScheduleEEfileView, **{label: values[0]})) assert len(results) == 1 assert results[0][column.key] == values[0]
def test_schedule_e_efile_uses_exact_count(self, get_query_plan_mock): schedule_e_efile = [ factories.ScheduleEEfileFactory() for i in range(5) ] factories.EFilingsFactory(file_number=123) db.session.flush() query = db.session.query(models.ScheduleEEfile) # Estimated rows = 6000000 get_query_plan_mock.return_value = [('Seq Scan on real_efile_se_f57_vw (cost=0.00..10.60 rows=6000000 width=1289)',)] resource = sched_e.ScheduleEEfileView() count, estimate = counts.get_count(query, db.session, resource.use_estimated_counts) # Always use exact count for Schedule E efile self.assertEqual(count, 5) self.assertEqual(estimate, False)