88"""REANA-Server decorators tests."""
99
1010import json
11- from unittest .mock import Mock , patch
11+ from unittest .mock import Mock , patch , MagicMock
1212
1313from flask import jsonify
1414from reana_db .models import User , UserToken
@@ -31,3 +31,61 @@ def test_signing_required_with_token(user0: User):
3131 mock_endpoint .assert_not_called ()
3232 assert code == 401
3333 assert error ["message" ] == "User has no active tokens"
34+
35+
36+ def test_signin_required_with_jwt (user0 : User ):
37+ """Test `signin_required` with JWT token authentication."""
38+ mock_endpoint = Mock (return_value = (jsonify (message = "Success" ), 200 ))
39+ mock_current_user = Mock ()
40+ mock_current_user .is_authenticated = False
41+ mock_current_user .email = user0 .email
42+
43+ mock_request = Mock ()
44+ mock_request .headers = {"Authorization" : "Bearer token123" }
45+ mock_request .args = {}
46+ mock_request_context = MagicMock ()
47+ mock_request_context .__enter__ .return_value = mock_request
48+
49+ with patch ("reana_server.decorators._get_user_from_jwt" , mock_current_user ):
50+ with patch ("reana_server.decorators.current_user" , mock_current_user ):
51+ with patch ("reana_server.decorators.request" , mock_request ):
52+ decorated_endpoint = signin_required (include_jwt = True )(mock_endpoint )
53+ response , code = decorated_endpoint ()
54+
55+ # Should call the endpoint since authentication succeeded
56+ mock_endpoint .assert_called_once ()
57+ assert code == 200
58+ assert (
59+ json .loads (response .get_data (as_text = True ))["message" ] == "Success"
60+ )
61+
62+
63+ def test_signin_required_with_invalid_jwt (user0 : User ):
64+ """Test `signin_required` with invalid JWT token."""
65+ mock_endpoint = Mock (return_value = (jsonify (message = "Success" ), 200 ))
66+ mock_current_user = Mock ()
67+ mock_current_user .is_authenticated = False
68+ mock_current_user .email = user0 .email
69+
70+ mock_request = Mock ()
71+ mock_request .headers = {"Authorization" : "Bearer invalid_token" }
72+ mock_request .args = {}
73+ mock_request_context = MagicMock ()
74+ mock_request_context .__enter__ .return_value = mock_request
75+
76+ with patch ("reana_server.decorators.current_user" , mock_current_user ):
77+ with patch (
78+ "reana_server.decorators._get_user_from_jwt" ,
79+ side_effect = ValueError ("Invalid token" ),
80+ ):
81+ with patch ("reana_server.decorators.request" , mock_request ):
82+ decorated_endpoint = signin_required (include_jwt = True )(mock_endpoint )
83+ response , code = decorated_endpoint ()
84+
85+ # Should not call the endpoint since authentication failed
86+ mock_endpoint .assert_not_called ()
87+ assert code == 403
88+ assert (
89+ json .loads (response .get_data (as_text = True ))["message" ]
90+ == "Invalid token"
91+ )
0 commit comments