def test_lookup_regex_no_model(self): class OwnerViewSet(viewsets.GenericViewSet): pass router = SimpleRouter() self.assertEqual(router.get_lookup_regex(OwnerViewSet), "(?P<pk>[^/.]+)")
def test_get_url_with_empty_prefix(self): class OwnerViewSet(viewsets.ListModelMixin, viewsets.GenericViewSet): model = Owner router = SimpleRouter() router.register("", OwnerViewSet, "") urlpattern = router.get_urls()[0] self.assertEqual(self.get_regex(urlpattern), "^$")
def test_custom_lookup_regex(self): class OwnerViewSet(viewsets.RetrieveModelMixin, viewsets.GenericViewSet): model = Owner lookup_url_regex = "lookup_regex" router = SimpleRouter() self.assertEqual(router.get_lookup_regex(OwnerViewSet), "lookup_regex")
def test_action_on_existing_action(self): class OwnerViewSet(viewsets.ListModelMixin, viewsets.GenericViewSet): model = Owner @action(detail=False) def list(self, request, *args, **kwargs): pass router = SimpleRouter() with self.assertRaises(ImproperlyConfigured): router.get_routes(OwnerViewSet)
def test_path_with_mustaches(self): class OwnerViewSet(viewsets.GenericViewSet): @action(detail=False, url_path="{dummy}") def dummy(self, request, *args, **kwargs): pass router = SimpleRouter() routes = router.get_routes(OwnerViewSet) dummy_route = next(iter(filter(lambda r: "dummy" in r.url, routes)), None) self.assertIsNotNone(dummy_route) self.assertEqual(dummy_route.url, "^{prefix}/{{dummy}}{trailing_slash}$")
from django.urls import include, path from django_sorcery.routers import SimpleRouter from . import views router = SimpleRouter() router.register("", views.PollsViewSet) app_name = "polls" urlpatterns = [path("", include(router.urls))]
def test_router(self): router = SimpleRouter() router.register("prefix", OwnerViewSet) self.assertEqual(router.registry, [("prefix", OwnerViewSet, "owner")]) self.assertEqual( router.get_routes(OwnerViewSet), [ Route( url="^{prefix}{trailing_slash}$", mapping={ "get": "list", "post": "create" }, name="{basename}-list", detail=False, initkwargs={"suffix": "List"}, ), Route( url="^{prefix}/new{trailing_slash}$", mapping={"get": "new"}, name="{basename}-new", detail=False, initkwargs={"suffix": "New"}, ), Route( url="^{prefix}/{lookup}{trailing_slash}$", mapping={ "get": "retrieve", "post": "update", "put": "update", "patch": "update", "delete": "destroy", }, name="{basename}-detail", detail=True, initkwargs={"suffix": "Instance"}, ), Route( url="^{prefix}/{lookup}/edit{trailing_slash}$", mapping={"get": "edit"}, name="{basename}-edit", detail=True, initkwargs={"suffix": "Instance"}, ), Route( url="^{prefix}/{lookup}/delete{trailing_slash}$", mapping={ "get": "confirm_destroy", "post": "destroy" }, name="{basename}-destroy", detail=True, initkwargs={"suffix": "Instance"}, ), Route( url="^{prefix}/{lookup}/custom{trailing_slash}$", mapping={"get": "custom"}, name="{basename}-custom", detail=True, initkwargs={}, ), ], ) urls = {url.name: url for url in router.urls} self.assertEqual(self.get_regex(urls["owner-custom"]), "^prefix/(?P<id>[^/.]+)/custom/$") self.assertEqual(self.get_regex(urls["owner-destroy"]), "^prefix/(?P<id>[^/.]+)/delete/$") self.assertEqual(self.get_regex(urls["owner-detail"]), "^prefix/(?P<id>[^/.]+)/$") self.assertEqual(self.get_regex(urls["owner-edit"]), "^prefix/(?P<id>[^/.]+)/edit/$") self.assertEqual(self.get_regex(urls["owner-list"]), "^prefix/$") self.assertEqual(self.get_regex(urls["owner-new"]), "^prefix/new/$")