示例#1
0
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
示例#2
0
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
示例#3
0
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
示例#4
0
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
示例#5
0
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
示例#6
0
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
示例#7
0
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
示例#8
0
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
示例#9
0
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
示例#10
0
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
示例#11
0
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.'