@@ -707,9 +707,101 @@ def test_rest_endpoint_user_roles(self):
707
707
708
708
self .assertEqual (3 , len (json .loads (f .content )['data' ]['collection' ]))
709
709
710
+ def test_inm (self ):
711
+ '''retrieve the user_utils.js file without an if-none-match etag
712
+ header, a bad if-none-match header and valid single and
713
+ multiple values.
714
+ '''
715
+ f = requests .get (self .url_base () + '/@@file/user_utils.js' ,
716
+ headers = { 'Accept-Encoding' : 'gzip, foo' ,
717
+ 'Accept' : '*/*' })
718
+ print (f .status_code )
719
+ print (f .headers )
720
+
721
+ self .assertEqual (f .status_code , 200 )
722
+ expected = { 'Content-Type' : self .js_mime_type ,
723
+ 'Content-Encoding' : 'gzip' ,
724
+ 'Vary' : 'Accept-Encoding' ,
725
+ }
726
+
727
+ # use dict comprehension to remove fields like date,
728
+ # etag etc. from f.headers.
729
+ self .assertDictEqual ({ key : value for (key , value ) in
730
+ f .headers .items () if key in expected },
731
+ expected )
732
+
733
+ # use etag in previous response
734
+ etag = f .headers ['etag' ]
735
+ f = requests .get (self .url_base () + '/@@file/user_utils.js' ,
736
+ headers = { 'Accept-Encoding' : 'gzip, foo' ,
737
+ 'If-None-Match' : etag ,
738
+ 'Accept' : '*/*' })
739
+ print (f .status_code )
740
+ print (f .headers )
741
+
742
+ self .assertEqual (f .status_code , 304 )
743
+ expected = { 'Vary' : 'Accept-Encoding' ,
744
+ 'Content-Length' : '0' ,
745
+ 'ETag' : etag ,
746
+ 'Vary' : 'Accept-Encoding'
747
+ }
748
+
749
+ # use dict comprehension to remove fields like date, server,
750
+ # etc. from f.headers.
751
+ self .assertDictEqual ({ key : value for (key , value ) in f .headers .items () if key in expected }, expected )
752
+
753
+ # test again with etag supplied w/o content-encoding
754
+ # and multiple etags
755
+ self .assertTrue (etag .endswith ('-gzip"' ))
756
+
757
+ # keep etag intact. Used below.
758
+ base_etag = etag [:- 6 ] + '"'
759
+
760
+ all_etags = (
761
+ '"a41932-8b5-664ce93d", %s", "a41932-8b5-664ce93d-br"' %
762
+ base_etag
763
+ )
764
+
765
+ f = requests .get (self .url_base () + '/@@file/user_utils.js' ,
766
+ headers = { 'Accept-Encoding' : 'gzip, foo' ,
767
+ 'If-None-Match' : base_etag ,
768
+ 'Accept' : '*/*' })
769
+ print (f .status_code )
770
+ print (f .headers )
771
+
772
+ self .assertEqual (f .status_code , 304 )
773
+ expected = { 'Vary' : 'Accept-Encoding' ,
774
+ 'Content-Length' : '0' ,
775
+ 'ETag' : base_etag ,
776
+ 'Vary' : 'Accept-Encoding'
777
+ }
778
+
779
+ # use dict comprehension to remove fields like date, server,
780
+ # etc. from f.headers.
781
+ self .assertDictEqual ({ key : value for (key , value ) in f .headers .items () if key in expected }, expected )
782
+
783
+
784
+ # test with bad etag
785
+ f = requests .get (self .url_base () + '/@@file/user_utils.js' ,
786
+ headers = { 'Accept-Encoding' : 'gzip, foo' ,
787
+ 'If-None-Match' : '"a41932-8b5-664ce93d"' ,
788
+ 'Accept' : '*/*' })
789
+ print (f .status_code )
790
+ print (f .headers )
791
+
792
+ self .assertEqual (f .status_code , 200 )
793
+ expected = { 'Content-Type' : self .js_mime_type ,
794
+ 'ETag' : etag ,
795
+ 'Content-Encoding' : 'gzip' ,
796
+ 'Vary' : 'Accept-Encoding' ,
797
+ }
798
+
799
+ # use dict comprehension to remove fields like date, server,
800
+ # etc. from f.headers.
801
+ self .assertDictEqual ({ key : value for (key , value ) in f .headers .items () if key in expected }, expected )
710
802
711
803
def test_ims (self ):
712
- ''' retreive the user_utils.js file with old and new
804
+ ''' retrieve the user_utils.js file with old and new
713
805
if-modified-since timestamps.
714
806
'''
715
807
from datetime import datetime
0 commit comments