diff --git a/tests/test_compat.py b/tests/test_compat.py new file mode 100644 index 000000000..9b02f734c --- /dev/null +++ b/tests/test_compat.py @@ -0,0 +1,69 @@ +from django.test import TestCase + +from rest_framework import compat + + +class CompatTests(TestCase): + + def test_total_seconds(self): + class MockTimedelta(object): + days = 1 + seconds = 1 + microseconds = 100 + timedelta = MockTimedelta() + expected = (timedelta.days * 86400.0) + float(timedelta.seconds) + (timedelta.microseconds / 1000000.0) + assert compat.total_seconds(timedelta) == expected + + def test_get_remote_field_with_old_django_version(self): + class MockField(object): + rel = 'example_rel' + original_django_version = compat.django.VERSION + compat.django.VERSION = (1, 8) + assert compat.get_remote_field(MockField(), default='default_value') == 'example_rel' + assert compat.get_remote_field(object(), default='default_value') == 'default_value' + compat.django.VERSION = original_django_version + + def test_get_remote_field_with_new_django_version(self): + class MockField(object): + remote_field = 'example_remote_field' + original_django_version = compat.django.VERSION + compat.django.VERSION = (1, 10) + assert compat.get_remote_field(MockField(), default='default_value') == 'example_remote_field' + assert compat.get_remote_field(object(), default='default_value') == 'default_value' + compat.django.VERSION = original_django_version + + def test_patch_in_http_method_names(self): + assert 'patch' in compat.View.http_method_names + + def test_set_rollback_for_transaction_in_managed_mode(self): + class MockTransaction(object): + called_rollback = False + called_leave_transaction_management = False + + def is_managed(self): + return True + + def is_dirty(self): + return True + + def rollback(self): + self.called_rollback = True + + def leave_transaction_management(self): + self.called_leave_transaction_management = True + + original_transaction = compat.transaction + dirty_mock_transaction = MockTransaction() + compat.transaction = dirty_mock_transaction + compat.set_rollback() + assert dirty_mock_transaction.called_rollback is True + assert dirty_mock_transaction.called_leave_transaction_management is True + + clean_mock_transaction = MockTransaction() + clean_mock_transaction.is_dirty = lambda: False + compat.transaction = clean_mock_transaction + compat.set_rollback() + assert clean_mock_transaction.called_rollback is False + assert clean_mock_transaction.called_leave_transaction_management is True + + compat.transaction = original_transaction