feat:cms relation hospital bug fix
This commit is contained in:
+40
-15
@@ -36,9 +36,16 @@ class CmsRelationTest(CacheTestCase):
|
||||
self.other = ensure_institution(name='他院', code='REL-B')
|
||||
self.admin = create_test_user(phone='13932000001', role_type='hospital_admin', institution=self.inst)
|
||||
self.client = get_auth_client(self.admin)
|
||||
self.doc = create_test_user(phone='13932000002', role_type='doctor', institution=self.inst)
|
||||
self.stu = create_test_user(phone='13932000003', role_type='student', institution=self.inst)
|
||||
self.other_stu = create_test_user(phone='13932000004', role_type='student', institution=self.other)
|
||||
self.doc = create_test_user(phone='13932000002', real_name='张医生', role_type='doctor', institution=self.inst)
|
||||
self.stu = create_test_user(phone='13932000003', real_name='李同学', role_type='student', institution=self.inst)
|
||||
self.other_stu = create_test_user(phone='13932000004', real_name='王同学', role_type='student', institution=self.other)
|
||||
|
||||
# 完整新增载荷(姓名+手机号均必填)
|
||||
def _payload(self, **over):
|
||||
p = {'teacher_name': '张医生', 'teacher_phone': '13932000002',
|
||||
'student_name': '李同学', 'student_phone': '13932000003'}
|
||||
p.update(over)
|
||||
return p
|
||||
|
||||
def test_permission(self):
|
||||
self.assertEqual(APIClient().get(REL_URL).status_code, 401)
|
||||
@@ -46,37 +53,55 @@ class CmsRelationTest(CacheTestCase):
|
||||
self.assertEqual(stu_client.get(REL_URL).status_code, 403)
|
||||
|
||||
def test_create_and_list(self):
|
||||
resp = self.client.post(REL_URL, {'teacher_phone': '13932000002', 'student_phone': '13932000003'})
|
||||
resp = self.client.post(REL_URL, self._payload())
|
||||
self.assertEqual(resp.status_code, 201, resp.content)
|
||||
self.assertEqual(resp.json()['teacher_phone'], '13932000002')
|
||||
self.assertEqual(resp.json()['student_phone'], '13932000003')
|
||||
self.assertEqual(resp.json()['teacher_name'], '张医生')
|
||||
self.assertEqual(resp.json()['student_name'], '李同学')
|
||||
# 列表
|
||||
resp = self.client.get(REL_URL)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(len(resp.json()['results']), 1)
|
||||
|
||||
def test_create_missing_phone_400(self):
|
||||
resp = self.client.post(REL_URL, {'teacher_phone': '13932000002'})
|
||||
def test_create_missing_name_400(self):
|
||||
resp = self.client.post(REL_URL, self._payload(student_name=''))
|
||||
self.assertEqual(resp.status_code, 400, resp.content)
|
||||
self.assertEqual(resp.json()['code'], 'CMS_VALIDATION_ERROR')
|
||||
|
||||
def test_create_name_phone_mismatch_400(self):
|
||||
# 姓名与手机号不符 → 解析不到
|
||||
resp = self.client.post(REL_URL, self._payload(teacher_name='不存在'))
|
||||
self.assertEqual(resp.status_code, 400, resp.content)
|
||||
self.assertEqual(resp.json()['code'], 'CMS_REL_TEACHER_NOT_FOUND')
|
||||
|
||||
def test_create_duplicate(self):
|
||||
self.client.post(REL_URL, {'teacher_phone': '13932000002', 'student_phone': '13932000003'})
|
||||
resp = self.client.post(REL_URL, {'teacher_phone': '13932000002', 'student_phone': '13932000003'})
|
||||
self.client.post(REL_URL, self._payload())
|
||||
resp = self.client.post(REL_URL, self._payload())
|
||||
self.assertEqual(resp.status_code, 400, resp.content)
|
||||
self.assertEqual(resp.json()['code'], 'CMS_REL_EXISTS')
|
||||
|
||||
def test_teacher_must_be_doctor(self):
|
||||
# 用学生手机号当带教老师 → 解析不到 doctor
|
||||
resp = self.client.post(REL_URL, {'teacher_phone': '13932000003', 'student_phone': '13932000003'})
|
||||
# 用学生姓名+手机号当带教老师 → 解析不到 doctor
|
||||
resp = self.client.post(REL_URL, self._payload(teacher_name='李同学', teacher_phone='13932000003'))
|
||||
self.assertEqual(resp.status_code, 400, resp.content)
|
||||
self.assertEqual(resp.json()['code'], 'CMS_REL_TEACHER_NOT_FOUND')
|
||||
|
||||
def test_scope_other_institution_student_rejected(self):
|
||||
resp = self.client.post(REL_URL, {'teacher_phone': '13932000002', 'student_phone': '13932000004'})
|
||||
resp = self.client.post(REL_URL, self._payload(student_name='王同学', student_phone='13932000004'))
|
||||
self.assertEqual(resp.status_code, 403, resp.content)
|
||||
self.assertEqual(resp.json()['code'], 'CMS_REL_SCOPE_FORBIDDEN')
|
||||
|
||||
def test_dropdown_lists(self):
|
||||
# 2 个下拉数据源:本院 doctor / student,姓名+手机号一并返回
|
||||
docs = self.client.get(REL_URL + 'doctors/').json()
|
||||
self.assertEqual(docs, [{'id': self.doc.id, 'real_name': '张医生', 'phone': '13932000002'}])
|
||||
studs = self.client.get(REL_URL + 'students/').json()
|
||||
# 他院学生不在内(本院仅李同学)
|
||||
self.assertEqual(studs, [{'id': self.stu.id, 'real_name': '李同学', 'phone': '13932000003'}])
|
||||
# 学生无权访问
|
||||
self.assertEqual(get_auth_client(self.stu).get(REL_URL + 'doctors/').status_code, 403)
|
||||
|
||||
def test_soft_delete(self):
|
||||
r = TeacherStudentRelation.objects.create(teacher=self.doc, student=self.stu, status=1)
|
||||
resp = self.client.post(rel_disable(r.id))
|
||||
@@ -85,10 +110,10 @@ class CmsRelationTest(CacheTestCase):
|
||||
self.assertTrue(TeacherStudentRelation.all_objects.get(id=r.id).is_deleted)
|
||||
|
||||
def test_import_and_export(self):
|
||||
f = make_xlsx(['带教医生手机号', '学生手机号'], [
|
||||
['13932000002', '13932000003'], # ✅
|
||||
['13932000002', '13932000004'], # 学生他院 → 失败
|
||||
['00000000000', '13932000003'], # 医生不存在 → 失败
|
||||
f = make_xlsx(['带教医生姓名', '带教医生手机号', '学生姓名', '学生手机号'], [
|
||||
['张医生', '13932000002', '李同学', '13932000003'], # ✅
|
||||
['张医生', '13932000002', '王同学', '13932000004'], # 学生他院 → 失败
|
||||
['不存在', '00000000000', '李同学', '13932000003'], # 医生不存在 → 失败
|
||||
])
|
||||
resp = self.client.post('/api/cms/teacher-student-relations/import/', {'file': f}, format='multipart')
|
||||
self.assertEqual(resp.status_code, 200, resp.content)
|
||||
|
||||
Reference in New Issue
Block a user