def test_to_representation_returns_default_serialization_if_no_request(self):
     self.serializer = TestSerializer(context={'request': None})
     instance = TestModel(
         test_field_one='test_one',
         test_field_two='test_two',
         test_field_three='test_three',
         test_field_four='test_four',
         test_field_five='test_five',
     )
     data = self.serializer.to_representation(instance=instance)
     self.assertEqual(data, MatchingModelSerializer().to_representation(instance))
 def test_to_representation_returns_default_serialization_if_no_request_version(self):
     self.request = APIRequestFactory().get("")
     self.serializer = TestSerializer(context={"request": self.request})
     instance = TestModel(
         test_field_one="test_one",
         test_field_two="test_two",
         test_field_three="test_three",
         test_field_four="test_four",
         test_field_five="test_five",
     )
     data = self.serializer.to_representation(instance=instance)
     self.assertEqual(data, MatchingModelSerializer().to_representation(instance))
 def test_to_representation_doesnt_get_transform_classes_without_version(self, get_transform_classes_mock):
     self.request = APIRequestFactory().get('')
     self.serializer = TestSerializer(context={'request': self.request})
     self.serializer.to_representation(instance=TestModel())
     self.assertFalse(get_transform_classes_mock.called)
 def setUp(self):
     self.request = APIRequestFactory().get('')
     self.request.version = 1
     self.serializer = TestSerializer(context={'request': self.request})
class VersioningSerializerUnitTests(TestCase):
    def setUp(self):
        self.request = APIRequestFactory().get('')
        self.request.version = 1
        self.serializer = TestSerializer(context={'request': self.request})

    def test_to_representation_raises_error_when_no_transform_base_specified_with_instance(self):
        self.serializer.transform_base = None
        with self.assertRaises(TransformBaseNotDeclaredException):
            self.serializer.to_representation(instance=TestModel())

    def test_to_representation_raises_error_when_no_transform_base_specified_without_instance(self):
        self.serializer.transform_base = None
        with self.assertRaises(TransformBaseNotDeclaredException):
            self.serializer.to_representation(instance=None)

    @patch('rest_framework_transforms.serializers.get_transform_classes')
    def test_to_representation_gets_transform_classes_with_instance(self, get_transform_classes_mock):
        self.serializer.to_representation(instance=TestModel())
        self.assertTrue(get_transform_classes_mock.called)
        get_transform_classes_mock.assert_called_once_with(
            'tests.test_transforms.TestModelTransform',
            base_version=self.request.version,
            reverse=True,
        )

    @patch('rest_framework_transforms.serializers.get_transform_classes')
    def test_to_representation_calls_backwards_on_transform_classes_with_instance(self, get_transform_classes_mock):
        instance = TestModel(
            test_field_one='test_one',
            test_field_two='test_two',
            test_field_three='test_three',
            test_field_four='test_four',
            test_field_five='test_five',
        )
        transform_one = MagicMock()
        transform_two = MagicMock()
        get_transform_classes_mock.return_value = [
            transform_one,
            transform_two,
        ]

        self.serializer.to_representation(instance=instance)

        self.assertTrue(transform_one.return_value.backwards.called)
        transform_one.return_value.backwards.assert_called_once_with(
            MatchingModelSerializer().to_representation(instance),
            self.request,
            instance,
        )
        self.assertTrue(transform_two.return_value.backwards.called)
        transform_two.return_value.backwards.assert_called_once_with(
            transform_one.return_value.backwards.return_value,
            self.request,
            instance,
        )

    def test_to_representation_returns_default_serialization_if_no_request(self):
        self.serializer = TestSerializer(context={'request': None})
        instance = TestModel(
            test_field_one='test_one',
            test_field_two='test_two',
            test_field_three='test_three',
            test_field_four='test_four',
            test_field_five='test_five',
        )
        data = self.serializer.to_representation(instance=instance)
        self.assertEqual(data, MatchingModelSerializer().to_representation(instance))

    def test_to_representation_returns_default_serialization_if_no_request_version(self):
        self.request = APIRequestFactory().get('')
        self.serializer = TestSerializer(context={'request': self.request})
        instance = TestModel(
            test_field_one='test_one',
            test_field_two='test_two',
            test_field_three='test_three',
            test_field_four='test_four',
            test_field_five='test_five',
        )
        data = self.serializer.to_representation(instance=instance)
        self.assertEqual(data, MatchingModelSerializer().to_representation(instance))

    def test_to_representation_returns_empty_serialization_if_no_instance(self):
        data = self.serializer.to_representation(instance=None)
        self.assertEqual(data, MatchingModelSerializer().to_representation(None))

    @patch('rest_framework_transforms.serializers.get_transform_classes')
    def test_to_representation_doesnt_get_transform_classes_without_instance(self, get_transform_classes_mock):
        self.serializer.to_representation(instance=None)
        self.assertFalse(get_transform_classes_mock.called)

    @patch('rest_framework_transforms.serializers.get_transform_classes')
    def test_to_representation_doesnt_get_transform_classes_without_version(self, get_transform_classes_mock):
        self.request = APIRequestFactory().get('')
        self.serializer = TestSerializer(context={'request': self.request})
        self.serializer.to_representation(instance=TestModel())
        self.assertFalse(get_transform_classes_mock.called)