python-benedict/tests/core/test_nest.py

71 lines
2.8 KiB
Python

# -*- coding: utf-8 -*-
from benedict.core import clone as _clone
from benedict.core import nest as _nest
import unittest
class nest_test_case(unittest.TestCase):
def test_nest(self):
l = [
{'id':1, 'parent_id':None, 'name':'John'},
{'id':2, 'parent_id':1, 'name':'Frank'},
{'id':3, 'parent_id':2, 'name':'Tony'},
{'id':4, 'parent_id':3, 'name':'Jimmy'},
{'id':5, 'parent_id':1, 'name':'Sam'},
{'id':6, 'parent_id':3, 'name':'Charles'},
{'id':7, 'parent_id':2, 'name':'Bob'},
{'id':8, 'parent_id':3, 'name':'Paul'},
{'id':9, 'parent_id':None, 'name':'Michael'},
]
l_clone = _clone(l)
n = _nest(l, 'id', 'parent_id', 'children')
r = [
{'id':1, 'parent_id':None, 'name':'John', 'children':[
{'id':2, 'parent_id':1, 'name':'Frank', 'children':[
{'id':3, 'parent_id':2, 'name':'Tony', 'children':[
{'id':4, 'parent_id':3, 'name':'Jimmy', 'children':[], },
{'id':6, 'parent_id':3, 'name':'Charles', 'children':[], },
{'id':8, 'parent_id':3, 'name':'Paul', 'children':[], },
], },
{'id':7, 'parent_id':2, 'name':'Bob', 'children':[], },
], },
{'id':5, 'parent_id':1, 'name':'Sam', 'children':[], },
]},
{'id':9, 'parent_id':None, 'name':'Michael', 'children':[], },
]
self.assertEqual(l, l_clone)
self.assertEqual(n, r)
def test_nest_with_wrong_keys(self):
l = [
{'id':1, 'parent_id':None, 'name':'John'},
{'id':2, 'parent_id':1, 'name':'Frank'},
{'id':3, 'parent_id':2, 'name':'Tony'},
{'id':4, 'parent_id':3, 'name':'Jimmy'},
{'id':5, 'parent_id':1, 'name':'Sam'},
{'id':6, 'parent_id':3, 'name':'Charles'},
{'id':7, 'parent_id':2, 'name':'Bob'},
{'id':8, 'parent_id':3, 'name':'Paul'},
{'id':9, 'parent_id':None, 'name':'Michael'},
]
with self.assertRaises(ValueError):
n = _nest(l, 'id', 'id', 'children')
with self.assertRaises(ValueError):
n = _nest(l, 'id', 'parent_id', 'id')
with self.assertRaises(ValueError):
n = _nest(l, 'id', 'parent_id', 'parent_id')
def test_nest_with_wrong_input(self):
l = {'id':1, 'parent_id':None, 'name':'John'}
with self.assertRaises(ValueError):
d = _nest(l, 'id', 'parent_id', 'children')
l = [
[{'id':1, 'parent_id':None, 'name':'John'},],
[{'id':2, 'parent_id':1, 'name':'Frank'},],
]
with self.assertRaises(ValueError):
d = _nest(l, 'id', 'parent_id', 'children')