Esempio n. 1
0
 def test_count_field_with_qs_filter_value_change(self):
     self.fm5 = RelatedTestObj.objects.create(value=1,
                                              test_obj=self.test_obj)
     self.test_obj = reload_model_instance(self.test_obj)
     self.assertEqual(self.test_obj.rto_items_qsf_count, 2)
     self.fm5.value = 666
     self.fm5.save()
     self.test_obj = reload_model_instance(self.test_obj)
     self.assertEqual(self.test_obj.rto_items_qsf_count, 1)
Esempio n. 2
0
    def setUp(self):
        self.test_obj = TestObj.objects.create()
        self.grto = GenericRelatedTestObj.objects.create(
            value=0, content_object=self.test_obj)

        self.m2m = M2MTestObj.objects.create(value=0)
        self.grto.m2m_items.add(self.m2m)
        self.grto = reload_model_instance(self.grto)
        self.test_obj = reload_model_instance(self.test_obj)
Esempio n. 3
0
 def test_updated_after_changing_relation(self):
     rto = RelatedTestObj.objects.create(value=0, test_obj=self.test_obj)
     self.test_obj = reload_model_instance(self.test_obj)
     self.assertEqual(self.test_obj.rto_items_count, 1)
     rto.test_obj = self.another_test_obj
     rto.save()
     self.test_obj = reload_model_instance(self.test_obj)
     self.assertEqual(self.test_obj.rto_items_count, 0)
     self.another_test_obj = reload_model_instance(self.another_test_obj)
     self.assertEqual(self.another_test_obj.rto_items_count, 1)
Esempio n. 4
0
    def test_count_field(self):
        self.assertEqual(self.test_obj.rto_items_count, 4)
        self.assertEqual(self.test_obj2.rto_items_count, 1)

        self.fm4.test_obj = self.test_obj
        self.fm4.save()
        self.test_obj = reload_model_instance(self.test_obj)
        self.test_obj2 = reload_model_instance(self.test_obj2)
        self.assertEqual(self.test_obj.rto_items_count, 5)
        self.assertEqual(self.test_obj2.rto_items_count, 0)
Esempio n. 5
0
 def test_updated_after_changing_relation(self):
     grto = GenericRelatedTestObj.objects.create(
         value=0, content_object=self.test_obj)
     self.test_obj = reload_model_instance(self.test_obj)
     self.assertEqual(self.test_obj.grto_items_count, 1)
     grto.content_object = self.another_test_obj
     grto.save()
     self.test_obj = reload_model_instance(self.test_obj)
     self.assertEqual(self.test_obj.grto_items_count, 0)
     self.another_test_obj = reload_model_instance(self.another_test_obj)
     self.assertEqual(self.another_test_obj.grto_items_count, 1)
Esempio n. 6
0
    def test_updated_after_replacing(self):
        NullRelatedTestObj.objects.create(value=0, test_obj=self.test_obj)
        self.test_obj = reload_model_instance(self.test_obj)
        self.assertEqual(self.test_obj.nrto_items_count, 1)

        self.test_obj.rto_items.create(value=0)
        self.test_obj.rto_items.create(value=0)
        self.test_obj.rto_items.create(value=0)

        self.test_obj = reload_model_instance(self.test_obj)
        self.assertEqual(self.test_obj.rto_items_count, 3)
Esempio n. 7
0
    def test_updated_after_clearing(self):
        self.test_obj.nrto_items.create(value=0)
        self.test_obj.nrto_items.create(value=0)

        self.test_obj = reload_model_instance(self.test_obj)
        self.assertEqual(self.test_obj.nrto_items_count, 2)

        this_django.m2m_set(self.test_obj, 'nrto_items', [])

        self.test_obj = reload_model_instance(self.test_obj)
        self.assertEqual(self.test_obj.nrto_items_count, 0)
Esempio n. 8
0
    def test_updated_after_removing(self):
        item1 = NullRelatedTestObj.objects.create(value=0,
                                                  test_obj=self.test_obj)
        item2 = NullRelatedTestObj.objects.create(value=0,
                                                  test_obj=self.test_obj)
        this_django.m2m_set(self.test_obj, 'nrto_items', [item1, item2])

        self.test_obj = reload_model_instance(self.test_obj)
        self.assertEqual(self.test_obj.nrto_items_count, 2)

        self.test_obj.nrto_items.remove(item1)

        self.test_obj = reload_model_instance(self.test_obj)
        self.assertEqual(self.test_obj.nrto_items_count, 1)
Esempio n. 9
0
    def setUp(self):
        self.test_grand_parent = TestParentObj.objects.create()
        self.test_parent = TestParentObj.objects.create(
            parent=self.test_grand_parent)
        self.test_obj = TestObj.objects.create(parent=self.test_parent)

        self.fm0 = M2MTestObj.objects.create(value=0)
        self.fm1 = M2MTestObj.objects.create(value=1)

        self.test_obj.m2m_items.add(self.fm0)
        self.test_obj.m2m_items.add(self.fm1)

        self.test_grand_parent = reload_model_instance(self.test_grand_parent)
        self.test_parent = reload_model_instance(self.test_parent)
        self.test_obj = reload_model_instance(self.test_obj)
Esempio n. 10
0
    def test_updated_after_adding_and_resaving(self):
        self.test_obj.rto_items.create(value=0)
        self.test_obj.rto_items.create(value=0)
        self.test_obj.save()

        self.test_obj = reload_model_instance(self.test_obj)
        self.assertEqual(self.test_obj.rto_items_count, 2)
Esempio n. 11
0
 def test_sum_field_for_relation_with_default_relation_name(self):
     RelatedTestObj.objects.create(value=17,
                                   test_obj_wo_related_name=self.test_obj,
                                   test_obj=self.test_obj)
     self.test_obj = reload_model_instance(self.test_obj)
     self.assertEqual(
         self.test_obj.rto_with_default_related_name_item_values_sum, 17)
Esempio n. 12
0
 def test_altering_rto_first_item_attr_updates_itself(self):
     denormalized_item = self.test_obj.rto_first_item
     denormalized_item.value = 666
     self.assertEqual(denormalized_item.test_obj, self.test_obj)
     denormalized_item.save()  # just like if we got it from original model
     self.test_obj = reload_model_instance(self.test_obj)
     self.assertEqual(self.test_obj.rto_first_item.value, 666)
Esempio n. 13
0
    def test_updated_after_adding_since_19(self):
        self.test_obj.rto_items.create(value=0)
        self.test_obj.rto_items.create(value=0)

        self.test_obj.rto_items.add(RelatedTestObj(value=0), bulk=False)

        self.test_obj = reload_model_instance(self.test_obj)
        self.assertEqual(self.test_obj.rto_items_count, 3)
Esempio n. 14
0
    def setUp(self):
        self.test_obj = TestObj.objects.create()
        self.test_obj2 = TestObj.objects.create()

        self.fm0 = RelatedTestObj.objects.create(value=0,
                                                 test_obj=self.test_obj)
        self.fm1 = RelatedTestObj.objects.create(value=1,
                                                 test_obj=self.test_obj)
        self.fm2 = RelatedTestObj.objects.create(value=2,
                                                 test_obj=self.test_obj)
        self.fm3 = RelatedTestObj.objects.create(value=4,
                                                 test_obj=self.test_obj)
        self.fm4 = RelatedTestObj.objects.create(value=8,
                                                 test_obj=self.test_obj2)

        self.test_obj = reload_model_instance(self.test_obj)
        self.test_obj2 = reload_model_instance(self.test_obj2)
Esempio n. 15
0
    def setUp(self):
        self.test_obj = TestObj.objects.create()
        self.test_obj2 = TestObj.objects.create()

        self.fm0 = GenericRelatedTestObj.objects.create(
            value=0, content_object=self.test_obj)
        self.fm1 = GenericRelatedTestObj.objects.create(
            value=1, content_object=self.test_obj)
        self.fm2 = GenericRelatedTestObj.objects.create(
            value=2, content_object=self.test_obj)
        self.fm3 = GenericRelatedTestObj.objects.create(
            value=4, content_object=self.test_obj)
        self.fm4 = GenericRelatedTestObj.objects.create(
            value=8, content_object=self.test_obj2)

        self.test_obj = reload_model_instance(self.test_obj)
        self.test_obj2 = reload_model_instance(self.test_obj2)
Esempio n. 16
0
    def test_updated_after_adding_and_resaving(self):
        m2m1 = M2MTestObj.objects.create(value=0)
        m2m2 = M2MTestObj.objects.create(value=0)
        this_django.m2m_set(self.test_obj, 'm2m_items', [m2m1, m2m2])
        self.test_obj.save()

        self.test_obj = reload_model_instance(self.test_obj)
        self.assertEqual(self.test_obj.m2m_items_count, 2)
Esempio n. 17
0
    def test_updated_after_clearing(self):
        this_django.m2m_set(self.test_obj, 'm2m_items', [
            M2MTestObj.objects.create(value=0),
            M2MTestObj.objects.create(value=0),
        ])
        this_django.m2m_set(self.test_obj, 'm2m_items', [])

        self.test_obj = reload_model_instance(self.test_obj)
        self.assertEqual(self.test_obj.m2m_items_count, 0)
Esempio n. 18
0
    def setUp(self):
        self.test_parent_obj = TestParentObj.objects.create()
        self.test_obj = TestObj.objects.create(parent=self.test_parent_obj)

        # M2M
        self.m2m = M2MTestObj.objects.create(value=0)
        self.test_obj.m2m_items.add(self.m2m)

        # foreign keys
        self.rto = RelatedTestObj.objects.create(
            test_obj=self.test_obj, value=0)
        self.grto = GenericRelatedTestObj.objects.create(
            content_object=self.test_obj, value=0)
        self.nrto = NullRelatedTestObj.objects.create(
            test_obj=self.test_obj, value=0)

        # reload objects
        self.test_obj = reload_model_instance(self.test_obj)
        self.test_parent_obj = reload_model_instance(self.test_parent_obj)
Esempio n. 19
0
    def test_updated_after_adding(self):
        this_django.m2m_set(self.test_obj, 'nrto_items', [
            NullRelatedTestObj.objects.create(value=0, test_obj=self.test_obj),
            NullRelatedTestObj.objects.create(value=0, test_obj=self.test_obj)
        ])
        self.test_obj.nrto_items.add(
            NullRelatedTestObj.objects.create(value=0, test_obj=self.test_obj))

        self.test_obj = reload_model_instance(self.test_obj)
        self.assertEqual(self.test_obj.nrto_items_count, 3)
Esempio n. 20
0
    def setUp(self):
        self.test_obj = TestObj.objects.create()
        self.test_obj2 = TestObj.objects.create()

        self.fm0 = M2MTestObj.objects.create(value=0)
        self.fm1 = M2MTestObj.objects.create(value=1)
        self.fm2 = M2MTestObj.objects.create(value=2)
        self.fm3 = M2MTestObj.objects.create(value=4)
        self.fm4 = M2MTestObj.objects.create(value=8)
        self.fm_unused = M2MTestObj.objects.create(value=16)

        self.test_obj.m2m_items.add(self.fm0)
        self.test_obj.m2m_items.add(self.fm1)
        self.test_obj.m2m_items.add(self.fm2)
        self.test_obj.m2m_items.add(self.fm3)
        self.test_obj2.m2m_items.add(self.fm4)

        self.test_obj = reload_model_instance(self.test_obj)
        self.test_obj2 = reload_model_instance(self.test_obj2)
Esempio n. 21
0
    def test_updated_after_adding_and_resaving(self):
        grto1 = GenericRelatedTestObj.objects.create(
            value=0, content_object=self.test_obj)
        grto2 = GenericRelatedTestObj.objects.create(
            value=0, content_object=self.test_obj)
        this_django.m2m_set(self.test_obj, 'grto_items', [grto1, grto2])
        self.test_obj.save()

        self.test_obj = reload_model_instance(self.test_obj)
        self.assertEqual(self.test_obj.grto_items_count, 2)
Esempio n. 22
0
    def test_rto_post_update(self):
        # proves old value is 0
        self.assertEqual(self.test_obj.grto_first_item.m2m_first_item.value, 0)

        # trigger denormalized data update
        self.m2m.value = 999
        self.m2m.save()

        self.test_obj = reload_model_instance(self.test_obj)
        self.assertEqual(self.test_obj.grto_first_item.m2m_first_item.value,
                         999)
Esempio n. 23
0
    def test_updated_after_clearing(self):
        this_django.m2m_set(self.test_obj, 'grto_items', [
            GenericRelatedTestObj.objects.create(value=0,
                                                 content_object=self.test_obj),
            GenericRelatedTestObj.objects.create(value=0,
                                                 content_object=self.test_obj)
        ])
        this_django.m2m_set(self.test_obj, 'grto_items', [])

        self.test_obj = reload_model_instance(self.test_obj)
        self.assertEqual(self.test_obj.grto_items_count, 0)
Esempio n. 24
0
    def test_m2m_relation_updates_denorm_on_save(self):
        # prove initial data
        self.assertEqual((self.test_grand_parent.all_children[0].
                          all_test_objs[0].m2m_first_2_items[0].value), 0)

        # trigger update of m2m object
        self.fm0.value = 999
        self.fm0.save()

        # prove all date updated
        self.test_grand_parent = reload_model_instance(self.test_grand_parent)
        self.assertEqual((self.test_grand_parent.all_children[0].
                          all_test_objs[0].m2m_first_2_items[0].value), 999)
Esempio n. 25
0
    def test_uses_post_update_signal(self):
        # lets update data in our db with signal-free update statement
        # to suppress normal abnorm behavior
        type(self.m2m).objects.filter(pk=self.m2m.pk).update(value=999)

        # run update fields command
        call_command(
            'update_abnorm_fields',
            'abnorm.TestObj.m2m_first_item',
        )

        # post_update signal fired
        self.test_parent_obj = reload_model_instance(self.test_parent_obj)
        denormed_obj = self.test_parent_obj.first_test_obj.m2m_first_item
        self.assertEqual(denormed_obj.value, 999)
Esempio n. 26
0
    def test_updates_relation_fields(self):
        for relation in ('rto', 'grto', 'nrto', 'm2m'):
            obj = getattr(self, relation)

            # lets update data in our db with signal-free update statement
            # to suppress normal abnorm behavior
            type(obj).objects.filter(pk=obj.pk).update(value=999)

            # make sure denormalized field value was not updated
            self.test_obj = reload_model_instance(self.test_obj)

            denormed_obj = getattr(self.test_obj, relation + '_first_item')
            self.assertEqual(denormed_obj.value, 0)

            # run update fields command
            call_command(
                'update_abnorm_fields',
                'abnorm.TestObj.{}_first_item'.format(relation),
            )

            # ensure our data is updated
            self.test_obj = reload_model_instance(self.test_obj)
            denormed_obj = getattr(self.test_obj, relation + '_first_item')
            self.assertEqual(denormed_obj.value, 999)
Esempio n. 27
0
    def test_updates_only_listed_fields(self):
        # abnorm is smart enough to update all instance's fields on save
        # unfortunately that creates heavy update queries

        # lets update data in our db with signal-free update statement
        # to suppress normal abnorm behavior
        type(self.rto).objects.filter(pk=self.rto.pk).update(value=999)
        type(self.grto).objects.filter(pk=self.grto.pk).update(value=999)
        type(self.nrto).objects.filter(pk=self.grto.pk).update(value=999)

        # this DOES NOT update nrto field
        call_command(
            'update_abnorm_fields',
            'abnorm.TestObj.rto_first_item',
            'abnorm.TestObj.grto_first_item',
        )

        self.test_obj = reload_model_instance(self.test_obj)
        self.assertEqual(self.test_obj.rto_first_item.value, 999)
        self.assertEqual(self.test_obj.grto_first_item.value, 999)

        # nrto field was NOT updated
        self.assertNotEqual(self.test_obj.nrto_first_item.value, 999)