示例#1
0
def test_get_distribution(session, client, jwt, app):
    """Assert that the endpoint returns 200."""
    # Insert a record first and then query for it
    token = jwt.create_jwt(get_claims(role=Role.STAFF_ADMIN.value), token_header)
    headers = {'Authorization': f'Bearer {token}', 'content-type': 'application/json'}

    rv = client.post('/api/v1/fees/distributions', data=json.dumps(get_distribution_code_payload()), headers=headers)
    assert rv.status_code == 201
    distribution_id = rv.json.get('distributionCodeId')
    rv = client.get(f'/api/v1/fees/distributions/{distribution_id}', headers=headers)
    assert rv.json.get('client') == get_distribution_code_payload().get('client')
示例#2
0
def test_put_distribution_updates_invoice_status(session, client, jwt, app):
    """Assert that updating an existing fee distribution will update the invoice status."""
    # Insert a record first and then query for it
    token = jwt.create_jwt(get_claims(role=Role.STAFF_ADMIN.value), token_header)
    headers = {'Authorization': f'Bearer {token}', 'content-type': 'application/json'}

    rv = client.post('/api/v1/fees/distributions', data=json.dumps(get_distribution_code_payload()), headers=headers)

    distribution_id = rv.json.get('distributionCodeId')
    rv = client.put(f'/api/v1/fees/distributions/{distribution_id}',
                    data=json.dumps(get_distribution_code_payload(client='200')), headers=headers)
    assert rv.json.get('client') == '200'
示例#3
0
def test_get_payment_system_url_service_fees(session, public_user_mock):
    """Assert that the url returned is correct."""
    today = current_local_time().strftime(PAYBC_DATE_FORMAT)
    payment_account = factory_payment_account()
    payment = factory_payment()
    payment_account.save()
    payment.save()
    invoice = factory_invoice(payment_account)
    invoice.save()
    invoice_ref = factory_invoice_reference(invoice.id).save()
    fee_schedule = FeeSchedule.find_by_filing_type_and_corp_type('CP', 'OTANN')
    distribution_code = DistributionCodeModel.find_by_active_for_fee_schedule(fee_schedule.fee_schedule_id)

    distribution_code_svc = DistributionCode()
    distribution_code_payload = get_distribution_code_payload()
    # Set service fee distribution
    distribution_code_payload.update({'serviceFeeDistributionCodeId': distribution_code.distribution_code_id})
    # update the existing gl code with new values
    distribution_code_svc.save_or_update(distribution_code_payload,
                                         distribution_code.distribution_code_id)

    service_fee = 100
    line = factory_payment_line_item(invoice.id, fee_schedule_id=fee_schedule.fee_schedule_id, service_fees=service_fee)
    line.save()
    direct_pay_service = DirectPayService()
    payment_response_url = direct_pay_service.get_payment_system_url_for_invoice(invoice, invoice_ref, 'google.com')
    url_param_dict = dict(urllib.parse.parse_qsl(urllib.parse.urlsplit(payment_response_url).query))
    assert url_param_dict['trnDate'] == today
    assert url_param_dict['glDate'] == today
    assert url_param_dict['description'] == 'Direct_Sale'
    assert url_param_dict['pbcRefNumber'] == current_app.config.get('PAYBC_DIRECT_PAY_REF_NUMBER')
    assert url_param_dict['trnNumber'] == generate_transaction_number(invoice.id)
    assert url_param_dict['trnAmount'] == str(invoice.total)
    assert url_param_dict['paymentMethod'] == 'CC'
    assert url_param_dict['redirectUri'] == 'google.com'
    revenue_str = f"1:{distribution_code_payload['client']}." \
                  f"{distribution_code_payload['responsibilityCentre']}." \
                  f"{distribution_code_payload['serviceLine']}." \
                  f"{distribution_code_payload['stob']}." \
                  f"{distribution_code_payload['projectCode']}." \
                  f'000000.0000:10.00'
    revenue_str_service_fee = f"2:{distribution_code_payload['client']}." \
                              f"{distribution_code_payload['responsibilityCentre']}." \
                              f"{distribution_code_payload['serviceLine']}." \
                              f"{distribution_code_payload['stob']}." \
                              f"{distribution_code_payload['projectCode']}." \
                              f'000000.0000:{format(service_fee, DECIMAL_PRECISION)}'
    assert url_param_dict['revenue'] == f'{revenue_str}|{revenue_str_service_fee}'
    urlstring = f"trnDate={today}&pbcRefNumber={current_app.config.get('PAYBC_DIRECT_PAY_REF_NUMBER')}&" \
                f'glDate={today}&description=Direct_Sale&' \
                f'trnNumber={generate_transaction_number(invoice.id)}&' \
                f'trnAmount={invoice.total}&' \
                f'paymentMethod=CC&' \
                f'redirectUri=google.com&' \
                f'currency=CAD&' \
                f'revenue={revenue_str}|' \
                f'{revenue_str_service_fee}'
    expected_hash_str = HashingService.encode(urlstring)

    assert expected_hash_str == url_param_dict['hashValue']
def test_distribution_code_saved_from_new(session, public_user_mock):
    """Assert that the fee schedule is saved to the table."""
    distribution_code_svc = services.DistributionCode()
    distribution_code = distribution_code_svc.save_or_update(
        get_distribution_code_payload())
    assert distribution_code is not None
    assert distribution_code.get('client') == '100'
示例#5
0
def test_create_distribution_with_unauthorized_token(session, client, jwt, app):
    """Assert that the endpoint returns 401."""
    # Insert a record first and then query for it
    token = jwt.create_jwt(get_claims(role=Role.STAFF.value), token_header)
    headers = {'Authorization': f'Bearer {token}', 'content-type': 'application/json'}

    rv = client.post('/api/v1/fees/distributions', data=json.dumps(get_distribution_code_payload()), headers=headers)
    assert rv.status_code == 401
def test_create_distribution_to_fee_link(session, public_user_mock):
    """Assert that the fee schedule is saved to the table."""
    distribution_code_svc = services.DistributionCode()
    distribution_code = distribution_code_svc.save_or_update(
        get_distribution_code_payload())
    assert distribution_code is not None
    distribution_id = distribution_code.get('distribution_code_id')

    distribution_code_svc.create_link([{
        'feeScheduleId': 1
    }, {
        'feeScheduleId': 2
    }, {
        'feeScheduleId': 3
    }], distribution_id)

    schedules = distribution_code_svc.find_fee_schedules_by_distribution_id(
        distribution_id)
    assert len(schedules.get('items')) == 3