refactor(reaction): 收敛为单选接口
This commit is contained in:
56
reaction/tests.py
Normal file
56
reaction/tests.py
Normal file
@@ -0,0 +1,56 @@
|
||||
from unittest import TestCase
|
||||
|
||||
from reaction.models import Reaction
|
||||
from reaction.serializers import SetReactionSerializer
|
||||
|
||||
|
||||
class SetReactionSerializerTests(TestCase):
|
||||
def test_accepts_one_reaction(self):
|
||||
serializer = SetReactionSerializer(data={"problem_id": 1, "type": "learned"})
|
||||
|
||||
self.assertTrue(serializer.is_valid(), serializer.errors)
|
||||
self.assertEqual(serializer.validated_data["type"], "learned")
|
||||
|
||||
def test_accepts_legacy_single_reaction(self):
|
||||
serializer = SetReactionSerializer(data={"problem_id": 1, "types": ["learned"]})
|
||||
|
||||
self.assertTrue(serializer.is_valid(), serializer.errors)
|
||||
self.assertEqual(serializer.validated_data["type"], "learned")
|
||||
|
||||
def test_accepts_matching_transition_fields(self):
|
||||
serializer = SetReactionSerializer(data={"problem_id": 1, "type": "learned", "types": ["learned"]})
|
||||
|
||||
self.assertTrue(serializer.is_valid(), serializer.errors)
|
||||
|
||||
def test_rejects_multiple_legacy_reactions(self):
|
||||
serializer = SetReactionSerializer(data={"problem_id": 1, "types": ["learned", "interesting"]})
|
||||
|
||||
self.assertFalse(serializer.is_valid())
|
||||
self.assertIn("types", serializer.errors)
|
||||
|
||||
def test_rejects_mismatched_transition_fields(self):
|
||||
serializer = SetReactionSerializer(data={"problem_id": 1, "type": "learned", "types": ["interesting"]})
|
||||
|
||||
self.assertFalse(serializer.is_valid())
|
||||
self.assertIn("types", serializer.errors)
|
||||
|
||||
def test_rejects_missing_reaction(self):
|
||||
serializer = SetReactionSerializer(data={"problem_id": 1})
|
||||
|
||||
self.assertFalse(serializer.is_valid())
|
||||
self.assertIn("type", serializer.errors)
|
||||
|
||||
def test_rejects_unknown_reaction(self):
|
||||
serializer = SetReactionSerializer(data={"problem_id": 1, "type": "unknown"})
|
||||
|
||||
self.assertFalse(serializer.is_valid())
|
||||
self.assertIn("type", serializer.errors)
|
||||
|
||||
|
||||
class ReactionModelConstraintTests(TestCase):
|
||||
def test_one_reaction_per_problem_and_user(self):
|
||||
constraints = {constraint.name: constraint for constraint in Reaction._meta.constraints}
|
||||
|
||||
constraint = constraints["reaction_problem_user_unique"]
|
||||
self.assertEqual(tuple(constraint.fields), ("problem", "user"))
|
||||
self.assertEqual(Reaction._meta.unique_together, ())
|
||||
Reference in New Issue
Block a user