Files
OnlineJudge/reaction/tests.py

57 lines
2.3 KiB
Python

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, ())