@@ -688,6 +688,69 @@ def test_creation_fails_with_invalid_patch(self):
688
688
jsonpatch .JsonPatch ([{'op' : 'add' , 'path' : 'foo' , 'value' : 'bar' }])
689
689
690
690
691
+ class UtilityMethodTests (unittest .TestCase ):
692
+
693
+ def test_boolean_coercion (self ):
694
+ empty_patch = jsonpatch .JsonPatch ([])
695
+ self .assertFalse (empty_patch )
696
+
697
+ def test_patch_equality (self ):
698
+ p = jsonpatch .JsonPatch ([{'op' : 'add' , 'path' : '/foo' , 'value' : 'bar' }])
699
+ q = jsonpatch .JsonPatch ([{'op' : 'add' , 'path' : '/foo' , 'value' : 'bar' }])
700
+ different_op = jsonpatch .JsonPatch ([{'op' : 'remove' , 'path' : '/foo' }])
701
+ different_path = jsonpatch .JsonPatch ([{'op' : 'add' , 'path' : '/bar' , 'value' : 'bar' }])
702
+ different_value = jsonpatch .JsonPatch ([{'op' : 'add' , 'path' : '/foo' , 'value' : 'foo' }])
703
+ self .assertNotEqual (p , different_op )
704
+ self .assertNotEqual (p , different_path )
705
+ self .assertNotEqual (p , different_value )
706
+ self .assertEqual (p , q )
707
+
708
+ def test_operation_equality (self ):
709
+ add = jsonpatch .AddOperation ({'path' : '/new-element' , 'value' : 'new-value' })
710
+ add2 = jsonpatch .AddOperation ({'path' : '/new-element' , 'value' : 'new-value' })
711
+ rm = jsonpatch .RemoveOperation ({'path' : '/target' })
712
+ self .assertEqual (add , add2 )
713
+ self .assertNotEqual (add , rm )
714
+
715
+ def test_add_operation_structure (self ):
716
+ with self .assertRaises (jsonpatch .InvalidJsonPatch ):
717
+ jsonpatch .AddOperation ({'path' : '/' }).apply ({})
718
+
719
+ def test_replace_operation_structure (self ):
720
+ with self .assertRaises (jsonpatch .InvalidJsonPatch ):
721
+ jsonpatch .ReplaceOperation ({'path' : '/' }).apply ({})
722
+
723
+ with self .assertRaises (jsonpatch .InvalidJsonPatch ):
724
+ jsonpatch .ReplaceOperation ({'path' : '/top/-' , 'value' : 'foo' }).apply ({'top' : {'inner' : 'value' }})
725
+
726
+ with self .assertRaises (jsonpatch .JsonPatchConflict ):
727
+ jsonpatch .ReplaceOperation ({'path' : '/top/missing' , 'value' : 'foo' }).apply ({'top' : {'inner' : 'value' }})
728
+
729
+ def test_move_operation_structure (self ):
730
+ with self .assertRaises (jsonpatch .InvalidJsonPatch ):
731
+ jsonpatch .MoveOperation ({'path' : '/target' }).apply ({})
732
+
733
+ with self .assertRaises (jsonpatch .JsonPatchConflict ):
734
+ jsonpatch .MoveOperation ({'from' : '/source' , 'path' : '/target' }).apply ({})
735
+
736
+ def test_test_operation_structure (self ):
737
+ with self .assertRaises (jsonpatch .JsonPatchTestFailed ):
738
+ jsonpatch .TestOperation ({'path' : '/target' }).apply ({})
739
+
740
+ with self .assertRaises (jsonpatch .InvalidJsonPatch ):
741
+ jsonpatch .TestOperation ({'path' : '/target' }).apply ({'target' : 'value' })
742
+
743
+ def test_copy_operation_structure (self ):
744
+ with self .assertRaises (jsonpatch .InvalidJsonPatch ):
745
+ jsonpatch .CopyOperation ({'path' : '/target' }).apply ({})
746
+
747
+ with self .assertRaises (jsonpatch .JsonPatchConflict ):
748
+ jsonpatch .CopyOperation ({'path' : '/target' , 'from' : '/source' }).apply ({})
749
+
750
+ with self .assertRaises (jsonpatch .JsonPatchConflict ):
751
+ jsonpatch .CopyOperation ({'path' : '/target' , 'from' : '/source' }).apply ({})
752
+
753
+
691
754
if __name__ == '__main__' :
692
755
modules = ['jsonpatch' ]
693
756
@@ -704,6 +767,7 @@ def get_suite():
704
767
suite .addTest (unittest .makeSuite (OptimizationTests ))
705
768
suite .addTest (unittest .makeSuite (JsonPointerTests ))
706
769
suite .addTest (unittest .makeSuite (JsonPatchCreationTest ))
770
+ suite .addTest (unittest .makeSuite (UtilityMethodTests ))
707
771
return suite
708
772
709
773
0 commit comments