def test_can_use_django_settings(mock_get_resolver, mock_get_json_urlpatterns): mock_resolver = mock.Mock() mock_get_resolver.return_value = mock_resolver export_urlconf.as_json() mock_get_resolver.assert_called_once_with("path.to.urlconf") mock_get_json_urlpatterns.assert_called_once_with(mock_resolver, ["whitelisted-url-name"], ["blacklisted-url-name"], True)
def test_export_include(mock_urlconf_module, mock_included_module): # Setup urls to include mock_included_module.urlpatterns = [ url(r"^red/$", View.as_view(), name="red"), url(r"^blue/$", View.as_view(), name="blue"), ] mock_urlconf_module.urlpatterns = [ url(r"^colors/", include("mock_included_module")) ] assert export_urlconf.as_json("mock_urlconf_module") == [{ "regex": "^colors/", "namespace": None, "app_name": None, "includes": [{ "regex": "^red/$", "name": "red" }, { "regex": "^blue/$", "name": "blue" }], }]
def test_defaults_to_root_urlconf(mock_get_resolver, mock_get_json_urlpatterns): # simulate absence of these settings del settings.URLCONF_EXPORT_ROOT_URLCONF del settings.URLCONF_EXPORT_WHITELIST del settings.URLCONF_EXPORT_BLACKLIST del settings.URLCONF_EXPORT_LANGUAGE_WITHOUT_COUNTRY mock_resolver = mock.Mock() mock_get_resolver.return_value = mock_resolver export_urlconf.as_json() mock_get_resolver.assert_called_once_with(settings.ROOT_URLCONF) mock_get_json_urlpatterns.assert_called_once_with(mock_resolver, None, None, False)
def test_export_route(mock_urlconf_module): mock_urlconf_module.urlpatterns = [ path("login/", View.as_view(), name="login") ] assert export_urlconf.as_json("mock_urlconf_module") == [{ "route": "login/", "name": "login" }]
def test_export_multi_language_without_country(mock_urlconf_module): mock_urlconf_module.urlpatterns = [ url(lazy(_get_color_url_pattern, str)(), View.as_view(), name="color") ] assert export_urlconf.as_json("mock_urlconf_module", language_without_country=True) == [{ "regex": { "en": "^color/$", "fr": "^couleur/$" }, "name": "color" }]
def test_export_locale_prefix_pattern(mock_urlconf_module): mock_urlconf_module.urlpatterns = i18n_patterns( url(r"^$", View.as_view(), name="index")) assert export_urlconf.as_json("mock_urlconf_module") == [{ "isLocalePrefix": True, "classPath": "django.urls.resolvers.LocalePrefixPattern", "includes": [{ "regex": "^$", "name": "index" }], }]
def test_export_custom_locale_prefix_pattern_class(mock_urlconf_module): mock_urlconf_module.urlpatterns = [ URLResolver(CustomLocalePrefixPattern(), [url(r"^$", View.as_view(), name="index")]) ] assert export_urlconf.as_json("mock_urlconf_module") == [{ "isLocalePrefix": True, "classPath": "tests.django_urlconf_export.test_export_urlconf.CustomLocalePrefixPattern", "includes": [{ "regex": "^$", "name": "index" }], }]
def test_export_regex(mock_urlconf_module): mock_urlconf_module.urlpatterns = [ # 'url' is just an alias for 're_path' url(r"^login/$", View.as_view(), name="login"), re_path(r"^logout/$", View.as_view(), name="logout"), ] assert export_urlconf.as_json("mock_urlconf_module") == [ { "regex": "^login/$", "name": "login" }, { "regex": "^logout/$", "name": "logout" }, ]
def test_export_include_with_namespace( mock_urlconf_module, mock_included_module, app_name, namespace, expected_app_name, expected_namespace, ): # Maybe set app_name on included urls module if app_name: mock_included_module.app_name = app_name # Setup urls to include mock_included_module.urlpatterns = [ url(r"^red/$", View.as_view(), name="red"), url(r"^blue/$", View.as_view(), name="blue"), ] # Maybe set a namespace for the included urls if namespace: mock_urlconf_module.urlpatterns = [ url(r"^colors/", include("mock_included_module", namespace=namespace)) ] else: mock_urlconf_module.urlpatterns = [ url(r"^colors/", include("mock_included_module")) ] assert export_urlconf.as_json("mock_urlconf_module") == [{ "regex": "^colors/", "namespace": expected_namespace, "app_name": expected_app_name, "includes": [{ "regex": "^red/$", "name": "red" }, { "regex": "^blue/$", "name": "blue" }], }]
def get(self, request): exported_urls = export_urlconf.as_json( self.urlconf, self.whitelist, self.blacklist, self.language_without_country ) return JsonResponse(exported_urls, safe=False)