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)