forked from erp-dev/erp
feat: printing module
This commit is contained in:
@@ -2,10 +2,13 @@
|
||||
Stateflow API 测试
|
||||
"""
|
||||
from django.test import TestCase
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from rest_framework.test import APIClient
|
||||
from rest_framework import status
|
||||
from django.contrib.auth import get_user_model
|
||||
from stateflow import models
|
||||
import tempfile
|
||||
import os
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
@@ -92,6 +95,140 @@ class StateAPITestCase(TestCase):
|
||||
response = self.client.get('/api/v1/stateflow/states/?search=审核&limit=10&offset=0')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data['count'], 1)
|
||||
|
||||
def test_create_state_parameter_with_attachment(self):
|
||||
"""测试创建带附件的状态参数"""
|
||||
# 创建一个测试文件
|
||||
test_file = SimpleUploadedFile(
|
||||
"test_doc.txt",
|
||||
b"This is a test document content",
|
||||
content_type="text/plain"
|
||||
)
|
||||
|
||||
# 先创建状态
|
||||
state = models.State.objects.create(name='测试状态', description='带附件')
|
||||
|
||||
# 创建带附件的参数
|
||||
param = models.StateParameter.objects.create(
|
||||
state=state,
|
||||
key='document',
|
||||
value='测试文档',
|
||||
attachment=test_file,
|
||||
description='这是一个测试文档'
|
||||
)
|
||||
|
||||
# 验证附件已保存
|
||||
self.assertIsNotNone(param.attachment)
|
||||
self.assertIn('test_doc', param.attachment.name) # 文件名可能有哈希前缀
|
||||
|
||||
# 通过 API 获取状态详情,验证附件字段
|
||||
response = self.client.get(f'/api/v1/stateflow/states/{state.id}/')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
|
||||
# 验证参数中包含附件信息
|
||||
parameters = response.data['parameters']
|
||||
self.assertEqual(len(parameters), 1)
|
||||
self.assertIn('attachment', parameters[0])
|
||||
self.assertIn('attachment_url', parameters[0])
|
||||
self.assertIsNotNone(parameters[0]['attachment_url'])
|
||||
|
||||
# 清理测试文件
|
||||
if param.attachment:
|
||||
param.attachment.delete()
|
||||
|
||||
def test_state_parameter_without_attachment(self):
|
||||
"""测试创建不带附件的状态参数"""
|
||||
state = models.State.objects.create(name='测试状态2', description='不带附件')
|
||||
param = models.StateParameter.objects.create(
|
||||
state=state,
|
||||
key='simple_param',
|
||||
value='简单值',
|
||||
description='简单参数'
|
||||
)
|
||||
|
||||
# 验证附件字段为空
|
||||
self.assertFalse(param.attachment)
|
||||
|
||||
# 通过 API 获取状态详情
|
||||
response = self.client.get(f'/api/v1/stateflow/states/{state.id}/')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
|
||||
# 验证附件字段为 null
|
||||
parameters = response.data['parameters']
|
||||
self.assertEqual(len(parameters), 1)
|
||||
self.assertIsNone(parameters[0]['attachment'])
|
||||
self.assertIsNone(parameters[0]['attachment_url'])
|
||||
|
||||
def test_update_state_parameter_with_attachment(self):
|
||||
"""测试更新状态参数时添加附件"""
|
||||
# 创建初始状态和参数(不带附件)
|
||||
state = models.State.objects.create(name='测试状态3', description='更新附件')
|
||||
param = models.StateParameter.objects.create(
|
||||
state=state,
|
||||
key='updatable_param',
|
||||
value='初始值',
|
||||
description='可更新参数'
|
||||
)
|
||||
|
||||
# 验证初始无附件
|
||||
self.assertFalse(param.attachment)
|
||||
|
||||
# 添加附件
|
||||
test_file = SimpleUploadedFile(
|
||||
"updated_doc.pdf",
|
||||
b"Updated document content",
|
||||
content_type="application/pdf"
|
||||
)
|
||||
param.attachment = test_file
|
||||
param.save()
|
||||
|
||||
# 验证附件已添加
|
||||
param.refresh_from_db()
|
||||
self.assertIsNotNone(param.attachment)
|
||||
self.assertIn('updated_doc', param.attachment.name) # 文件名可能有哈希前缀
|
||||
|
||||
# 通过 API 验证
|
||||
response = self.client.get(f'/api/v1/stateflow/states/{state.id}/')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
parameters = response.data['parameters']
|
||||
self.assertIsNotNone(parameters[0]['attachment'])
|
||||
self.assertIsNotNone(parameters[0]['attachment_url'])
|
||||
|
||||
# 清理
|
||||
if param.attachment:
|
||||
param.attachment.delete()
|
||||
|
||||
def test_state_parameter_attachment_url_format(self):
|
||||
"""测试附件 URL 格式正确"""
|
||||
test_file = SimpleUploadedFile(
|
||||
"test_image.jpg",
|
||||
b"fake image content",
|
||||
content_type="image/jpeg"
|
||||
)
|
||||
|
||||
state = models.State.objects.create(name='图片状态', description='带图片')
|
||||
param = models.StateParameter.objects.create(
|
||||
state=state,
|
||||
key='image',
|
||||
value='测试图片',
|
||||
attachment=test_file
|
||||
)
|
||||
|
||||
# 通过 API 获取
|
||||
response = self.client.get(f'/api/v1/stateflow/states/{state.id}/')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
|
||||
parameters = response.data['parameters']
|
||||
attachment_url = parameters[0]['attachment_url']
|
||||
|
||||
# 验证 URL 格式
|
||||
self.assertIsNotNone(attachment_url)
|
||||
self.assertIn('http', attachment_url) # 应该是完整 URL
|
||||
self.assertIn('state_parameters/', attachment_url) # 包含上传路径
|
||||
|
||||
# 清理
|
||||
if param.attachment:
|
||||
param.attachment.delete()
|
||||
|
||||
|
||||
class ProcessAPITestCase(TestCase):
|
||||
|
||||
Reference in New Issue
Block a user