python-benedict/tests/core/test_groupby.py

64 lines
1.8 KiB
Python
Raw Normal View History

import unittest
2020-02-06 14:14:36 +00:00
from benedict.core import clone as _clone
from benedict.core import groupby as _groupby
class groupby_test_case(unittest.TestCase):
2022-02-13 10:35:43 +00:00
"""
This class describes a groupby test case.
"""
2020-02-06 14:14:36 +00:00
def test_groupby(self):
l = [
2022-02-13 10:35:43 +00:00
{"id": 1, "name": "John"},
{"id": 2, "name": "Frank"},
{"id": 3, "name": "Tony"},
{"id": 4, "name": "Jimmy"},
{"id": 3, "name": "Sam"},
{"id": 1, "name": "Charles"},
{"id": 3, "name": "Bob"},
{"id": 4, "name": "Paul"},
{"id": 1, "name": "Michael"},
2020-02-06 14:14:36 +00:00
]
l_clone = _clone(l)
2022-02-13 10:35:43 +00:00
d = _groupby(l, "id")
2020-02-06 14:14:36 +00:00
self.assertEqual(l, l_clone)
self.assertTrue(isinstance(d, dict))
self.assertEqual(len(d), 4)
2022-02-13 10:35:43 +00:00
self.assertTrue(
all(
[
1 in d,
2 in d,
3 in d,
4 in d,
]
)
)
self.assertTrue(
all(
[
isinstance(d[1], list),
isinstance(d[2], list),
isinstance(d[3], list),
isinstance(d[4], list),
]
)
)
2020-02-06 14:14:36 +00:00
self.assertEqual(len(d[1]), 3)
self.assertEqual(len(d[2]), 1)
self.assertEqual(len(d[3]), 3)
self.assertEqual(len(d[4]), 2)
def test_groupby_with_wrong_input(self):
2022-02-13 10:35:43 +00:00
l = {"id": 1, "name": "John"}
2020-02-06 14:14:36 +00:00
with self.assertRaises(ValueError):
2022-02-13 10:35:43 +00:00
d = _groupby(l, "id")
2020-02-06 14:14:36 +00:00
l = [
2022-02-13 10:35:43 +00:00
[{"id": 1, "name": "John"}],
[{"id": 2, "name": "Frank"}],
2020-02-06 14:14:36 +00:00
]
with self.assertRaises(ValueError):
2022-02-13 10:35:43 +00:00
d = _groupby(l, "id")