def test_actions__for_list_and_detail_with_exact_names(self): class BasicViewSet(viewsets.ViewSet): @action(is_for_list=True, endpoint='action-one') def action1(self, request, *args, **kwargs): pass @action(endpoint='action-one') def action1_detail(self, request, *args, **kwargs): pass routes = self.router.get_routes(BasicViewSet) action1_list_route = self.get_dynamic_route_by_def_name('action1', routes) action1_detail_route = self.get_dynamic_route_by_def_name('action1_detail', routes) self.assertEqual(action1_list_route.mapping, {'post': 'action1'}) self.assertEqual(action1_list_route.url, add_trailing_slash_if_needed(u'^{prefix}/action-one/$')) self.assertEqual(action1_detail_route.mapping, {'post': 'action1_detail'}) self.assertEqual(action1_detail_route.url, add_trailing_slash_if_needed(u'^{prefix}/{lookup}/action-one/$'))
def test_action__for_list__and__with_endpoint(self): class BasicViewSet(viewsets.ViewSet): @action(is_for_list=True, endpoint='action-one') def action1(self, request, *args, **kwargs): pass routes = self.router.get_routes(BasicViewSet) action1_route = self.get_dynamic_route_by_def_name('action1', routes) msg = '@action with is_for_list=True and endpoint route should map methods to "endpoint"' self.assertEqual(action1_route.mapping, {'post': 'action1'}, msg) msg = '@action with is_for_list=True and endpoint route should use url in list scope with "endpoint" value' self.assertEqual(action1_route.url, add_trailing_slash_if_needed(u'^{prefix}/action-one/$'), msg)
def test_link_endpoint(self): class BasicViewSet(viewsets.ViewSet): @link(endpoint='link-one') def link1(self, request, *args, **kwargs): pass routes = self.router.get_routes(BasicViewSet) link1_route = self.get_dynamic_route_by_def_name('link1', routes) msg = '@link with endpoint route should map methods to endpoint if it is specified' self.assertEqual(link1_route.mapping, {'get': 'link1'}, msg) msg = '@link with endpoint route should use url with detail lookup' self.assertEqual(link1_route.url, add_trailing_slash_if_needed(u'^{prefix}/{lookup}/link-one/$'), msg)
def test_list_route(self): class BasicViewSet(viewsets.ViewSet): @list_route() def action1(self, request, *args, **kwargs): pass routes = self.router.get_routes(BasicViewSet) action1_route = self.get_dynamic_route_by_def_name('action1', routes) msg = '@list_route should map methods to def name' self.assertEqual(action1_route.mapping, {'get': 'action1'}, msg) msg = '@list_route should use url in list scope' self.assertEqual(action1_route.url, add_trailing_slash_if_needed(u'^{prefix}/action1/$'), msg)
def test_detail_route__with_methods__and__with_url_path(self): class BasicViewSet(viewsets.ViewSet): @detail_route(methods=['post'], url_path='action-one') def action1(self, request, *args, **kwargs): pass routes = self.router.get_routes(BasicViewSet) action1_route = self.get_dynamic_route_by_def_name('action1', routes) msg = '@detail_route should map methods to "url_path"' self.assertEqual(action1_route.mapping, {'post': 'action1'}, msg) msg = '@detail_route should use url with detail lookup and "url_path" value' self.assertEqual(action1_route.url, add_trailing_slash_if_needed(u'^{prefix}/{lookup}/action-one/$'), msg)