@@ -749,3 +749,83 @@ class TesBanUserAgent(TestCase):
749749 def test_ban_request_with_bytedance_user_agent (self ):
750750 response = self .client .get (f"/api/packages" , format = "json" , HTTP_USER_AGENT = "bytedance" )
751751 assert 404 == response .status_code
752+
753+
754+ class TestLookup (TestCase ):
755+ def setUp (self ):
756+ Package .objects .create (
757+ type = "pypi" , namespace = "" , name = "microweber/microweber" , version = "1.2"
758+ )
759+ self .user = ApiUser .objects .create_api_user (username = "e@mail.com" )
760+ self .auth = f"Token { self .user .auth_token .key } "
761+ self .csrf_client = APIClient (enforce_csrf_checks = True )
762+ self .csrf_client .credentials (HTTP_AUTHORIZATION = self .auth )
763+
764+ def test_lookup_endpoint_failure (self ):
765+ request_body = {"purl" : None }
766+ response = self .csrf_client .post (
767+ "/api/packages/lookup" ,
768+ data = json .dumps (request_body ),
769+ content_type = "application/json" ,
770+ ).json ()
771+ assert response == {"Error" : "A 'purl' is required." }
772+
773+ def test_lookup_endpoint (self ):
774+ request_body = {"purl" : "pkg:pypi/microweber/microweber@1.2" }
775+ response = self .csrf_client .post (
776+ "/api/packages/lookup" ,
777+ data = json .dumps (request_body ),
778+ content_type = "application/json" ,
779+ ).json ()
780+ assert len (response ) == 1
781+ assert response [0 ]["purl" ] == "pkg:pypi/microweber/microweber@1.2"
782+
783+ def test_lookup_endpoint_1 (self ):
784+ Package .objects .create (
785+ type = "pypi" , namespace = "microweber" , name = "microweber" , version = "1.2"
786+ )
787+ request_body = {"purl" : "pkg:pypi/microweber/microweber@1.2" }
788+ response = self .csrf_client .post (
789+ "/api/packages/lookup" ,
790+ data = json .dumps (request_body ),
791+ content_type = "application/json" ,
792+ ).json ()
793+ assert len (response ) == 2
794+ assert response [0 ]["purl" ] == "pkg:pypi/microweber/microweber@1.2"
795+ assert response [0 ]["purl" ] == response [1 ]["purl" ]
796+
797+ def test_lookup_endpoint_with_one_purl_with_qualifier (self ):
798+ Package .objects .create (
799+ type = "pypi" , namespace = "microweber" , name = "microweber" , version = "1.2"
800+ )
801+ Package .objects .create (
802+ type = "pypi" ,
803+ namespace = "microweber" ,
804+ name = "microweber" ,
805+ version = "1.2" ,
806+ qualifiers = {"foo" : "bar" },
807+ )
808+ request_body = {"purl" : "pkg:pypi/microweber/microweber@1.2" }
809+ response = self .csrf_client .post (
810+ "/api/packages/lookup" ,
811+ data = json .dumps (request_body ),
812+ content_type = "application/json" ,
813+ ).json ()
814+ assert len (response ) == 2
815+ assert response [0 ]["purl" ] == "pkg:pypi/microweber/microweber@1.2"
816+ assert response [0 ]["purl" ] == response [1 ]["purl" ]
817+ request_body = {"purl" : "pkg:pypi/microweber/microweber@1.2?foo=bar" }
818+ response = self .csrf_client .post (
819+ "/api/packages/lookup" ,
820+ data = json .dumps (request_body ),
821+ content_type = "application/json" ,
822+ ).json ()
823+ assert len (response ) == 1
824+ assert response [0 ]["purl" ] == "pkg:pypi/microweber/microweber@1.2?foo=bar"
825+ request_body = {"purl" : "pkg:pypi/microweber/microweber@1.2?foo=baz" }
826+ response = self .csrf_client .post (
827+ "/api/packages/lookup" ,
828+ data = json .dumps (request_body ),
829+ content_type = "application/json" ,
830+ ).json ()
831+ assert response == []
0 commit comments