def test_get_most_recent_filing_by_legal_type_db_field(session): """Assert that the most recent legal filing can be retrieved. Create 3 filings, find the 2 one by the type only. """ business = factory_business('CP1234567') uow = versioning_manager.unit_of_work(session) transaction = uow.create_transaction(session) # filing 1 effective_date = '2001-07-01T00:00:00+00:00' completion_date = datetime.datetime.fromisoformat(effective_date) base_filing = copy.deepcopy(ANNUAL_REPORT) base_filing['filing']['header']['effectiveDate'] = effective_date filing1 = Filing() filing1._filing_date = completion_date filing1.business_id = business.id filing1.filing_json = base_filing filing1.effective_date = datetime.datetime.fromisoformat(effective_date) filing1.payment_token = 'token' filing1.transaction_id = transaction.id filing1.payment_completion_date = completion_date filing1.save() # filing 2 <- target effective_date = '2002-07-01T00:00:00+00:00' completion_date = datetime.datetime.fromisoformat(effective_date) base_filing = copy.deepcopy(FILING_HEADER) base_filing['filing']['header']['effectiveDate'] = effective_date base_filing['filing']['header']['name'] = 'changeOfDirectors' base_filing['filing']['header']['availableOnPaperOnly'] = True filing2 = Filing() filing2._filing_date = completion_date filing2.business_id = business.id filing2.filing_json = base_filing filing2.effective_date = datetime.datetime.fromisoformat(effective_date) filing2.payment_token = 'token' filing2.transaction_id = transaction.id filing2.payment_completion_date = completion_date filing2.save() # filing 3 effective_date = '2003-07-01T00:00:00+00:00' completion_date = datetime.datetime.fromisoformat(effective_date) base_filing = copy.deepcopy(ANNUAL_REPORT) base_filing['filing']['header']['effectiveDate'] = effective_date filing3 = Filing() filing3._filing_date = completion_date filing3.business_id = business.id filing3.filing_json = base_filing filing3.effective_date = datetime.datetime.fromisoformat(effective_date) filing3.payment_token = 'token' filing3.transaction_id = transaction.id filing3.payment_completion_date = completion_date filing3.save() f = Filing.get_most_recent_legal_filing(business.id, 'changeOfDirectors') assert f.filing_type == 'changeOfDirectors' assert f.id == filing2.id
def factory_completed_filing(business, data_dict, filing_date=FROZEN_DATETIME, payment_token=None, colin_id=None): """Create a completed filing.""" if not payment_token: payment_token = str(base64.urlsafe_b64encode(uuid.uuid4().bytes)).replace('=', '') with freeze_time(filing_date): filing = Filing() filing.business_id = business.id filing.filing_date = filing_date filing.filing_json = data_dict filing.save() uow = versioning_manager.unit_of_work(db.session) transaction = uow.create_transaction(db.session) filing.transaction_id = transaction.id filing.payment_token = payment_token filing.effective_date = filing_date filing.payment_completion_date = filing_date if colin_id: colin_event = ColinEventId() colin_event.colin_event_id = colin_id colin_event.filing_id = filing.id colin_event.save() filing.save() return filing
def test_get_filings_by_status_before_go_live_date(session, test_type, days, expected, status): """Assert that a filing can be retrieved by status.""" import copy uow = versioning_manager.unit_of_work(session) transaction = uow.create_transaction(session) business = factory_business('CP1234567') payment_token = '1000' ar = copy.deepcopy(ANNUAL_REPORT) go_live_date = datetime.date.fromisoformat(current_app.config.get('GO_LIVE_DATE')) filing_date = go_live_date + datetime.timedelta(days=days) filing = Filing() filing.filing_date = filing_date filing.business_id = business.id filing.filing_json = ar filing.payment_token = payment_token filing.transaction_id = transaction.id filing.payment_completion_date = datetime.datetime.utcnow() filing.save() rv = Filing.get_filings_by_status(business.id, [Filing.Status.COMPLETED.value], go_live_date) assert eval(expected) # pylint: disable=eval-used; useful for parameterized tests if rv: assert rv[0].status == status
def test_get_most_recent_filing_by_legal_type_in_json(session): """Assert that the most recent legal filing can be retrieved.""" business = factory_business('CP1234567') uow = versioning_manager.unit_of_work(session) transaction = uow.create_transaction(session) for i in range(1, 5): effective_date = f'200{i}-07-01T00:00:00+00:00' completion_date = datetime.datetime.fromisoformat(effective_date) base_filing = copy.deepcopy(ANNUAL_REPORT) cod = copy.deepcopy(CHANGE_OF_DIRECTORS) base_filing['filing']['changeOfDirectors'] = cod base_filing['filing']['header']['effectiveDate'] = effective_date filing = Filing() filing._filing_date = completion_date filing.business_id = business.id filing.filing_json = base_filing filing.effective_date = datetime.datetime.fromisoformat(effective_date) filing.payment_token = 'token' filing.transaction_id = transaction.id filing.payment_completion_date = completion_date filing.save() f = Filing.get_most_recent_legal_filing(business.id, 'changeOfDirectors') assert f.effective_date == datetime.datetime.fromisoformat(effective_date) assert f.filing_type == 'annualReport' assert f.id == filing.id
def factory_error_filing(business, data_dict, filing_date=FROZEN_DATETIME): """Create an error filing.""" filing = Filing() filing.business_id = business.id filing.filing_date = filing_date filing.filing_json = data_dict filing.save() filing.payment_token = 5 filing.payment_completion_date = (datetime.now()).replace(tzinfo=timezone.utc) return filing
def factory_error_filing(business, data_dict): """Create an error filing.""" filing = Filing() filing.business_id = business.id filing.filing_date = FROZEN_DATETIME filing.filing_json = data_dict filing.save() filing.payment_token = 5 filing.payment_completion_date = datetime.now() return filing
def factory_completed_filing(business, data_dict, filing_date=FROZEN_DATETIME): """Create a completed filing.""" filing = Filing() filing.business_id = business.id filing.filing_date = filing_date filing.filing_json = data_dict filing.save() uow = versioning_manager.unit_of_work(db.session) transaction = uow.create_transaction(db.session) filing.transaction_id = transaction.id filing.payment_token = 1 filing.payment_completion_date = datetime.now() return filing
def test_get_filings_by_status__default_order(session): """Assert that a filing can be retrieved. by status and is returned in the default order. default order is submission_date, and then effective_date. """ # setup base_filing = copy.deepcopy(FILING_HEADER) base_filing['specialResolution'] = SPECIAL_RESOLUTION uow = versioning_manager.unit_of_work(session) business = factory_business('CP1234567') completion_date = datetime.datetime.utcnow().replace( tzinfo=datetime.timezone.utc) # setup - create multiple filings on the same day & time filing_ids = [] file_counter = -1 with freeze_time(completion_date): for i in range(0, 5): transaction = uow.create_transaction(session) payment_token = str(i) effective_date = f'200{i}-04-15T00:00:00+00:00' base_filing['filing']['header']['effectiveDate'] = effective_date filing = Filing() filing._filing_date = completion_date filing.business_id = business.id filing.filing_json = base_filing filing.effective_date = datetime.datetime.fromisoformat( effective_date) filing.payment_token = payment_token filing.transaction_id = transaction.id filing.payment_completion_date = completion_date filing.save() filing_ids.append(filing.id) file_counter += 1 # test rv = Filing.get_filings_by_status(business.id, [Filing.Status.COMPLETED.value]) # check assert rv # filings should be in newest to oldest effective date order for filing in rv: assert filing.id == filing_ids[file_counter] file_counter -= 1
def test_add_payment_completion_date_after_payment(session): """Assert that the json can be added in the same session that a paymentToken was applied.""" filing = Filing() filing.filing_date = EPOCH_DATETIME filing.save() filing.payment_token = 'payment token' filing.filing_json = ANNUAL_REPORT # sanity check starting position assert filing.json assert filing.status == Filing.Status.PENDING.value filing.payment_completion_date = EPOCH_DATETIME print(filing.status) assert filing.status == Filing.Status.COMPLETED.value
def test_get_filings_by_status(session): """Assert that a filing can be retrieved by status.""" uow = versioning_manager.unit_of_work(session) transaction = uow.create_transaction(session) business = factory_business('CP1234567') payment_token = '1000' filing = Filing() filing.business_id = business.id filing.filing_json = ANNUAL_REPORT filing.payment_token = payment_token filing.transaction_id = transaction.id filing.payment_completion_date = datetime.datetime.utcnow() filing.save() rv = Filing.get_filings_by_status(business.id, [Filing.Status.COMPLETED.value]) assert rv assert rv[0].status == Filing.Status.COMPLETED.value
def test_filing_orm_delete_blocked_if_completed(session): """Assert that attempting to delete a filing will raise a BusinessException.""" from legal_api.exceptions import BusinessException uow = versioning_manager.unit_of_work(session) transaction = uow.create_transaction(session) b = factory_business('CP1234567') filing = Filing() filing.business_id = b.id filing.filing_date = datetime.datetime.utcnow() filing.filing_json = ANNUAL_REPORT filing.payment_token = 'a token' filing.payment_completion_date = datetime.datetime.utcnow() filing.transaction_id = transaction.id filing.save() with pytest.raises(BusinessException) as excinfo: session.delete(filing) session.commit() assert excinfo.value.status_code == HTTPStatus.FORBIDDEN assert excinfo.value.error == 'Deletion not allowed.'