예제 #1
0
    def test_diff_records_multikey(self):
        lhs = [
            {'name': 'a', 'type': 1, 'sheep': 7},
            {'name': 'b', 'type': 1, 'sheep': 12},
            {'name': 'c', 'type': 1, 'sheep': 0},
        ]
        rhs = [
            {'name': 'a', 'type': 1, 'sheep': 7},
            {'name': 'c', 'type': 1, 'sheep': 2},
            {'name': 'd', 'type': 1, 'sheep': 8},
        ]

        diff = csvdiff.diff_records(lhs, rhs, ['name', 'type'])
        assert patch.is_valid(diff)
        assert patch.is_typed(diff)

        self.assertEqual(diff['added'], [
            {'name': 'd', 'sheep': 8, 'type': 1}
        ])
        self.assertEqual(diff['removed'], [
            {'name': 'b', 'sheep': 12, 'type': 1}
        ])
        self.assertEqual(diff['changed'], [
            {'key': ['c', 1],
             'fields': {'sheep': {'from': 0, 'to': 2}}}
        ])

        # check that we can apply the diff
        patched = csvdiff.patch_records(diff, lhs)
        self.assertRecordsEqual(rhs, patched)
예제 #2
0
    def test_diff_records_str_values(self):
        lhs = [
            {'name': 'a', 'sheep': '7'},
            {'name': 'b', 'sheep': '12'},
            {'name': 'c', 'sheep': '0'},
        ]
        rhs = [
            {'name': 'a', 'sheep': '7'},
            {'name': 'c', 'sheep': '2'},
            {'name': 'd', 'sheep': '8'},
        ]

        diff = csvdiff.diff_records(lhs, rhs, ['name'])
        assert patch.is_valid(diff)
        assert not patch.is_typed(diff)

        # check the contents of the diff
        self.assertEqual(diff['added'], [
            {'name': 'd', 'sheep': '8'}
        ])
        self.assertEqual(diff['removed'], [
            {'name': 'b', 'sheep': '12'}
        ])
        self.assertEqual(diff['changed'], [
            {'key': ['c'],
             'fields': {'sheep': {'from': '0', 'to': '2'}}}
        ])

        # check that we can apply the diff
        patched = csvdiff.patch_records(diff, lhs)
        self.assertRecordsEqual(rhs, patched)
예제 #3
0
    def test_diff_records_multikey(self):
        lhs = [
            {
                'name': 'a',
                'type': 1,
                'sheep': 7
            },
            {
                'name': 'b',
                'type': 1,
                'sheep': 12
            },
            {
                'name': 'c',
                'type': 1,
                'sheep': 0
            },
        ]
        rhs = [
            {
                'name': 'a',
                'type': 1,
                'sheep': 7
            },
            {
                'name': 'c',
                'type': 1,
                'sheep': 2
            },
            {
                'name': 'd',
                'type': 1,
                'sheep': 8
            },
        ]

        diff = csvdiff.diff_records(lhs, rhs, ['name', 'type'])
        assert patch.is_valid(diff)
        assert patch.is_typed(diff)

        self.assertEqual(diff['added'], [{'name': 'd', 'sheep': 8, 'type': 1}])
        self.assertEqual(diff['removed'], [{
            'name': 'b',
            'sheep': 12,
            'type': 1
        }])
        self.assertEqual(diff['changed'], [{
            'key': ['c', 1],
            'fields': {
                'sheep': {
                    'from': 0,
                    'to': 2
                }
            }
        }])

        # check that we can apply the diff
        patched = csvdiff.patch_records(diff, lhs)
        self.assertRecordsEqual(rhs, patched)
예제 #4
0
    def test_diff_records_str_values(self):
        lhs = [
            {
                'name': 'a',
                'sheep': '7'
            },
            {
                'name': 'b',
                'sheep': '12'
            },
            {
                'name': 'c',
                'sheep': '0'
            },
        ]
        rhs = [
            {
                'name': 'a',
                'sheep': '7'
            },
            {
                'name': 'c',
                'sheep': '2'
            },
            {
                'name': 'd',
                'sheep': '8'
            },
        ]

        diff = csvdiff.diff_records(lhs, rhs, ['name'])
        assert patch.is_valid(diff)
        assert not patch.is_typed(diff)

        # check the contents of the diff
        self.assertEqual(diff['added'], [{'name': 'd', 'sheep': '8'}])
        self.assertEqual(diff['removed'], [{'name': 'b', 'sheep': '12'}])
        self.assertEqual(diff['changed'], [{
            'key': ['c'],
            'fields': {
                'sheep': {
                    'from': '0',
                    'to': '2'
                }
            }
        }])

        # check that we can apply the diff
        patched = csvdiff.patch_records(diff, lhs)
        self.assertRecordsEqual(rhs, patched)