1
0
forked from erp-dev/erp

feat: added print_count api, added merchant setting model, added manual mode setting for purchase order

This commit is contained in:
2025-11-28 15:01:11 +08:00
parent 53f2a24b20
commit 0c62398120
36 changed files with 1634 additions and 478 deletions

View File

@@ -0,0 +1,91 @@
from django.contrib.auth import get_user_model
from django.test import TestCase
from rest_framework import status
from rest_framework.test import APIClient
from basic_info.models import Merchant, MerchantTypeEnum, Customer
from printing import models as printing_models
class PrintCountDeltaAPITestCase(TestCase):
"""打印次数增量接口测试"""
url = '/api/v1/print-count/delta/'
def setUp(self):
self.client = APIClient()
self.user = get_user_model().objects.create_user(username='tester', password='test123')
self.client.force_authenticate(self.user)
self.merchant = Merchant.objects.create(name='测试商户', type=MerchantTypeEnum.FACTORY)
self.customer = Customer.objects.create(
merchant=self.merchant,
name='客户甲',
mobile='13900000000',
created_by=None,
)
self.printing_order = printing_models.PrintingOrder.objects.create(
customer=self.customer,
fabric='棉布',
width='150cm',
)
self.plate_order = printing_models.PlateOrder.objects.create(
customer=self.customer,
design_code='DES-001',
)
def test_increment_printing_order_with_delta(self):
response = self.client.post(
self.url,
{
'object_type': 'printing_order',
'object_id': self.printing_order.id,
'delta': 3,
},
format='json',
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.printing_order.refresh_from_db()
self.assertEqual(self.printing_order.print_count, 3)
self.assertEqual(response.data['print_count'], 3)
self.assertEqual(response.data['delta'], 3)
def test_delta_defaults_to_one_when_invalid(self):
response = self.client.post(
self.url,
{
'object_type': 'plate_order',
'object_id': self.plate_order.id,
'delta': 'invalid',
},
format='json',
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.plate_order.refresh_from_db()
self.assertEqual(self.plate_order.print_count, 1)
self.assertEqual(response.data['delta'], 1)
def test_invalid_object_type_returns_400(self):
response = self.client.post(
self.url,
{
'object_type': 'unknown_type',
'object_id': self.printing_order.id,
},
format='json',
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn('object_type', response.data)
def test_not_found_returns_404(self):
response = self.client.post(
self.url,
{
'object_type': 'printing_order',
'object_id': 999999,
},
format='json',
)
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)