forked from erp-dev/erp
feat: message-api for mission via wecomm agent
This commit is contained in:
@@ -541,30 +541,44 @@ class MissionV2APITest(TestCase):
|
||||
[item["name"] for item in list_resp.data],
|
||||
["通用", "跟进"],
|
||||
)
|
||||
self.assertEqual(list_resp.data[0]["payload_processor"], "")
|
||||
|
||||
create_resp = self.client.post(
|
||||
"/api/v2/mission-categories/",
|
||||
{"name": "售后"},
|
||||
{"name": "售后", "payload_processor": "structured_description_v1"},
|
||||
format="json",
|
||||
)
|
||||
self.assertEqual(create_resp.status_code, 201)
|
||||
category_id = create_resp.data["id"]
|
||||
self.assertEqual(create_resp.data["payload_processor"], "structured_description_v1")
|
||||
|
||||
detail_resp = self.client.get(f"/api/v2/mission-categories/{category_id}/")
|
||||
self.assertEqual(detail_resp.status_code, 200)
|
||||
self.assertEqual(detail_resp.data["name"], "售后")
|
||||
self.assertEqual(detail_resp.data["payload_processor"], "structured_description_v1")
|
||||
|
||||
patch_resp = self.client.patch(
|
||||
f"/api/v2/mission-categories/{category_id}/",
|
||||
{"name": "售后跟进"},
|
||||
{"name": "售后跟进", "payload_processor": ""},
|
||||
format="json",
|
||||
)
|
||||
self.assertEqual(patch_resp.status_code, 200)
|
||||
self.assertEqual(patch_resp.data["name"], "售后跟进")
|
||||
self.assertEqual(patch_resp.data["payload_processor"], "")
|
||||
|
||||
delete_resp = self.client.delete(f"/api/v2/mission-categories/{category_id}/")
|
||||
self.assertEqual(delete_resp.status_code, 204)
|
||||
|
||||
def test_mission_category_rejects_unknown_payload_processor(self):
|
||||
resp = self.client.post(
|
||||
"/api/v2/mission-categories/",
|
||||
{"name": "售后", "payload_processor": "unknown_processor"},
|
||||
format="json",
|
||||
)
|
||||
|
||||
self.assertEqual(resp.status_code, 400)
|
||||
self.assertIn("payload_processor", resp.data)
|
||||
|
||||
def test_delete_used_mission_category_is_rejected(self):
|
||||
mission = self._create_mission()
|
||||
|
||||
|
||||
@@ -108,6 +108,11 @@ class MissionUrgentSerializer(serializers.Serializer):
|
||||
|
||||
class MissionCategoryWriteSerializer(serializers.Serializer):
|
||||
name = serializers.CharField(allow_blank=False, max_length=50)
|
||||
payload_processor = serializers.ChoiceField(
|
||||
choices=mission_models.MissionPayloadProcessorEnum.choices,
|
||||
required=False,
|
||||
allow_blank=True,
|
||||
)
|
||||
|
||||
def validate_name(self, value):
|
||||
value = value.strip()
|
||||
@@ -251,6 +256,7 @@ class MissionCategorySerializer(serializers.ModelSerializer):
|
||||
"id",
|
||||
"merchant",
|
||||
"name",
|
||||
"payload_processor",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
]
|
||||
@@ -402,6 +408,7 @@ class MissionCategoryListCreateView(APIView):
|
||||
category = mission_models.MissionCategory.objects.create(
|
||||
merchant=employee.merchant,
|
||||
name=serializer.validated_data["name"],
|
||||
payload_processor=serializer.validated_data.get("payload_processor", ""),
|
||||
)
|
||||
except IntegrityError:
|
||||
return Response({"name": ["分类名称已存在"]}, status=status.HTTP_400_BAD_REQUEST)
|
||||
@@ -428,10 +435,16 @@ class MissionCategoryDetailView(APIView):
|
||||
context={"employee": employee, "instance": category},
|
||||
)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
update_fields = []
|
||||
if "name" in serializer.validated_data:
|
||||
category.name = serializer.validated_data["name"]
|
||||
update_fields.append("name")
|
||||
if "payload_processor" in serializer.validated_data:
|
||||
category.payload_processor = serializer.validated_data["payload_processor"]
|
||||
update_fields.append("payload_processor")
|
||||
if update_fields:
|
||||
try:
|
||||
category.save(update_fields=["name", "updated_at"])
|
||||
category.save(update_fields=[*update_fields, "updated_at"])
|
||||
except IntegrityError:
|
||||
return Response({"name": ["分类名称已存在"]}, status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response(MissionCategorySerializer(category).data)
|
||||
|
||||
Reference in New Issue
Block a user