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'
def test_update_distribution(session, public_user_mock, stan_server,
                             monkeypatch):
    """Assert that the invoice status is updated when the distribution is updated."""
    # 1. Create a distribution code
    # 2. Attach a fee schedule to the distribution
    # 3. Create and complete payment
    # 4. Update the distribution and assert the invoice status is changed.
    distribution_code_svc = services.DistributionCode()
    fee_schedule = FeeSchedule.find_by_filing_type_and_corp_type('CP', 'OTANN')

    # Create a direct pay
    current_app.config['DIRECT_PAY_ENABLED'] = True
    payment_account = factory_payment_account(
        payment_method_code=PaymentMethod.DIRECT_PAY.value)
    payment_account.save()

    invoice = factory_invoice(payment_account, total=30)
    invoice.save()
    invoice_reference = factory_invoice_reference(invoice.id).save()
    line = factory_payment_line_item(
        invoice.id, fee_schedule_id=fee_schedule.fee_schedule_id)
    line.save()

    factory_payment(invoice_number=invoice_reference.invoice_number,
                    payment_method_code=PaymentMethod.DIRECT_PAY.value,
                    invoice_amount=30).save()

    distribution_id = line.fee_distribution_id

    distribution_code = distribution_code_svc.find_by_id(distribution_id)

    transaction = PaymentTransactionService.create_transaction_for_invoice(
        invoice.id, get_paybc_transaction_request())

    def get_receipt(cls, payment_account, pay_response_url: str,
                    invoice_reference):  # pylint: disable=unused-argument; mocks of library methods
        return '1234567890', datetime.now(), 30.00

    monkeypatch.setattr(
        'pay_api.services.direct_pay_service.DirectPayService.get_receipt',
        get_receipt)

    # Update transaction without response url, which should update the receipt
    PaymentTransactionService.update_transaction(transaction.id,
                                                 pay_response_url=None)

    invoice = InvoiceModel.find_by_id(invoice.id)
    assert invoice.invoice_status_code == InvoiceStatus.PAID.value

    # Update distribution code
    distribution_code_svc.save_or_update(distribution_code, distribution_id)
    invoice = InvoiceModel.find_by_id(invoice.id)
    assert invoice.invoice_status_code == InvoiceStatus.UPDATE_REVENUE_ACCOUNT.value
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