Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
    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)
Exemple #6
0
    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)
Exemple #7
0
    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))