Skip to content

Commit 02f5f74

Browse files
committed
add unit tests
1 parent 3e328ce commit 02f5f74

1 file changed

Lines changed: 49 additions & 1 deletion

File tree

tests/test_app_check.py

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from jwt import PyJWK, InvalidAudienceError, InvalidIssuerError
2020
from jwt import ExpiredSignatureError, InvalidSignatureError
2121
import firebase_admin
22-
from firebase_admin import app_check
22+
from firebase_admin import app_check, exceptions
2323
from tests import testutils
2424

2525
NON_STRING_ARGS = [[], tuple(), {}, True, False, 1, 0]
@@ -273,3 +273,51 @@ def test_verify_token_with_incorrect_issuer_raises_error(self, mocker):
273273

274274
expected = 'Token does not contain the correct "iss" (issuer).'
275275
assert str(excinfo.value) == expected
276+
277+
def test_verify_token_with_consume_true_not_consumed(self, mocker):
278+
mocker.patch("jwt.decode", return_value=JWT_PAYLOAD_SAMPLE)
279+
mocker.patch("jwt.PyJWKClient.get_signing_key_from_jwt", return_value=PyJWK(signing_key))
280+
mocker.patch("jwt.get_unverified_header", return_value=JWT_PAYLOAD_SAMPLE.get("headers"))
281+
app = firebase_admin.get_app()
282+
app_check_service = app_check._get_app_check_service(app)
283+
mock_body = mocker.patch.object(app_check_service._http_client, "body", return_value={"alreadyConsumed": False})
284+
285+
payload = app_check.verify_token("encoded", app=app, consume=True)
286+
expected = JWT_PAYLOAD_SAMPLE.copy()
287+
expected["app_id"] = APP_ID
288+
expected["already_consumed"] = False
289+
assert payload == expected
290+
291+
expected_url = f"https://firebaseappcheck.googleapis.com/v1/projects/{PROJECT_ID}:verifyAppCheckToken"
292+
mock_body.assert_called_once_with("post", expected_url, json={"app_check_token": "encoded"})
293+
294+
def test_verify_token_with_consume_true_already_consumed(self, mocker):
295+
mocker.patch("jwt.decode", return_value=JWT_PAYLOAD_SAMPLE)
296+
mocker.patch("jwt.PyJWKClient.get_signing_key_from_jwt", return_value=PyJWK(signing_key))
297+
mocker.patch("jwt.get_unverified_header", return_value=JWT_PAYLOAD_SAMPLE.get("headers"))
298+
app = firebase_admin.get_app()
299+
app_check_service = app_check._get_app_check_service(app)
300+
mock_body = mocker.patch.object(app_check_service._http_client, "body", return_value={"alreadyConsumed": True})
301+
302+
payload = app_check.verify_token("encoded", app=app, consume=True)
303+
expected = JWT_PAYLOAD_SAMPLE.copy()
304+
expected["app_id"] = APP_ID
305+
expected["already_consumed"] = True
306+
assert payload == expected
307+
308+
expected_url = f"https://firebaseappcheck.googleapis.com/v1/projects/{PROJECT_ID}:verifyAppCheckToken"
309+
mock_body.assert_called_once_with("post", expected_url, json={"app_check_token": "encoded"})
310+
311+
def test_verify_token_with_consume_true_backend_error(self, mocker):
312+
import requests
313+
mocker.patch("jwt.decode", return_value=JWT_PAYLOAD_SAMPLE)
314+
mocker.patch("jwt.PyJWKClient.get_signing_key_from_jwt", return_value=PyJWK(signing_key))
315+
mocker.patch("jwt.get_unverified_header", return_value=JWT_PAYLOAD_SAMPLE.get("headers"))
316+
app = firebase_admin.get_app()
317+
app_check_service = app_check._get_app_check_service(app)
318+
319+
req_exc = requests.exceptions.RequestException("Backend error")
320+
mocker.patch.object(app_check_service._http_client, "body", side_effect=req_exc)
321+
322+
with pytest.raises(exceptions.FirebaseError):
323+
app_check.verify_token("encoded", app=app, consume=True)

0 commit comments

Comments
 (0)