test_double_translation_table()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 8
c 1
b 0
f 0
rs 9.4285
cc 1
1
from django.core.cache import cache
2
from django.db.models import Manager
3
from .utils import AppTestCase
4
from .testapp.models import ManualModel, ManualModelTranslations, SimpleModel, Level1, Level2, ProxyBase, ProxyModel, DoubleModel, RegularModel, CharModel
5
6
7
class ModelConstructionTests(AppTestCase):
8
    """
9
    Test model construction
10
    """
11
12
    def test_manual_model(self):
13
        """
14
        Test the metaclass of the model.
15
        """
16
        # Test whether the link has taken place
17
        self.assertIsInstance(ManualModel().translations, Manager)  # RelatedManager class
18
        self.assertIs(ManualModel().translations.model, ManualModelTranslations)
19
        self.assertIs(ManualModel._parler_meta.root_model, ManualModelTranslations)
20
21
    def test_simple_model(self):
22
        """
23
        Test the simple model syntax.
24
        """
25
        self.assertIs(SimpleModel().translations.model, SimpleModel._parler_meta.root_model)
26
27 View Code Duplication
    def test_inherited_model(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
28
        """
29
        Test the inherited model syntax.
30
        """
31
        # First level has 1 ParlerMeta object
32
        self.assertEqual(Level1._parler_meta.root.rel_name, 'l1_translations')
33
        self.assertEqual(Level1._parler_meta.root.model.__name__, 'Level1Translation')
34
        self.assertEqual(len(Level1._parler_meta), 1)
35
36
        # Second level has 2 ParlerMeta objects.
37
        self.assertEqual(len(Level2._parler_meta), 2)
38
        self.assertEqual(Level2._parler_meta[0].rel_name, 'l1_translations')
39
        self.assertEqual(Level2._parler_meta[1].rel_name, 'l2_translations')
40
        self.assertEqual(Level2._parler_meta[1].model.__name__, 'Level2Translation')
41
42
        # Level 2 root attributes should point to the top-level object (Level1)
43
        self.assertEqual(Level2._parler_meta.root_model.__name__, 'Level1Translation')
44
        self.assertEqual(Level2._parler_meta.root_rel_name, 'l1_translations')
45
        self.assertEqual(Level2._parler_meta.root, Level1._parler_meta.root)
46
47 View Code Duplication
    def test_proxy_model(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
48
        """
49
        Test whether proxy models can get new translations
50
        """
51
        # First level has 1 ParlerMeta object
52
        self.assertEqual(ProxyBase._parler_meta.root.rel_name, 'base_translations')
53
        self.assertEqual(len(ProxyBase._parler_meta), 1)
54
55
        # Second level has 2 ParlerMeta objects
56
        self.assertEqual(len(ProxyModel._parler_meta), 2)
57
        self.assertEqual(ProxyModel._parler_meta[0].rel_name, 'base_translations')
58
        self.assertEqual(ProxyModel._parler_meta[1].rel_name, 'proxy_translations')
59
60
        self.assertEqual(ProxyModel._parler_meta[0].model.__name__, 'ProxyBaseTranslation')
61
        self.assertEqual(ProxyModel._parler_meta[1].model.__name__, 'ProxyModelTranslation')
62
63
        # Second inheritance level attributes should point to the top-level object (ProxyBase)
64
        self.assertEqual(ProxyModel._parler_meta.root_model.__name__, 'ProxyBaseTranslation')
65
        self.assertEqual(ProxyModel._parler_meta.root_rel_name, 'base_translations')
66
        self.assertEqual(ProxyModel._parler_meta.root, ProxyBase._parler_meta.root)
67
68
    def test_double_translation_table(self):
69
        """
70
        Test how assigning two translation tables works.
71
        """
72
        self.assertIsNone(DoubleModel._parler_meta.base)  # Should call .add_meta() instead of overwriting/chaining it.
73
        self.assertEqual(len(DoubleModel._parler_meta), 2)
74
        self.assertEqual(DoubleModel._parler_meta[0].rel_name, "base_translations")
75
        self.assertEqual(DoubleModel._parler_meta[1].rel_name, "more_translations")
76
77
    def test_overlapping_proxy_model(self):
78
        """
79
        Test the simple model syntax.
80
        """
81
        from parler.tests.testapp.invalid_models import RegularModelProxy
82
83
        # Create an object without translations
84
        RegularModel.objects.create(id=98, original_field='untranslated')
85
        self.assertEqual(RegularModelProxy.objects.count(), 1)
86
87
        # Refetch from db, should raise an error.
88
        self.assertRaises(RuntimeError, lambda: RegularModelProxy.objects.all()[0])
89
90
    def test_model_with_different_pks(self):
91
        """
92
        Test that TranslatableModels works with different types of pks
93
        """
94
        self.assertIsInstance(SimpleModel.objects.create(tr_title='Test'), SimpleModel)
95
        self.assertIsInstance(CharModel.objects.create(pk='test', tr_title='Test'), CharModel)
96