def test_parsing_values_fail(self):
     patch = Patch(DumbSerializer(), data=[
         {'path': "/name", 'op': "set", 'value': "xxx"},
         {'path': "/int_fld", 'op': "set", 'value': "xxx"},
     ])
     assert not patch.is_valid()
     assert patch.errors == [{}, ['A valid integer is required.']]
Ejemplo n.º 2
0
 def test_parsing_path_fail(self):
     patch = Patch(DumbSerializer(),
                   data=[
                       {
                           'path': "/name",
                           'op': "set",
                           'value': None
                       },
                       {
                           'path': "/bla",
                           'op': "set",
                           'value': None
                       },
                       {
                           'path': "/name/bla",
                           'op': "set",
                           'value': None
                       },
                       {
                           'path': "/emb/name/bla",
                           'op': "set",
                           'value': None
                       },
                   ])
     assert not patch.is_valid()
     assert patch.errors == [[u'Not a valid string.'], {
         'path': "Missing elem: 'bla'"
     }, {
         'path': "Missing elem: 'bla'"
     }, {
         'path': "Missing elem: 'bla'"
     }]
Ejemplo n.º 3
0
 def test_parsing_values(self):
     patch = Patch(DumbSerializer(),
                   data=[
                       {
                           'path': "/name",
                           'op': "set",
                           'value': "123"
                       },
                       {
                           'path': "/int_fld",
                           'op': "set",
                           'value': "123"
                       },
                   ])
     assert patch.is_valid(), patch.errors
     expected = [
         {
             'path': ("name", ),
             'op': "set",
             'value': "123"
         },
         {
             'path': ("int_fld", ),
             'op': "set",
             'value': 123
         },
     ]
     assert patch.validated_data == expected
Ejemplo n.º 4
0
 def test_parsing_nested_values(self):
     patch = Patch(DumbSerializer(),
                   data=[
                       {
                           'path': "/emb/name",
                           'op': "set",
                           'value': "123"
                       },
                       {
                           'path': "/emb/foo",
                           'op': "set",
                           'value': "123"
                       },
                   ])
     assert patch.is_valid(), patch.errors
     expected = [
         {
             'path': ("emb", "name"),
             'op': "set",
             'value': "123"
         },
         {
             'path': ("emb", "foo"),
             'op': "set",
             'value': 123
         },
     ]
     assert patch.validated_data == expected
 def test_parsing_path_fail(self):
     patch = Patch(DumbSerializer(), data=[
         {'path': "/name", 'op': "set", 'value': None},
         {'path': "/bla", 'op': "set", 'value': None},
         {'path': "/name/bla", 'op': "set", 'value': None},
         {'path': "/emb/name/bla", 'op': "set", 'value': None},
     ])
     assert not patch.is_valid()
     assert patch.errors == [[u'Not a valid string.'], {'path': "Missing elem: 'bla'"}, {'path': "Missing elem: 'bla'"}, {'path': "Missing elem: 'bla'"}]
 def test_parsing_embedded(self):
     patch = Patch(DumbSerializer(), data=[
         {'path': "/emb", 'op': "set", 'value': { 'name': "Foo", 'numb': "123"}}
     ])
     assert patch.is_valid(), patch.errors
     expected = [
         {'path': ("emb",), 'op': "set", 'value': DumbEmbedded(name="Foo", numb=123)}
     ]
     assert patch.validated_data == expected
 def test_parsing_nested_values(self):
     patch = Patch(DumbSerializer(), data=[
         {'path': "/emb/name", 'op': "set", 'value': "123"},
         {'path': "/emb/foo", 'op': "set", 'value': "123"},
     ])
     assert patch.is_valid(), patch.errors
     expected = [
         {'path': ("emb", "name"), 'op': "set", 'value': "123"},
         {'path': ("emb", "foo"), 'op': "set", 'value': 123},
     ]
     assert patch.validated_data == expected
 def test_parsing_elem_values(self):
     patch = Patch(DumbSerializer(), data=[
         {'path': "/dct_fld/item", 'op': "set", 'value': "123"},
         {'path': "/intdct_fld/item", 'op': "set", 'value': "123"}
     ])
     assert patch.is_valid(), patch.errors
     expected = [
         {'path': ("dct_fld", "item"), 'op': "set", 'value': "123"},
         {'path': ("intdct_fld", "item"), 'op': "set", 'value': 123}
     ]
     assert patch.validated_data == expected
 def test_parsing_values(self):
     patch = Patch(DumbSerializer(), data=[
         {'path': "/name", 'op': "set", 'value': "123"},
         {'path': "/int_fld", 'op': "set", 'value': "123"},
     ])
     assert patch.is_valid(), patch.errors
     expected = [
         {'path': ("name",), 'op': "set", 'value': "123"},
         {'path': ("int_fld",), 'op': "set", 'value': 123},
     ]
     assert patch.validated_data == expected
Ejemplo n.º 10
0
    def test_patch_obj(self):
        objects = [
            PatchingDumbDocument.objects.create(name="dumb1",
                                                int_fld=1,
                                                lst_fld=['a', 'b', 'c'],
                                                emb=DumbEmbedded(name="emb1")),
            PatchingDumbDocument.objects.create(name="dumb2",
                                                int_fld=2,
                                                lst_fld=['b', 'c', 'd'],
                                                emb=DumbEmbedded(name="emb2")),
            PatchingDumbDocument.objects.create(name="dumb3",
                                                int_fld=3,
                                                lst_fld=['d', 'e', 'f'],
                                                emb=DumbEmbedded(name="emb3"))
        ]

        patch = Patch(data=[{
            'path': '/int_fld',
            'op': 'inc',
            'value': 100
        }, {
            'path': '/lst_fld',
            'op': 'push',
            'value': 'z'
        }, {
            'path': '/dct_fld/foo',
            'op': 'set',
            'value': "f"
        }, {
            'path': '/dct_fld/bar',
            'op': 'set',
            'value': "b"
        }, {
            'path': '/emb/name',
            'op': 'set',
            'value': "Foo"
        }])

        assert patch.is_valid(), patch.errors

        obj = PatchingDumbDocument.objects.get(name="dumb2")
        patch.update_queryset(obj)

        for o in objects:
            o.reload()
        assert [o.int_fld for o in objects] == [1, 102, 3]
        assert [o.lst_fld for o in objects] == [['a', 'b', 'c'],
                                                ['b', 'c', 'd', 'z'],
                                                ['d', 'e', 'f']]
        assert [o.dct_fld for o in objects] == [{}, {
            'foo': 'f',
            'bar': 'b'
        }, {}]
        assert [o.emb.name for o in objects] == ["emb1", "Foo", "emb3"]
 def test_parsing_path(self):
     patch = Patch(data=[
         {'path': "/name", 'op': "set", 'value': None},
         {'path': "/emb_fld/name", 'op': "set", 'value': None},
         {'path': "/lst_fld/0", 'op': "set", 'value': None},
         {'path': "/emb_fld/emb/emb/name", 'op': "set", 'value': None}
     ])
     assert patch.is_valid(), patch.errors
     expected = [
         {'path': ("name", ), 'op': "set", 'value': None},
         {'path': ("emb_fld", "name"), 'op': "set", 'value': None},
         {'path': ("lst_fld", "0"), 'op': "set", 'value': None},
         {'path': ("emb_fld", "emb", "emb", "name"), 'op': "set", 'value': None},
     ]
     assert patch.validated_data == expected
Ejemplo n.º 12
0
 def test_parsing_values_fail(self):
     patch = Patch(DumbSerializer(),
                   data=[
                       {
                           'path': "/name",
                           'op': "set",
                           'value': "xxx"
                       },
                       {
                           'path': "/int_fld",
                           'op': "set",
                           'value': "xxx"
                       },
                   ])
     assert not patch.is_valid()
     assert patch.errors == [{}, ['A valid integer is required.']]
Ejemplo n.º 13
0
 def test_parsing_embedded(self):
     patch = Patch(DumbSerializer(),
                   data=[{
                       'path': "/emb",
                       'op': "set",
                       'value': {
                           'name': "Foo",
                           'numb': "123"
                       }
                   }])
     assert patch.is_valid(), patch.errors
     expected = [{
         'path': ("emb", ),
         'op': "set",
         'value': DumbEmbedded(name="Foo", numb=123)
     }]
     assert patch.validated_data == expected
Ejemplo n.º 14
0
    def test_patch_matched(self):
        objects = [
            DumbDocument.objects.create(name="dumb1",
                                        emb_lst=[
                                            DumbEmbedded(name="dumb1emb1",
                                                         numb=11),
                                            DumbEmbedded(name="dumb1emb2",
                                                         numb=12),
                                            DumbEmbedded(name="dumb1emb3",
                                                         numb=13)
                                        ]),
            DumbDocument.objects.create(name="dumb2",
                                        emb_lst=[
                                            DumbEmbedded(name="dumb2emb1",
                                                         numb=21),
                                            DumbEmbedded(name="dumb2emb2",
                                                         numb=22),
                                            DumbEmbedded(name="dumb2emb3",
                                                         numb=23)
                                        ]),
            DumbDocument.objects.create(name="dumb3",
                                        emb_lst=[
                                            DumbEmbedded(name="dumb3emb1",
                                                         numb=31),
                                            DumbEmbedded(name="dumb3emb2",
                                                         numb=32),
                                            DumbEmbedded(name="dumb3emb3",
                                                         numb=33)
                                        ]),
        ]

        patch = Patch(data=[{
            'path': "/emb_lst/S/name",
            'op': 'set',
            'value': "winner"
        }])
        assert patch.is_valid(), patch.errors

        queryset = DumbDocument.objects.filter(emb_lst__numb=22)
        patch.update_queryset(queryset)
        for o in objects:
            o.reload()

        for o in objects:
            for e in o.emb_lst:
                assert e.numb != 22 or e.name == "winner"
Ejemplo n.º 15
0
 def test_parsing_path(self):
     patch = Patch(data=[{
         'path': "/name",
         'op': "set",
         'value': None
     }, {
         'path': "/emb_fld/name",
         'op': "set",
         'value': None
     }, {
         'path': "/lst_fld/0",
         'op': "set",
         'value': None
     }, {
         'path': "/emb_fld/emb/emb/name",
         'op': "set",
         'value': None
     }])
     assert patch.is_valid(), patch.errors
     expected = [
         {
             'path': ("name", ),
             'op': "set",
             'value': None
         },
         {
             'path': ("emb_fld", "name"),
             'op': "set",
             'value': None
         },
         {
             'path': ("lst_fld", "0"),
             'op': "set",
             'value': None
         },
         {
             'path': ("emb_fld", "emb", "emb", "name"),
             'op': "set",
             'value': None
         },
     ]
     assert patch.validated_data == expected
Ejemplo n.º 16
0
    def test_patch_set(self):
        objects = [
            PatchingDumbDocument.objects.create(name="dumb1",
                                                int_fld=1,
                                                lst_fld=['a', 'b', 'c'],
                                                emb=DumbEmbedded(name="emb1")),
            PatchingDumbDocument.objects.create(name="dumb2",
                                                int_fld=2,
                                                lst_fld=['b', 'c', 'd'],
                                                emb=DumbEmbedded(name="emb2")),
            PatchingDumbDocument.objects.create(name="dumb3",
                                                int_fld=3,
                                                lst_fld=['d', 'e', 'f'],
                                                emb=DumbEmbedded(name="emb3"))
        ]

        patch = Patch(data=[{
            'path': '/int_fld',
            'op': 'inc',
            'value': 100
        }, {
            'path': '/lst_fld',
            'op': 'push',
            'value': 'z'
        }, {
            'path': '/emb/name',
            'op': 'set',
            'value': "Foo"
        }])

        assert patch.is_valid(), patch.errors

        queryset = PatchingDumbDocument.objects.all()
        patch.update_queryset(queryset)

        for o in objects:
            o.reload()
        assert [o.int_fld for o in objects] == [101, 102, 103]
        assert [o.lst_fld for o in objects] == [['a', 'b', 'c', 'z'],
                                                ['b', 'c', 'd', 'z'],
                                                ['d', 'e', 'f', 'z']]
        assert [o.emb.name for o in objects] == ["Foo", "Foo", "Foo"]
    def test_patch_set(self):
        objects = [
            PatchingDumbDocument.objects.create(name="dumb1", int_fld=1, lst_fld=['a', 'b', 'c'], emb=DumbEmbedded(name="emb1")),
            PatchingDumbDocument.objects.create(name="dumb2", int_fld=2, lst_fld=['b', 'c', 'd'], emb=DumbEmbedded(name="emb2")),
            PatchingDumbDocument.objects.create(name="dumb3", int_fld=3, lst_fld=['d', 'e', 'f'], emb=DumbEmbedded(name="emb3"))
        ]

        patch = Patch(data=[{'path': '/int_fld', 'op': 'inc', 'value': 100},
                            {'path': '/lst_fld', 'op': 'push', 'value': 'z'},
                            {'path': '/emb/name', 'op': 'set', 'value': "Foo"}])

        assert patch.is_valid(), patch.errors

        queryset = PatchingDumbDocument.objects.all()
        patch.update_queryset(queryset)

        for o in objects:
            o.reload()
        assert [o.int_fld for o in objects] == [101, 102, 103]
        assert [o.lst_fld for o in objects] == [['a', 'b', 'c', 'z'], ['b', 'c', 'd', 'z'], ['d', 'e', 'f', 'z']]
        assert [o.emb.name for o in objects] == ["Foo", "Foo", "Foo"]
Ejemplo n.º 18
0
 def test_parsing_elem_values(self):
     patch = Patch(DumbSerializer(),
                   data=[{
                       'path': "/dct_fld/item",
                       'op': "set",
                       'value': "123"
                   }, {
                       'path': "/intdct_fld/item",
                       'op': "set",
                       'value': "123"
                   }])
     assert patch.is_valid(), patch.errors
     expected = [{
         'path': ("dct_fld", "item"),
         'op': "set",
         'value': "123"
     }, {
         'path': ("intdct_fld", "item"),
         'op': "set",
         'value': 123
     }]
     assert patch.validated_data == expected
    def test_patch_matched(self):
        objects = [
            PatchingDumbDocument.objects.create(
                name="dumb1",
                emb_lst=[
                    DumbEmbedded(name="dumb1emb1", foo=11),
                    DumbEmbedded(name="dumb1emb2", foo=12),
                    DumbEmbedded(name="dumb1emb3", foo=13)
                ]
            ),
            PatchingDumbDocument.objects.create(
                name="dumb2",
                emb_lst=[
                    DumbEmbedded(name="dumb2emb1", foo=21),
                    DumbEmbedded(name="dumb2emb2", foo=22),
                    DumbEmbedded(name="dumb2emb3", foo=23)
                ]
            ),
            PatchingDumbDocument.objects.create(
                name="dumb3",
                emb_lst=[
                    DumbEmbedded(name="dumb3emb1", foo=31),
                    DumbEmbedded(name="dumb3emb2", foo=32),
                    DumbEmbedded(name="dumb3emb3", foo=33)
                ]
            ),
        ]

        patch = Patch(data=[{'path': "/emb_lst/S/name", 'op': 'set', 'value': "winner"}])
        assert patch.is_valid(), patch.errors

        queryset = PatchingDumbDocument.objects.filter(emb_lst__foo=22)
        patch.update_queryset(queryset)
        for o in objects:
            o.reload()

        for o in objects:
            for e in o.emb_lst:
                assert e.foo != 22 or e.name == "winner"
    def test_patch_obj(self):
        objects = [
            PatchingDumbDocument.objects.create(name="dumb1", int_fld=1, lst_fld=['a', 'b', 'c'], emb=DumbEmbedded(name="emb1")),
            PatchingDumbDocument.objects.create(name="dumb2", int_fld=2, lst_fld=['b', 'c', 'd'], emb=DumbEmbedded(name="emb2")),
            PatchingDumbDocument.objects.create(name="dumb3", int_fld=3, lst_fld=['d', 'e', 'f'], emb=DumbEmbedded(name="emb3"))
        ]

        patch = Patch(data=[{'path': '/int_fld', 'op': 'inc', 'value': 100},
                            {'path': '/lst_fld', 'op': 'push', 'value': 'z'},
                            {'path': '/dct_fld/foo', 'op': 'set', 'value': "f"},
                            {'path': '/dct_fld/bar', 'op': 'set', 'value': "b"},
                            {'path': '/emb/name', 'op': 'set', 'value': "Foo"}])

        assert patch.is_valid(), patch.errors

        obj = PatchingDumbDocument.objects.get(name="dumb2")
        patch.update_queryset(obj)

        for o in objects:
            o.reload()
        assert [o.int_fld for o in objects] == [1, 102, 3]
        assert [o.lst_fld for o in objects] == [['a', 'b', 'c'], ['b', 'c', 'd', 'z'], ['d', 'e', 'f']]
        assert [o.dct_fld for o in objects] == [{}, {'foo': 'f', 'bar': 'b'}, {}]
        assert [o.emb.name for o in objects] == ["emb1", "Foo", "emb3"]
 def test_nonlist(self):
     patch = Patch(data={'path': "/name", 'op': "set", 'value': "Foo"})
     assert not patch.is_valid()
Ejemplo n.º 22
0
 def test_nonpath(self):
     patch = Patch(data=[{'path': "name", 'value': "Foo"}])
     assert not patch.is_valid()
Ejemplo n.º 23
0
 def test_incomplete(self):
     patch = Patch(data=[{'path': "/name", 'value': "Foo"}])
     assert not patch.is_valid()
Ejemplo n.º 24
0
 def test_nondict(self):
     patch = Patch(data=["xxx"])
     assert not patch.is_valid()
Ejemplo n.º 25
0
 def test_nonlist(self):
     patch = Patch(data={'path': "/name", 'op': "set", 'value': "Foo"})
     assert not patch.is_valid()
 def test_incomplete(self):
     patch = Patch(data=[{'path': "/name", 'value': "Foo"}])
     assert not patch.is_valid()
 def test_nondict(self):
     patch = Patch(data=["xxx"])
     assert not patch.is_valid()
 def test_nonpath(self):
     patch = Patch(data=[{'path': "name", 'value': "Foo"}])
     assert not patch.is_valid()