1
+ import dataclasses
1
2
import unittest
2
3
import uuid
3
4
import warnings
21
22
SIMPLE_HISTORY_REVERSE_ATTR_NAME ,
22
23
HistoricalRecords ,
23
24
ModelChange ,
25
+ ModelDelta ,
24
26
is_historic ,
25
27
to_historic ,
26
28
)
@@ -697,11 +699,13 @@ def test_history_diff_includes_changed_fields(self):
697
699
new_record , old_record = p .history .all ()
698
700
with self .assertNumQueries (0 ):
699
701
delta = new_record .diff_against (old_record )
700
- expected_change = ModelChange ("question" , "what's up?" , "what's up, man" )
701
- self .assertEqual (delta .changed_fields , ["question" ])
702
- self .assertEqual (delta .old_record , old_record )
703
- self .assertEqual (delta .new_record , new_record )
704
- self .assertEqual (expected_change .field , delta .changes [0 ].field )
702
+ expected_delta = ModelDelta (
703
+ [ModelChange ("question" , "what's up?" , "what's up, man?" )],
704
+ ["question" ],
705
+ old_record ,
706
+ new_record ,
707
+ )
708
+ self .assertEqual (delta , expected_delta )
705
709
706
710
def test_history_diff_does_not_include_unchanged_fields (self ):
707
711
p = Poll .objects .create (question = "what's up?" , pub_date = today )
@@ -720,11 +724,13 @@ def test_history_diff_includes_changed_fields_of_base_model(self):
720
724
new_record , old_record = r .history .all ()
721
725
with self .assertNumQueries (0 ):
722
726
delta = new_record .diff_against (old_record )
723
- expected_change = ModelChange ("name" , "McDonna" , "DonnutsKing" )
724
- self .assertEqual (delta .changed_fields , ["name" ])
725
- self .assertEqual (delta .old_record , old_record )
726
- self .assertEqual (delta .new_record , new_record )
727
- self .assertEqual (expected_change .field , delta .changes [0 ].field )
727
+ expected_delta = ModelDelta (
728
+ [ModelChange ("name" , "McDonna" , "DonnutsKing" )],
729
+ ["name" ],
730
+ old_record ,
731
+ new_record ,
732
+ )
733
+ self .assertEqual (delta , expected_delta )
728
734
729
735
def test_history_table_name_is_not_inherited (self ):
730
736
def assert_table_name (obj , expected_table_name ):
@@ -759,8 +765,8 @@ def test_history_diff_with_excluded_fields(self):
759
765
new_record , old_record = p .history .all ()
760
766
with self .assertNumQueries (0 ):
761
767
delta = new_record .diff_against (old_record , excluded_fields = ("question" ,))
762
- self . assertEqual ( delta . changed_fields , [])
763
- self .assertEqual (delta . changes , [] )
768
+ expected_delta = ModelDelta ([] , [], old_record , new_record )
769
+ self .assertEqual (delta , expected_delta )
764
770
765
771
def test_history_diff_with_included_fields (self ):
766
772
p = Poll .objects .create (question = "what's up?" , pub_date = today )
@@ -769,13 +775,17 @@ def test_history_diff_with_included_fields(self):
769
775
new_record , old_record = p .history .all ()
770
776
with self .assertNumQueries (0 ):
771
777
delta = new_record .diff_against (old_record , included_fields = [])
772
- self . assertEqual ( delta . changed_fields , [])
773
- self .assertEqual (delta . changes , [] )
778
+ expected_delta = ModelDelta ([] , [], old_record , new_record )
779
+ self .assertEqual (delta , expected_delta )
774
780
775
781
with self .assertNumQueries (0 ):
776
782
delta = new_record .diff_against (old_record , included_fields = ["question" ])
777
- self .assertEqual (delta .changed_fields , ["question" ])
778
- self .assertEqual (len (delta .changes ), 1 )
783
+ expected_delta = dataclasses .replace (
784
+ expected_delta ,
785
+ changes = [ModelChange ("question" , "what's up?" , "what's up, man?" )],
786
+ changed_fields = ["question" ],
787
+ )
788
+ self .assertEqual (delta , expected_delta )
779
789
780
790
def test_history_diff_with_non_editable_field (self ):
781
791
p = PollWithNonEditableField .objects .create (
@@ -786,8 +796,13 @@ def test_history_diff_with_non_editable_field(self):
786
796
new_record , old_record = p .history .all ()
787
797
with self .assertNumQueries (0 ):
788
798
delta = new_record .diff_against (old_record )
789
- self .assertEqual (delta .changed_fields , ["question" ])
790
- self .assertEqual (len (delta .changes ), 1 )
799
+ expected_delta = ModelDelta (
800
+ [ModelChange ("question" , "what's up?" , "what's up, man?" )],
801
+ ["question" ],
802
+ old_record ,
803
+ new_record ,
804
+ )
805
+ self .assertEqual (delta , expected_delta )
791
806
792
807
def test_history_with_unknown_field (self ):
793
808
p = Poll .objects .create (question = "what's up?" , pub_date = today )
@@ -1922,7 +1937,6 @@ def test_self_field(self):
1922
1937
class ManyToManyWithSignalsTest (TestCase ):
1923
1938
def setUp (self ):
1924
1939
self .model = PollWithManyToManyWithIPAddress
1925
- # self.historical_through_model = self.model.history.
1926
1940
self .places = (
1927
1941
Place .objects .create (name = "London" ),
1928
1942
Place .objects .create (name = "Paris" ),
@@ -1963,9 +1977,26 @@ def test_diff(self):
1963
1977
old = new .prev_record
1964
1978
1965
1979
delta = new .diff_against (old )
1966
-
1967
- self .assertEqual ("places" , delta .changes [0 ].field )
1968
- self .assertEqual (2 , len (delta .changes [0 ].new ))
1980
+ expected_delta = ModelDelta (
1981
+ [
1982
+ ModelChange (
1983
+ "places" ,
1984
+ [],
1985
+ [
1986
+ {
1987
+ "pollwithmanytomanywithipaddress" : self .poll .pk ,
1988
+ "place" : place .pk ,
1989
+ "ip_address" : "192.168.0.1" ,
1990
+ }
1991
+ for place in self .places
1992
+ ],
1993
+ )
1994
+ ],
1995
+ ["places" ],
1996
+ old ,
1997
+ new ,
1998
+ )
1999
+ self .assertEqual (delta , expected_delta )
1969
2000
1970
2001
1971
2002
class ManyToManyCustomIDTest (TestCase ):
@@ -2246,24 +2277,19 @@ def test_diff_against(self):
2246
2277
expected_change = ModelChange (
2247
2278
"places" , [], [{"pollwithmanytomany" : self .poll .pk , "place" : self .place .pk }]
2248
2279
)
2249
- self .assertEqual (delta .changed_fields , ["places" ])
2250
- self .assertEqual (delta .old_record , create_record )
2251
- self .assertEqual (delta .new_record , add_record )
2252
- self .assertEqual (expected_change .field , delta .changes [0 ].field )
2253
-
2254
- self .assertListEqual (expected_change .new , delta .changes [0 ].new )
2255
- self .assertListEqual (expected_change .old , delta .changes [0 ].old )
2280
+ expected_delta = ModelDelta (
2281
+ [expected_change ], ["places" ], create_record , add_record
2282
+ )
2283
+ self .assertEqual (delta , expected_delta )
2256
2284
2257
2285
delta = add_record .diff_against (create_record , included_fields = ["places" ])
2258
- self .assertEqual (delta .changed_fields , ["places" ])
2259
- self .assertEqual (delta .old_record , create_record )
2260
- self .assertEqual (delta .new_record , add_record )
2261
- self .assertEqual (expected_change .field , delta .changes [0 ].field )
2286
+ self .assertEqual (delta , expected_delta )
2262
2287
2263
2288
delta = add_record .diff_against (create_record , excluded_fields = ["places" ])
2264
- self .assertEqual (delta .changed_fields , [])
2265
- self .assertEqual (delta .old_record , create_record )
2266
- self .assertEqual (delta .new_record , add_record )
2289
+ expected_delta = dataclasses .replace (
2290
+ expected_delta , changes = [], changed_fields = []
2291
+ )
2292
+ self .assertEqual (delta , expected_delta )
2267
2293
2268
2294
self .poll .places .clear ()
2269
2295
@@ -2272,18 +2298,16 @@ def test_diff_against(self):
2272
2298
delta = del_record .diff_against (create_record )
2273
2299
self .assertNotIn ("places" , delta .changed_fields )
2274
2300
2301
+ delta = del_record .diff_against (add_record )
2275
2302
# Second and third should have the same diffs as first and second, but with
2276
2303
# old and new reversed
2277
2304
expected_change = ModelChange (
2278
2305
"places" , [{"place" : self .place .pk , "pollwithmanytomany" : self .poll .pk }], []
2279
2306
)
2280
- delta = del_record .diff_against (add_record )
2281
- self .assertEqual (delta .changed_fields , ["places" ])
2282
- self .assertEqual (delta .old_record , add_record )
2283
- self .assertEqual (delta .new_record , del_record )
2284
- self .assertEqual (expected_change .field , delta .changes [0 ].field )
2285
- self .assertListEqual (expected_change .new , delta .changes [0 ].new )
2286
- self .assertListEqual (expected_change .old , delta .changes [0 ].old )
2307
+ expected_delta = ModelDelta (
2308
+ [expected_change ], ["places" ], add_record , del_record
2309
+ )
2310
+ self .assertEqual (delta , expected_delta )
2287
2311
2288
2312
2289
2313
@override_settings (** database_router_override_settings )
0 commit comments