示例#1
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
示例#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 post(identifier, filing_id=None):
        """Create a new filing for the business."""
        json_input = request.get_json()
        if not json_input:
            return jsonify({'message':
                            f'No filing json data in body of post for {identifier}.'}), \
                HTTPStatus.BAD_REQUEST

        business = Business.find_by_identifier(identifier)
        if not business:
            return jsonify({'message':
                            f'{identifier} not found'}), HTTPStatus.NOT_FOUND

        if filing_id:  # checked since we're overlaying routes
            return jsonify({'message':
                            f'Illegal to attempt to create a new filing over an existing filing for {identifier}.'}), \
                HTTPStatus.FORBIDDEN

        try:
            filing = Filing()
            filing.business_id = business.id
            filing.filing_date = datetime.datetime.utcnow()
            filing.filing_json = json_input
            filing.save()
        except BusinessException as err:
            return jsonify({'message': err.error}), err.status_code

        return jsonify(filing.filing_json), HTTPStatus.CREATED
示例#4
0
def factory_filing(business, data_dict, filing_date=FROZEN_DATETIME):
    """Create a filing."""
    filing = Filing()
    filing.business_id = business.id
    filing.filing_date = filing_date
    filing.filing_json = data_dict
    filing.save()
    return filing
示例#5
0
def test_changing_uninvoiced_saved_filing_is_unlocked(session):
    """Assert that saving an un-invoiced filing is still unlocked."""
    # should succeed
    filing = Filing()
    filing.filing_date = EPOCH_DATETIME
    filing.filing_json = ANNUAL_REPORT
    assert not filing.locked
    filing.save()
    assert not filing.locked
示例#6
0
def factory_incorporation_filing(business, data_dict, filing_date=FROZEN_DATETIME, effective_date=FROZEN_DATETIME):
    """Create a filing."""
    filing = Filing()
    filing.business_id = business.id
    filing.filing_date = filing_date
    filing.effective_date = effective_date
    filing.filing_json = data_dict
    filing.save()
    return filing
示例#7
0
def factory_pending_filing(business, data_dict, filing_date=FROZEN_DATETIME):
    """Create a pending filing."""
    filing = Filing()
    filing.business_id = business.id
    filing.filing_date = filing_date
    filing.filing_json = data_dict
    filing.payment_token = 2
    filing.save()
    return filing
示例#8
0
def test_changing_unsaved_filing_is_unlocked(session):
    """Assert an unlocked, but saved filing, can be changed."""
    # should succeed
    filing = Filing()
    filing.payment_token = 'payment_token'
    filing.filing_date = EPOCH_DATETIME
    filing.filing_json = ANNUAL_REPORT
    assert not filing.locked
    filing.save()
    assert filing.locked
示例#9
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
示例#10
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
示例#11
0
def factory_epoch_filing(business, filing_date=FROZEN_DATETIME):
    """Create an error filing."""
    filing = Filing()
    filing.business_id = business.id
    uow = versioning_manager.unit_of_work(db.session)
    transaction = uow.create_transaction(db.session)
    filing.transaction_id = transaction.id
    filing.filing_date = filing_date
    filing.filing_json = {'filing': {'header': {'name': 'lear_epoch'}}}
    filing.save()
    return filing
示例#12
0
def load_historic_filings(corp_num: str, business: Business, legal_type: str):
    """Load historic filings for a business."""
    try:
        # get historic filings
        r = requests.get(
            f'{COLIN_API}/api/v1/businesses/{legal_type}/{corp_num}/filings/historic',
            timeout=TIMEOUT)
        if r.status_code != HTTPStatus.OK or not r.json():
            print(
                f'skipping history for {corp_num} historic filings not found')

        else:
            for historic_filing in r.json():
                uow = versioning_manager.unit_of_work(db.session)
                transaction = uow.create_transaction(db.session)
                filing = Filing()
                filing_date = historic_filing['filing']['header']['date']
                filing.filing_date = datetime.datetime.strptime(
                    filing_date, '%Y-%m-%d')
                filing.business_id = business.id
                filing.filing_json = historic_filing
                for colin_id in filing.filing_json['filing']['header'][
                        'colinIds']:
                    colin_event_id = ColinEventId()
                    colin_event_id.colin_event_id = colin_id
                    filing.colin_event_ids.append(colin_event_id)
                filing.transaction_id = transaction.id
                filing._filing_type = historic_filing['filing']['header'][
                    'name']
                filing.paper_only = True
                filing.effective_date = datetime.datetime.strptime(
                    historic_filing['filing']['header']['effectiveDate'],
                    '%Y-%m-%d')
                updater_user = User.find_by_username(UPDATER_USERNAME)
                filing.submitter_id = updater_user.id
                filing.source = Filing.Source.COLIN.value

                db.session.add(filing)

            # only commit after all historic filings were added successfully
            db.session.commit()
            LOADED_FILING_HISTORY.append(corp_num)

    except requests.exceptions.Timeout:
        print('rolling back partial changes...')
        db.session.rollback()
        FAILED_FILING_HISTORY.append(corp_num)
        print('colin_api request timed out getting historic filings.')
    except Exception as err:
        print('rolling back partial changes...')
        db.session.rollback()
        FAILED_FILING_HISTORY.append(corp_num)
        raise err
示例#13
0
def test_add_json_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

    # sanity check starting value
    assert not filing.status

    filing.payment_token = 'payment token'
    filing.filing_json = ANNUAL_REPORT

    assert filing.json
    assert filing.status == Filing.Status.PENDING.value
示例#14
0
def test_minimal_filing_json(session):
    """Assert that a minimal filing can be created."""
    b = factory_business('CP1234567')

    data = {'filing': 'not a real filing, fail validation'}

    filing = Filing()
    filing.business_id = b.id
    filing.filing_date = datetime.datetime.utcnow()
    filing.filing_data = json.dumps(data)
    filing.save()

    assert filing.id is not None
示例#15
0
    def _save_filing(client_request: LocalProxy, business_identifier: str,
                     user: User,
                     filing_id: int) -> Tuple[Business, Filing, dict, int]:
        """Save the filing to the ledger.

        If not successful, a dict of errors is returned.

        Returns: {
            Business: business model object found for the identifier provided
            Filing: filing model object for the submitted filing
            dict: a dict of errors
            int: the HTTPStatus error code
        }
        """
        json_input = client_request.get_json()
        if not json_input:
            return None, None, {'message':
                                f'No filing json data in body of post for {business_identifier}.'}, \
                HTTPStatus.BAD_REQUEST

        business = Business.find_by_identifier(business_identifier)
        if not business:
            return None, None, {
                'message': f'{business_identifier} not found'
            }, HTTPStatus.NOT_FOUND

        if client_request.method == 'PUT':
            rv = db.session.query(Business, Filing). \
                filter(Business.id == Filing.business_id). \
                filter(Business.identifier == business_identifier). \
                filter(Filing.id == filing_id). \
                one_or_none()
            if not rv:
                return None, None, {
                    'message': f'{business_identifier} no filings found'
                }, HTTPStatus.NOT_FOUND
            filing = rv[1]
        else:
            filing = Filing()
            filing.business_id = business.id

        try:
            filing.submitter_id = user.id
            filing.filing_date = datetime.datetime.utcnow()
            filing.filing_json = json_input
            filing.save()
        except BusinessException as err:
            return None, None, {'error': err.error}, err.status_code

        return business, filing, None, None
示例#16
0
def test_add_json_and_payment_after_saved_filing(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()

    # sanity check starting value
    assert filing.status == Filing.Status.DRAFT.value

    filing.payment_token = 'payment token'
    filing.filing_json = AR_FILING

    assert filing.json
    assert filing.status == Filing.Status.PENDING.value
示例#17
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
def create_filing(token, json_filing=None, business_id=None):
    """Return a test filing."""
    from legal_api.models import Filing
    filing = Filing()
    filing.payment_token = str(token)
    filing.filing_date = EPOCH_DATETIME

    if json_filing:
        filing.filing_json = json_filing
    if business_id:
        filing.business_id = business_id

    filing.save()
    return filing
def test_get_current_registrar(session):
    """Assert that the current registrar is returned."""
    b = factory_business('CP1234567')
    filing = Filing()
    filing.business_id = b.id
    filing.filing_date = datetime.datetime.utcnow()
    filing.filing_data = ANNUAL_REPORT
    filing.save()

    registrar_info = RegistrarInfo.get_registrar_info(filing.effective_date)
    assert registrar_info['startDate']
    assert registrar_info['endDate'] is None
    assert registrar_info['signature']
    assert registrar_info['name']
    assert registrar_info['title']
示例#20
0
def test_filing_orm_delete_allowed_for_in_progress_filing(session):
    """Assert that attempting to delete a filing will raise a BusinessException."""
    from legal_api.exceptions import BusinessException

    b = factory_business('CP1234567')

    filing = Filing()
    filing.business_id = b.id
    filing.filing_date = datetime.datetime.utcnow()
    filing.filing_json = ANNUAL_REPORT
    filing.save()

    with not_raises(BusinessException):
        session.delete(filing)
        session.commit()
示例#21
0
async def test_publish_email_message(app, session, stan_server, event_loop,
                                     client_id, entity_stan, future):
    """Assert that payment tokens can be retrieved and decoded from the Queue."""
    # Call back for the subscription
    from entity_queue_common.service import ServiceWorker
    from entity_pay.worker import APP_CONFIG, publish_email_message, qsm
    from legal_api.models import Filing

    # file handler callback
    msgs = []

    async def cb_file_handler(msg):
        nonlocal msgs
        nonlocal future
        msgs.append(msg)
        if len(msgs) == 1:
            future.set_result(True)

    file_handler_subject = APP_CONFIG.EMAIL_PUBLISH_OPTIONS['subject']
    await subscribe_to_queue(entity_stan, file_handler_subject,
                             f'entity_queue.{file_handler_subject}',
                             f'entity_durable_name.{file_handler_subject}',
                             cb_file_handler)

    s = ServiceWorker()
    s.sc = entity_stan
    qsm.service = s

    # Test
    filing = Filing()
    filing.id = 101
    filing.filing_type = 'incorporationApplication'
    filing_date = datetime.datetime.utcnow()
    filing.filing_date = filing_date
    filing.effective_date = filing_date

    await publish_email_message(filing)

    try:
        await asyncio.wait_for(future, 2, loop=event_loop)
    except Exception as err:
        print(err)

    # check it out
    assert len(msgs) == 1
    assert get_data_from_msg(msgs[0], 'id') == filing.id
    assert get_data_from_msg(msgs[0], 'type') == filing.filing_type
    assert get_data_from_msg(msgs[0], 'option') == 'filed'
示例#22
0
def create_filing(token=None, filing_json=None, business_id=None, filing_date=EPOCH_DATETIME, bootstrap_id: str = None):
    """Return a test filing."""
    filing = Filing()
    if token:
        filing.payment_token = str(token)
    filing.filing_date = filing_date

    if filing_json:
        filing.filing_json = filing_json
    if business_id:
        filing.business_id = business_id
    if bootstrap_id:
        filing.temp_reg = bootstrap_id

    filing.save()
    return filing
def test_get_registrar_for_a_filing(session):
    """Assert that the registrar effective on that date is returned."""
    b = factory_business('CP1234567')
    filing = Filing()
    filing.business_id = b.id
    filing.filing_date = datetime.datetime(2012, 6, 6)
    filing.effective_date = datetime.datetime(2012, 6, 6)
    filing.filing_data = ANNUAL_REPORT
    filing.save()

    registrar_info = RegistrarInfo.get_registrar_info(filing.effective_date)
    assert registrar_info['startDate']
    assert registrar_info['endDate']
    assert registrar_info['signature']
    assert registrar_info['name'] == 'ANGELO COCCO'
    assert registrar_info['title'] == 'A/Registrar of Companies'
示例#24
0
def create_filing(filing_type, colin_filing, colin_event_id, corp_num):
    """Create legal api filing using colin filing as base"""
    effective_date = colin_filing['filing']['business']['foundingDate']
    colin_filing['filing']['business']['identifier'] = corp_num
    filing = Filing(effective_date=effective_date, filing_json=colin_filing)
    filing._filing_type = filing_type
    filing.filing_date = effective_date
    colin_event = ColinEventId()
    colin_event.colin_event_id = colin_event_id
    filing.colin_event_ids.append(colin_event)

    # Override the state setting mechanism
    filing.skip_status_listener = True
    filing._status = 'PENDING'
    filing.source = Filing.Source.COLIN.value
    return filing
示例#25
0
def factory_filing(business,
                   data_dict,
                   filing_date=FROZEN_DATETIME,
                   filing_type=None):
    """Create a filing."""
    filing = Filing()
    filing.business_id = business.id
    filing.filing_date = filing_date
    filing.filing_json = data_dict
    if filing_type:
        filing._filing_type = filing_type
    try:
        filing.save()
    except Exception as err:
        print(err)
    return filing
示例#26
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
示例#27
0
def create_filing(token=None, json_filing=None, business_id=None, filing_date=EPOCH_DATETIME, bootstrap_id: str = None):
    """Return a test filing."""
    from legal_api.models import Filing
    filing = Filing()
    if token:
        filing.payment_token = str(token)
    filing.filing_date = filing_date

    if json_filing:
        filing.filing_json = json_filing
    if business_id:
        filing.business_id = business_id
    if bootstrap_id:
        filing.temp_reg = bootstrap_id

    filing.save()
    return filing
示例#28
0
def test_filing_orm_delete_blocked_if_invoiced(session):
    """Assert that attempting to delete a filing will raise a BusinessException."""
    from legal_api.exceptions import BusinessException

    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.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.'
示例#29
0
def test_filing_block_orm_delete(session):
    """Assert that attempting to delete a filing will raise a BusinessException."""
    from legal_api.exceptions import BusinessException

    b = factory_business('CP1234567')

    data = {'filing': 'not a real filing, fail validation'}

    filing = Filing()
    filing.business_id = b.id
    filing.filing_date = datetime.datetime.utcnow()
    filing.filing_data = json.dumps(data)
    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.'
示例#30
0
                        # get historic filings
                        r = requests.get(COLIN_API + '/api/v1/businesses/' +
                                         row['CORP_NUM'] + '/filings/historic',
                                         timeout=TIMEOUT)
                        if r.status_code != HTTPStatus.OK or not r.json():
                            print(
                                f'skipping history for {row["CORP_NUM"]} historic filings not found'
                            )

                        for historic_filing in r.json():
                            uow = versioning_manager.unit_of_work(db.session)
                            transaction = uow.create_transaction(db.session)
                            filing = Filing()
                            filing_date = historic_filing['filing']['header'][
                                'date']
                            filing.filing_date = datetime.datetime.strptime(
                                filing_date, '%Y-%m-%d')
                            filing.business_id = business.id
                            filing.filing_json = historic_filing
                            filing.transaction_id = transaction.id
                            filing_type = historic_filing['filing']['header'][
                                'name']
                            filing.colin_event_id = historic_filing['filing'][
                                filing_type]['eventId']
                            filing.paper_only = True
                            db.session.add(filing)
                            db.session.commit()

                    except requests.exceptions.Timeout as timeout:
                        print(
                            'colin_api request timed out getting historic filings.'
                        )