1414
1515"""Test cases for the firebase_admin.fpnv module."""
1616
17+ import base64
1718from unittest import mock
1819
1920import jwt
4344 "other" : 'other'
4445}
4546
46-
47- @pytest .fixture
48- def app ():
49- cred = testutils .MockCredential ()
50- return firebase_admin .initialize_app (cred , {'projectId' : _PROJECT_ID })
51-
52-
5347@pytest .fixture
54- def client (app ):
48+ def client ():
49+ app = firebase_admin .get_app ()
5550 return fpnv .client (app )
5651
5752
5853class TestCommon :
54+ @classmethod
55+ def setup_class (cls ):
56+ cred = testutils .MockCredential ()
57+ firebase_admin .initialize_app (cred , {'projectId' : _PROJECT_ID })
58+
59+
5960 @classmethod
6061 def teardown_class (cls ):
6162 testutils .cleanup_apps ()
6263
6364
64- class TestFpnvToken ( TestCommon ) :
65+ class TestFpnvToken :
6566 def test_properties (self ):
6667 token = fpnv .FpnvToken (_MOCK_PAYLOAD )
6768
@@ -77,14 +78,8 @@ def test_properties(self):
7778
7879class TestFpnvClient (TestCommon ):
7980
80- def test_client_no_app (self ):
81- with mock .patch ('firebase_admin._utils.get_app_service' ) as mock_get_service :
82- fpnv .client ()
83- mock_get_service .assert_called_once ()
84- with pytest .raises (ValueError ):
85- fpnv .client ()
86-
87- def test_client (self , app ):
81+ def test_client (self ):
82+ app = firebase_admin .get_app ()
8883 client = fpnv .client (app )
8984 assert isinstance (client , fpnv .FpnvClient )
9085 assert client ._project_id == _PROJECT_ID
@@ -110,7 +105,7 @@ def test_client_explicit_app(self):
110105 assert isinstance (client , fpnv .FpnvClient )
111106
112107
113- class TestVerifyToken :
108+ class TestVerifyToken ( TestCommon ) :
114109
115110 @mock .patch ('jwt.PyJWKClient' )
116111 @mock .patch ('jwt.decode' )
@@ -125,6 +120,7 @@ def test_verify_token_success(self, mock_header, mock_decode, mock_jwks_cls, cli
125120 mock_signing_key = mock .Mock ()
126121 mock_signing_key .key = _PUBLIC_KEY
127122 mock_jwks_instance .get_signing_key_from_jwt .return_value = mock_signing_key
123+ client ._verifier ._jwks_client = mock_jwks_instance
128124
129125 mock_decode .return_value = _MOCK_PAYLOAD
130126
@@ -146,9 +142,11 @@ def test_verify_token_success(self, mock_header, mock_decode, mock_jwks_cls, cli
146142 )
147143
148144 @mock .patch ('jwt.get_unverified_header' )
149- def test_verify_token_no_kid (self , mock_header , client ):
145+ def test_verify_token_no_kid (self , mock_header ):
146+ app = firebase_admin .get_app ()
147+ client = fpnv .client (app )
150148 mock_header .return_value = {'typ' : 'JWT' , 'alg' : 'ES256' } # Missing kid
151- with pytest .raises (ValueError , match = "no 'kid' claim" ):
149+ with pytest .raises (ValueError , match = "FPNV has no 'kid' claim. " ):
152150 client .verify_token ('token' )
153151
154152 @mock .patch ('jwt.get_unverified_header' )
@@ -176,6 +174,8 @@ def test_verify_token_expired(self, mock_header, mock_decode, mock_jwks_cls, cli
176174 mock_header .return_value = {'kid' : 'k' , 'typ' : 'JWT' , 'alg' : 'ES256' }
177175 mock_jwks_instance = mock_jwks_cls .return_value
178176 mock_jwks_instance .get_signing_key_from_jwt .return_value .key = _PUBLIC_KEY
177+ client ._verifier ._jwks_client = mock_jwks_instance
178+
179179
180180 # Simulate ExpiredSignatureError
181181 mock_decode .side_effect = jwt .ExpiredSignatureError ("Expired" )
@@ -190,6 +190,7 @@ def test_verify_token_invalid_audience(self, mock_header, mock_decode, mock_jwks
190190 mock_header .return_value = {'kid' : 'k' , 'typ' : 'JWT' , 'alg' : 'ES256' }
191191 mock_jwks_instance = mock_jwks_cls .return_value
192192 mock_jwks_instance .get_signing_key_from_jwt .return_value .key = _PUBLIC_KEY
193+ client ._verifier ._jwks_client = mock_jwks_instance
193194
194195 # Simulate InvalidAudienceError
195196 mock_decode .side_effect = jwt .InvalidAudienceError ("Wrong Aud" )
@@ -204,9 +205,10 @@ def test_verify_token_invalid_issuer(self, mock_header, mock_decode, mock_jwks_c
204205 mock_header .return_value = {'kid' : 'k' , 'typ' : 'JWT' , 'alg' : 'ES256' }
205206 mock_jwks_instance = mock_jwks_cls .return_value
206207 mock_jwks_instance .get_signing_key_from_jwt .return_value .key = _PUBLIC_KEY
208+ client ._verifier ._jwks_client = mock_jwks_instance
207209
208210 # Simulate InvalidIssuerError
209211 mock_decode .side_effect = jwt .InvalidIssuerError ("Wrong Iss" )
210212
211213 with pytest .raises (ValueError , match = "incorrect \" iss\" " ):
212- client .verify_token ('token' )
214+ client .verify_token ('token' )
0 commit comments