def test_format_item_with_unfold(self): formatter = GraphQLResultFormatter(unfold=True) formatter._box_item = MagicMock() formatter._box_item.return_value = ['a', 'b', 'c'] formatter._flatten_edge = lambda x: 'flattened_' + x result = list(formatter.format_item('item')) self.assertEqual(['flattened_a', 'flattened_b', 'flattened_c'], result)
def test_format_item_with_sorter(self): formatter = GraphQLResultFormatter(sort=True) formatter._box_item = MagicMock(return_value=['a', 'b', 'c']) formatter.sorter = MagicMock() formatter.sorter.sort_items = lambda x: x[1] formatter._flatten_edge = lambda x: 'flattened_' + x result = next(formatter.format_item('item')) self.assertEqual('flattened_b', result)
def test_box_item_nested_references_same_level_cross_relations(self): item = { 'node': { 'k1': 'v1', 'k2': 'v2', 'reference': { 'edges': [ { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'B', 'reference': { 'edges': [ { 'node': { 'rrk1': 'rrv1', 'rrk2': 'rrv2', 'sortkey': 'rrB', } }, { 'node': { 'rrk1': 'rrv1', 'rrk2': 'rrv2', 'sortkey': 'rrA', } } ] }, 'reference2': { 'edges': [ { 'node': { 'r2k1': 'r2v1' } }, { 'node': { 'r2k2': 'r2v2', } } ] } }, }, ] } } } expected_result = [ { 'node': { 'k1': 'v1', 'k2': 'v2', 'reference': { 'edges': [ { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'B', 'reference': { 'edges': [ { 'node': { 'rrk1': 'rrv1', 'rrk2': 'rrv2', 'sortkey': 'rrB', } }, ] }, 'reference2': { 'edges': [ { 'node': { 'r2k1': 'r2v1' } }, ] } }, }, ] } } }, { 'node': { 'k1': 'v1', 'k2': 'v2', 'reference': { 'edges': [ { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'B', 'reference': { 'edges': [ { 'node': { 'rrk1': 'rrv1', 'rrk2': 'rrv2', 'sortkey': 'rrA', } } ] }, 'reference2': { 'edges': [ { 'node': { 'r2k1': 'r2v1' } }, ] } }, }, ] } } }, { 'node': { 'k1': 'v1', 'k2': 'v2', 'reference': { 'edges': [ { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'B', 'reference': { 'edges': [ { 'node': { 'rrk1': 'rrv1', 'rrk2': 'rrv2', 'sortkey': 'rrB', } }, ] }, 'reference2': { 'edges': [ { 'node': { 'r2k2': 'r2v2', } } ] } }, }, ] } } }, { 'node': { 'k1': 'v1', 'k2': 'v2', 'reference': { 'edges': [ { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'B', 'reference': { 'edges': [ { 'node': { 'rrk1': 'rrv1', 'rrk2': 'rrv2', 'sortkey': 'rrA', } } ] }, 'reference2': { 'edges': [ { 'node': { 'r2k2': 'r2v2', } } ] } }, }, ] } } }, ] formatter = GraphQLResultFormatter(cross_relations=True) formatter._undouble = MagicMock(side_effect=lambda x: x) result = formatter._box_item(item) self.assertEqual(expected_result, result)
def test_box_item_nested_references(self): item = { 'node': { 'k1': 'v1', 'k2': 'v2', 'reference': { 'edges': [ { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'B', 'reference': { 'edges': [ { 'node': { 'rrk1': 'rrv1', 'rrk2': 'rrv2', 'sortkey': 'rrB', } }, { 'node': { 'rrk1': 'rrv1', 'rrk2': 'rrv2', 'sortkey': 'rrA', } } ] } }, }, { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'C' }, }, { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'A' }, } ] } } } expected_result = [ { 'node': { 'k1': 'v1', 'k2': 'v2', 'reference': { 'edges': [ { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'B', 'reference': { 'edges': [ { 'node': { 'rrk1': 'rrv1', 'rrk2': 'rrv2', 'sortkey': 'rrB', } }, ] } } } ] } }, }, { 'node': { 'k1': 'v1', 'k2': 'v2', 'reference': { 'edges': [ { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'B', 'reference': { 'edges': [ { 'node': { 'rrk1': 'rrv1', 'rrk2': 'rrv2', 'sortkey': 'rrA', } }, ] } } } ] } }, }, { 'node': { 'k1': 'v1', 'k2': 'v2', 'reference': { 'edges': [ { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'C' } } ] } }, }, { 'node': { 'k1': 'v1', 'k2': 'v2', 'reference': { 'edges': [ { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'A' } } ] } }, } ] formatter = GraphQLResultFormatter() formatter._undouble = MagicMock(side_effect=lambda x: x) result = formatter._box_item(item) self.assertEqual(expected_result, result)
def test_box_item_specific(self): item = { 'node': { 'identificatie': '0363200000403263', 'huisnummer': 17, 'huisletter': None, 'huisnummertoevoeging': None, 'postcode': '1015NR', 'ligtAanOpenbareruimte': { 'edges': [ { 'node': { 'naam': 'Eerste Anjeliersdwarsstraat' } } ] }, 'ligtInWoonplaats': { 'edges': [ { 'node': { 'naam': 'Amsterdam' } } ] } } } expected_result = [{ 'node': { 'identificatie': '0363200000403263', 'huisnummer': 17, 'huisletter': None, 'huisnummertoevoeging': None, 'postcode': '1015NR', 'ligtAanOpenbareruimte': { 'edges': [ { 'node': { 'naam': 'Eerste Anjeliersdwarsstraat' } } ] }, 'ligtInWoonplaats': { 'edges': [ { 'node': { 'naam': 'Amsterdam' } } ] } } }] formatter = GraphQLResultFormatter() formatter._undouble = MagicMock(side_effect=lambda x: x) result = formatter._box_item(item) self.assertEqual(len(expected_result), len(result)) self.assertEqual(expected_result, result)
def test_box_item(self): item = { 'node': { 'k1': 'v1', 'k2': 'v2', 'reference': { 'edges': [ { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'B' }, }, { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'C' }, }, { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'A' }, } ] } } } expected_result = [ { 'node': { 'k1': 'v1', 'k2': 'v2', 'reference': { 'edges': [ { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'B' } } ] } }, }, { 'node': { 'k1': 'v1', 'k2': 'v2', 'reference': { 'edges': [ { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'C' } } ] } }, }, { 'node': { 'k1': 'v1', 'k2': 'v2', 'reference': { 'edges': [ { 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'A' } } ] } }, } ] formatter = GraphQLResultFormatter() result = formatter._box_item(item) self.assertEqual(expected_result, result)
def test_sort_item_nested(self): item = { 'node': { 'k1': 'v1', 'k2': 'v2', 'reference': { 'edges': [{ 'node': { 'rk1': 'rv1', 'rk2': 'rv2', 'sortkey': 'B', 'nestedreference': { 'edges': [ { 'node': { 'sort2key': 'C' } }, { 'node': { 'sort2key': 'A' } }, { 'node': { 'sort2key': 'B' } }, ] } }, }, { 'node': { 'rk11': 'rv1', 'rk22': 'rv2', 'sortkey': 'A', 'nestedreference': { 'edges': [ { 'node': { 'sort2key': 'F' } }, { 'node': { 'sort2key': 'D' } }, { 'node': { 'sort2key': 'E' } }, ] } }, }, { 'node': { 'rk111': 'rv1', 'rk222': 'rv2', 'sortkey': 'A', 'nestedreference': { 'edges': [ { 'node': { 'sort2key': 'H' } }, { 'node': { 'sort2key': 'I' } }, { 'node': { 'sort2key': 'G' } }, ] } }, }] } } } # Use formatter to box item; otherwise the argument would be very long formatter = GraphQLResultFormatter() items = formatter._box_item(item) expected_result = { 'node': { 'k1': 'v1', 'k2': 'v2', 'reference': { 'edges': [{ 'node': { 'rk111': 'rv1', 'rk222': 'rv2', 'sortkey': 'A', 'nestedreference': { 'edges': [ { 'node': { 'sort2key': 'I' } }, ] } }, }] } } } sorters = { 'reference.sortkey': lambda x, y: x < y, 'reference.nestedreference.sort2key': lambda x, y: x > y, } sorter = GraphQlResultSorter(sorters) self.assertEqual(expected_result, sorter.sort_items(items))