forked from erp-dev/erp
feat: payment order and receipt order
This commit is contained in:
119
api_v1/tests.py
119
api_v1/tests.py
@@ -11,6 +11,7 @@ from rest_framework import status
|
||||
from basic_info.models import (
|
||||
Customer,
|
||||
Employee,
|
||||
EmployeeStatusEnum,
|
||||
Merchant,
|
||||
MerchantTypeEnum,
|
||||
Product,
|
||||
@@ -450,6 +451,124 @@ class SalesOrderAPITestCase(TestCase):
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
order = business_models.SalesOrder.objects.get(id=order_id)
|
||||
self.assertEqual(order.status, business_models.SalesOrderStatusEnum.PENDING)
|
||||
|
||||
|
||||
class PaymentOrderAPITestCase(TestCase):
|
||||
def setUp(self):
|
||||
self.merchant = Merchant.objects.create(name='付款商户', type=MerchantTypeEnum.FACTORY)
|
||||
self.supplier = Supplier.objects.create(merchant=self.merchant, name='付款供应商')
|
||||
self.user = User.objects.create_user(username='pay_user', password='pass123')
|
||||
self.employee = Employee.objects.create(
|
||||
merchant=self.merchant,
|
||||
sys_user=self.user,
|
||||
name='财务',
|
||||
status=EmployeeStatusEnum.ACTIVE,
|
||||
)
|
||||
self.client = APIClient()
|
||||
self.client.force_authenticate(user=self.user)
|
||||
self.payload = {
|
||||
'supplier': self.supplier.id,
|
||||
'payment_date': '2025-11-26',
|
||||
'amount': '120.5',
|
||||
'remarks': '付款备注',
|
||||
}
|
||||
|
||||
def test_create_payment_order_success(self):
|
||||
response = self.client.post('/api/v1/payment-orders/', self.payload, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||
self.assertIn('id', response.data)
|
||||
|
||||
def test_create_payment_order_invalid_supplier(self):
|
||||
payload = {**self.payload, 'supplier': 999}
|
||||
response = self.client.post('/api/v1/payment-orders/', payload, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
def test_review_payment_order(self):
|
||||
resp = self.client.post('/api/v1/payment-orders/', self.payload, format='json')
|
||||
order_id = resp.data['id']
|
||||
response = self.client.post(f'/api/v1/payment-orders/{order_id}/review/', {'action': 'approve'}, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data['status'], business_models.PaymentOrderStatusEnum.APPROVED)
|
||||
response_cancel = self.client.post(
|
||||
f'/api/v1/payment-orders/{order_id}/review/',
|
||||
{'action': 'cancel'},
|
||||
format='json',
|
||||
)
|
||||
self.assertEqual(response_cancel.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response_cancel.data['status'], business_models.PaymentOrderStatusEnum.CANCELLED)
|
||||
|
||||
def test_payment_order_requires_amount(self):
|
||||
payload = {**self.payload}
|
||||
payload.pop('amount')
|
||||
response = self.client.post('/api/v1/payment-orders/', payload, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertIn('缺少 amount', response.data['error'])
|
||||
|
||||
def test_payment_order_amount_must_be_positive(self):
|
||||
payload = {**self.payload, 'amount': '0'}
|
||||
response = self.client.post('/api/v1/payment-orders/', payload, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertIn('amount 必须大于 0', response.data['error'])
|
||||
|
||||
|
||||
class ReceiptOrderAPITestCase(TestCase):
|
||||
def setUp(self):
|
||||
self.merchant = Merchant.objects.create(name='收款商户', type=MerchantTypeEnum.FACTORY)
|
||||
self.customer = Customer.objects.create(
|
||||
merchant=self.merchant,
|
||||
name='客户C',
|
||||
mobile='13812345678',
|
||||
created_by=None,
|
||||
)
|
||||
self.user = User.objects.create_user(username='receipt_user', password='pass123')
|
||||
self.employee = Employee.objects.create(
|
||||
merchant=self.merchant,
|
||||
sys_user=self.user,
|
||||
name='财务员',
|
||||
status=EmployeeStatusEnum.ACTIVE,
|
||||
)
|
||||
self.client = APIClient()
|
||||
self.client.force_authenticate(user=self.user)
|
||||
self.payload = {
|
||||
'customer': self.customer.id,
|
||||
'receipt_date': '2025-11-26',
|
||||
'amount': '88.00',
|
||||
'remarks': '收款备注',
|
||||
}
|
||||
|
||||
def test_create_receipt_order_success(self):
|
||||
response = self.client.post('/api/v1/receipt-orders/', self.payload, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||
self.assertIn('id', response.data)
|
||||
|
||||
def test_create_receipt_order_invalid_customer(self):
|
||||
payload = {**self.payload, 'customer': 999}
|
||||
response = self.client.post('/api/v1/receipt-orders/', payload, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
def test_review_receipt_order(self):
|
||||
resp = self.client.post('/api/v1/receipt-orders/', self.payload, format='json')
|
||||
order_id = resp.data['id']
|
||||
response = self.client.post(
|
||||
f'/api/v1/receipt-orders/{order_id}/review/',
|
||||
{'action': 'cancel'},
|
||||
format='json',
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data['status'], business_models.ReceiptOrderStatusEnum.CANCELLED)
|
||||
|
||||
def test_receipt_order_requires_amount(self):
|
||||
payload = {**self.payload}
|
||||
payload.pop('amount')
|
||||
response = self.client.post('/api/v1/receipt-orders/', payload, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertIn('缺少 amount', response.data['error'])
|
||||
|
||||
def test_receipt_order_amount_must_be_positive(self):
|
||||
payload = {**self.payload, 'amount': '0'}
|
||||
response = self.client.post('/api/v1/receipt-orders/', payload, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertIn('amount 必须大于 0', response.data['error'])
|
||||
@override_settings(
|
||||
CELERY_TASK_ALWAYS_EAGER=True,
|
||||
CELERY_TASK_EAGER_PROPAGATES=True,
|
||||
|
||||
Reference in New Issue
Block a user