@@ -708,6 +708,75 @@ def get(self, request):
708
708
response .render ()
709
709
self .assertContains (response , '<tr><th>Iteritems</th><td>a string</td></tr>' , html = True )
710
710
711
+ def test_get_result_url (self ):
712
+ factory = APIRequestFactory ()
713
+
714
+ class DummyGenericViewsetLike (APIView ):
715
+ lookup_field = 'test'
716
+
717
+ def reverse_action (view , * args , ** kwargs ):
718
+ self .assertEqual (kwargs ['kwargs' ]['test' ], 1 )
719
+ return '/example/'
720
+
721
+ # get the view instance instead of the view function
722
+ view = DummyGenericViewsetLike .as_view ()
723
+ request = factory .get ('/' )
724
+ response = view (request )
725
+ view = response .renderer_context ['view' ]
726
+
727
+ self .assertEqual (self .renderer .get_result_url ({'test' : 1 }, view ), '/example/' )
728
+ self .assertIsNone (self .renderer .get_result_url ({}, view ))
729
+
730
+ def test_get_result_url_no_result (self ):
731
+ factory = APIRequestFactory ()
732
+
733
+ class DummyView (APIView ):
734
+ lookup_field = 'test'
735
+
736
+ # get the view instance instead of the view function
737
+ view = DummyView .as_view ()
738
+ request = factory .get ('/' )
739
+ response = view (request )
740
+ view = response .renderer_context ['view' ]
741
+
742
+ self .assertIsNone (self .renderer .get_result_url ({'test' : 1 }, view ))
743
+ self .assertIsNone (self .renderer .get_result_url ({}, view ))
744
+
745
+ def test_get_context_result_urls (self ):
746
+ factory = APIRequestFactory ()
747
+
748
+ class DummyView (APIView ):
749
+ lookup_field = 'test'
750
+
751
+ def reverse_action (view , url_name , args = None , kwargs = None ):
752
+ return '/%s/%d' % (url_name , kwargs ['test' ])
753
+
754
+ # get the view instance instead of the view function
755
+ view = DummyView .as_view ()
756
+ request = factory .get ('/' )
757
+ response = view (request )
758
+
759
+ data = [
760
+ {'test' : 1 },
761
+ {'url' : '/example' , 'test' : 2 },
762
+ {'url' : None , 'test' : 3 },
763
+ {},
764
+ ]
765
+ context = {
766
+ 'view' : DummyView (),
767
+ 'request' : Request (request ),
768
+ 'response' : response
769
+ }
770
+
771
+ context = self .renderer .get_context (data , None , context )
772
+ results = context ['results' ]
773
+
774
+ self .assertEqual (len (results ), 4 )
775
+ self .assertEqual (results [0 ]['url' ], '/detail/1' )
776
+ self .assertEqual (results [1 ]['url' ], '/example' )
777
+ self .assertEqual (results [2 ]['url' ], None )
778
+ self .assertNotIn ('url' , results [3 ])
779
+
711
780
712
781
@pytest .mark .skipif (not coreapi , reason = 'coreapi is not installed' )
713
782
class TestDocumentationRenderer (TestCase ):
0 commit comments