mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-01 04:08:30 +00:00
* feat: set basic structure deploy commands * feat: add first iteration of CLI Deploy * feat: some minor refactor * feat: Add api, Deploy command and update cli * feat: Remove test token * feat: add auth0 lib, update cli and improve code * feat: update code and decouple auth * fix: parts of the code * feat: Add token manager to encrypt access token and get and save tokens * feat: add audience to costants * feat: add subsystem saving credentials and remove comment of type hinting * feat: add get crew version to send on header of request * feat: add docstrings * feat: add tests for authentication module * feat: add tests for utils * feat: add unit tests for cl * feat: add tests * feat: add deploy man tests * feat: fix type checking issue * feat: rename tests to pass ci * feat: fix pr issues * feat: fix get crewai versoin * fix: add timeout for tests.yml
95 lines
3.6 KiB
Python
95 lines
3.6 KiB
Python
import unittest
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
import requests
|
|
from crewai.cli.authentication.main import AuthenticationCommand
|
|
|
|
|
|
class TestAuthenticationCommand(unittest.TestCase):
|
|
def setUp(self):
|
|
self.auth_command = AuthenticationCommand()
|
|
|
|
@patch("crewai.cli.authentication.main.requests.post")
|
|
def test_get_device_code(self, mock_post):
|
|
mock_response = MagicMock()
|
|
mock_response.json.return_value = {
|
|
"device_code": "123456",
|
|
"user_code": "ABCDEF",
|
|
"verification_uri_complete": "https://example.com",
|
|
"interval": 5,
|
|
}
|
|
mock_post.return_value = mock_response
|
|
|
|
device_code_data = self.auth_command._get_device_code()
|
|
|
|
self.assertEqual(device_code_data["device_code"], "123456")
|
|
self.assertEqual(device_code_data["user_code"], "ABCDEF")
|
|
self.assertEqual(
|
|
device_code_data["verification_uri_complete"], "https://example.com"
|
|
)
|
|
self.assertEqual(device_code_data["interval"], 5)
|
|
|
|
@patch("crewai.cli.authentication.main.console.print")
|
|
@patch("crewai.cli.authentication.main.webbrowser.open")
|
|
def test_display_auth_instructions(self, mock_open, mock_print):
|
|
device_code_data = {
|
|
"verification_uri_complete": "https://example.com",
|
|
"user_code": "ABCDEF",
|
|
}
|
|
|
|
self.auth_command._display_auth_instructions(device_code_data)
|
|
|
|
mock_print.assert_any_call("1. Navigate to: ", "https://example.com")
|
|
mock_print.assert_any_call("2. Enter the following code: ", "ABCDEF")
|
|
mock_open.assert_called_once_with("https://example.com")
|
|
|
|
@patch("crewai.cli.authentication.main.requests.post")
|
|
@patch("crewai.cli.authentication.main.validate_token")
|
|
@patch("crewai.cli.authentication.main.console.print")
|
|
def test_poll_for_token_success(self, mock_print, mock_validate_token, mock_post):
|
|
mock_response = MagicMock()
|
|
mock_response.status_code = 200
|
|
mock_response.json.return_value = {
|
|
"id_token": "TOKEN",
|
|
"access_token": "ACCESS_TOKEN",
|
|
}
|
|
mock_post.return_value = mock_response
|
|
|
|
self.auth_command._poll_for_token({"device_code": "123456"})
|
|
|
|
mock_validate_token.assert_called_once_with("TOKEN")
|
|
mock_print.assert_called_once_with("\nWelcome to CrewAI+ !!", style="green")
|
|
|
|
@patch("crewai.cli.authentication.main.requests.post")
|
|
@patch("crewai.cli.authentication.main.console.print")
|
|
def test_poll_for_token_error(self, mock_print, mock_post):
|
|
mock_response = MagicMock()
|
|
mock_response.status_code = 400
|
|
mock_response.json.return_value = {
|
|
"error": "invalid_request",
|
|
"error_description": "Invalid request",
|
|
}
|
|
mock_post.return_value = mock_response
|
|
|
|
with self.assertRaises(requests.HTTPError):
|
|
self.auth_command._poll_for_token({"device_code": "123456"})
|
|
|
|
mock_print.assert_not_called()
|
|
|
|
@patch("crewai.cli.authentication.main.requests.post")
|
|
@patch("crewai.cli.authentication.main.console.print")
|
|
def test_poll_for_token_timeout(self, mock_print, mock_post):
|
|
mock_response = MagicMock()
|
|
mock_response.status_code = 400
|
|
mock_response.json.return_value = {
|
|
"error": "authorization_pending",
|
|
"error_description": "Authorization pending",
|
|
}
|
|
mock_post.return_value = mock_response
|
|
|
|
self.auth_command._poll_for_token({"device_code": "123456", "interval": 0.01})
|
|
|
|
mock_print.assert_called_once_with(
|
|
"Timeout: Failed to get the token. Please try again.", style="bold red"
|
|
)
|