You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
3.3 KiB
93 lines
3.3 KiB
from django.test import TestCase
|
|
|
|
from django.urls import reverse
|
|
from rest_framework import status
|
|
from rest_framework.test import APITestCase
|
|
from api.models import Students
|
|
from api.models import Pledge
|
|
from decimal import Decimal
|
|
|
|
class StudentsAPITests(APITestCase):
|
|
|
|
def setUp(self):
|
|
# 创建一些测试数据
|
|
self.student = Students.objects.create(sid='123', name='Student1', score=Decimal('0.0'))
|
|
|
|
|
|
|
|
|
|
def test_update_student_score(self):
|
|
# 测试更新学生积分的功能
|
|
response = self.client.post(reverse('update_student_score'), {'student_id': self.student.sid, 'score': 5.5})
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
self.student.refresh_from_db() # 刷新数据库数据
|
|
self.assertEqual(self.student.score, Decimal('5.5'))
|
|
|
|
|
|
|
|
|
|
def test_create_pledge_success(self):
|
|
# 测试成功创建典当信息
|
|
data = {
|
|
'studentId': self.student.sid,
|
|
'studentName': self.student.name,
|
|
'pledgeScore': 10,
|
|
}
|
|
response = self.client.post(reverse('create_pledge'), data)
|
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
|
self.assertIn('典当信息已保存', response.data.values())
|
|
self.assertTrue(Pledge.objects.filter(student_id=self.student.sid).exists())
|
|
|
|
|
|
def test_create_pledge_missing_fields(self):
|
|
# 测试创建典当时缺少字段
|
|
data = {
|
|
'studentId': self.student.sid,
|
|
'studentName': '',
|
|
'pledgeScore': 10,
|
|
}
|
|
response = self.client.post(reverse('create_pledge'), data)
|
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
|
self.assertIn('所有字段都是必需的', response.data['error'])
|
|
|
|
|
|
|
|
def test_update_question_score_success_without_pledge(self):
|
|
# 测试更新积分时没有典当信息
|
|
data = {
|
|
'studentId': self.student.sid,
|
|
'questionScore': 2,
|
|
}
|
|
response = self.client.post(reverse('update_question_score'), data)
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
self.student.refresh_from_db()
|
|
self.assertEqual(self.student.score, Decimal('2.0')) # 0.0 + 2
|
|
|
|
|
|
def test_update_question_score_student_not_found(self):
|
|
# 测试更新积分时学生不存在
|
|
data = {
|
|
'studentId': '999', # 一个不存在的学生ID
|
|
'questionScore': 5,
|
|
}
|
|
response = self.client.post(reverse('update_question_score'), data)
|
|
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
|
self.assertEqual(response.data['error'], '学生不存在')
|
|
|
|
|
|
def test_update_question_score_exception_handling(self):
|
|
# 测试更新积分时的异常处理
|
|
pledge = Pledge.objects.create(student_id=self.student.sid, student_name=self.student.name, pledge_score=5,
|
|
status=0)
|
|
|
|
# 模拟异常(例如分数为字符串)
|
|
data = {
|
|
'studentId': self.student.sid,
|
|
'questionScore': 'invalid_score',
|
|
}
|
|
response = self.client.post(reverse('update_question_score'), data)
|
|
self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR)
|
|
|
|
|
|
|