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