Skip to content

Commit 839a497

Browse files
committed
chore: update tests
1 parent 03353e9 commit 839a497

2 files changed

Lines changed: 25 additions & 30 deletions

File tree

firebase_admin/fpnv.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -136,15 +136,8 @@ def verify_token(self, token) -> FpnvToken:
136136
137137
Raises:
138138
ValueError: If the token is invalid or malformed.
139-
firebase_admin.exceptions.InvalidArgumentError: If verification fails.
140139
"""
141-
try:
142-
claims = self._verifier.verify(token)
143-
return FpnvToken(claims)
144-
except ValueError as error:
145-
raise InvalidArgumentError(
146-
'Failed to verify token: {0}'.format(error), cause=error
147-
)
140+
return FpnvToken(self._verifier.verify(token))
148141

149142

150143
class _FpnvTokenVerifier:
@@ -237,4 +230,4 @@ class _Validators:
237230
def check_string(cls, label: str, value: Any):
238231
"""Checks if the given value is a string."""
239232
if not isinstance(value, str) or not value:
240-
raise ValueError(f'{label} must be a non-empty string.')
233+
raise ValueError(f'{label} must be a non-empty string.')

tests/test_fpnv.py

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
"""Test cases for the firebase_admin.fpnv module."""
1616

17+
import base64
1718
from unittest import mock
1819

1920
import jwt
@@ -43,25 +44,25 @@
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

5853
class 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

7879
class 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

Comments
 (0)