| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- """两类缴费的财务确认/退回成功路径与重复操作拒绝,纯内存数据库。"""
- import pytest
- from sqlalchemy import create_engine
- from sqlalchemy.orm import sessionmaker
- from app.crud import presign_order, protocol_sample_payment
- from app.models.base import Base
- from app.models.models import (
- BizCollectionProtocol, BizPresignOrder, BizPresignTransfer,
- BizProtocolSamplePayment, BizProtocolPaymentSchedule, BizProtocolPaymentTransfer,
- )
- @pytest.mark.parametrize('kind', ['presign', 'sample'])
- @pytest.mark.parametrize('operation,expected', [('confirm', 'yjf'), ('reject', 'dfj')])
- def test_finance_transition_succeeds_once_and_rejects_duplicate(kind, operation, expected):
- engine = create_engine('sqlite:///:memory:')
- Base.metadata.create_all(engine)
- with sessionmaker(bind=engine)() as db:
- common = dict(tenant_no='tenant-a', create_dept_id='', del_flag=0)
- if kind == 'presign':
- db.add(BizPresignOrder(id='p', order_status='active', protocol_no='P', **common))
- db.add(BizPresignTransfer(id='t', presign_order_id='p', pay_status='jfqrz', transfer_amount=100, **common))
- crud, model = presign_order, BizPresignTransfer
- else:
- db.add_all([
- BizCollectionProtocol(id='p', protocol_no='P', **common),
- BizProtocolSamplePayment(id='pay', collection_protocol_id='p', sample_code='S', pay_mode='dj', contract_amount=100, **common),
- BizProtocolPaymentSchedule(id='sch', sample_payment_id='pay', collection_protocol_id='p', sample_code='S', schedule_no=1, due_amount=100, schedule_status='open', **common),
- BizProtocolPaymentTransfer(id='t', schedule_id='sch', sample_payment_id='pay', collection_protocol_id='p', sample_code='S', transfer_amount=100, pay_status='jfqrz', **common),
- ])
- crud, model = protocol_sample_payment, BizProtocolPaymentTransfer
- db.commit()
- function = crud.confirm_receipt if operation == 'confirm' else crud.reject_receipt
- result = function(db, transfer_id='t', tenant_no='tenant-a', user_id='finance')
- assert result.pay_status == expected
- with pytest.raises(ValueError):
- function(db, transfer_id='t', tenant_no='tenant-a', user_id='finance')
- assert db.query(model).filter_by(id='t').one().pay_status == expected
- if kind == 'sample' and operation == 'confirm':
- assert (
- db.query(BizProtocolPaymentSchedule).filter_by(id='sch').one().schedule_status
- == 'cleared'
- )
- engine.dispose()
|