def test_clean_patterns_with_normal_pk(self):
        """
        Clean an URL with the typical pk-based pattern
        """
        urls_data = [
            (lambda _: None,  # View
             'api/things/thing/(?P<pk>[^/]+)/$',
             'things:thing-detail')
        ]

        result = clean_patterns(urls_data)

        self.assertEqual(len(result), 1)
        self.assertEqual(result[0][0], 'things__thing_detail')
        self.assertEqual(result[0][1], 'api/things/thing/{pk}/')
    def test_clean_patterns_with_data_type(self):
        """
        Clean an URL containing an argument with a data type
        """
        urls_data = [
            (lambda _: None,  # View,
             '^bakery/bake/(?P<thing_id>\\d+)/',
             'bakery:bake')
        ]

        result = clean_patterns(urls_data)

        self.assertEqual(len(result), 1)
        self.assertEqual(result[0][0], 'bakery__bake')
        self.assertEqual(result[0][1], 'bakery/bake/{thing_id}/')
    def test_clean_patterns_with_two_args(self):
        """
        Clean an URL containing 2 arguments
        """
        urls_data = [
            (lambda _: None,  # View,
             '^bakery/bake/(?P<pk>[^/]+)/and-then/(?P<another_id>\\d+)/',
             'bakery:bake')
        ]

        result = clean_patterns(urls_data)

        self.assertEqual(len(result), 1)
        self.assertEqual(result[0][0], 'bakery__bake')
        self.assertEqual(
            result[0][1], 'bakery/bake/{pk}/and-then/{another_id}/')