71 lines
2.8 KiB
Python
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')
|