115 lines
3.4 KiB
Python
115 lines
3.4 KiB
Python
import pytest
|
|
import requests
|
|
from unittest.mock import patch, Mock
|
|
from eos_downloader.logics.arista_server import AristaServer
|
|
|
|
import eos_downloader.exceptions
|
|
|
|
from tests.lib.fixtures import xml_path, xml_data
|
|
|
|
@pytest.fixture
|
|
def server():
|
|
return AristaServer(token="testtoken")
|
|
|
|
|
|
def test_authenticate_success(server):
|
|
with patch('requests.post') as mock_post:
|
|
mock_response = Mock()
|
|
mock_response.json.return_value = {
|
|
"status": {"message": "Success"},
|
|
"data": {"session_code": "testsessioncode"}
|
|
}
|
|
mock_post.return_value = mock_response
|
|
|
|
assert server.authenticate() is True
|
|
assert server._session_id is not None
|
|
|
|
|
|
def test_authenticate_invalid_token(server):
|
|
with patch('requests.post') as mock_post:
|
|
mock_response = Mock()
|
|
mock_response.json.return_value = {
|
|
"status": {"message": "Invalid access token"}
|
|
}
|
|
mock_post.return_value = mock_response
|
|
|
|
with pytest.raises(eos_downloader.exceptions.AuthenticationError):
|
|
server.authenticate()
|
|
|
|
|
|
def test_authenticate_expired_token(server):
|
|
with patch('requests.post') as mock_post:
|
|
mock_response = Mock()
|
|
mock_response.json.return_value = {
|
|
"status": {"message": "Access token expired"}
|
|
}
|
|
mock_post.return_value = mock_response
|
|
|
|
with pytest.raises(eos_downloader.exceptions.AuthenticationError):
|
|
server.authenticate()
|
|
|
|
|
|
def test_authenticate_key_error(server):
|
|
with patch('requests.post') as mock_post:
|
|
mock_response = Mock()
|
|
mock_response.json.return_value = {
|
|
"status": {"message": "Success"}
|
|
}
|
|
mock_post.return_value = mock_response
|
|
|
|
assert server.authenticate() is False
|
|
assert server._session_id is None
|
|
|
|
|
|
def test_get_xml_data_success(server, xml_path):
|
|
with patch('requests.post') as mock_post:
|
|
with open(xml_path, 'r') as file:
|
|
xml_content = file.read()
|
|
|
|
mock_response = Mock()
|
|
mock_response.json.return_value = {
|
|
"status": {"message": "Success"},
|
|
"data": {"xml": xml_content},
|
|
}
|
|
mock_post.return_value = mock_response
|
|
|
|
xml_data = server.get_xml_data()
|
|
assert xml_data is not None
|
|
assert (
|
|
xml_data.getroot().tag == "cvpFolderList"
|
|
) # Assuming the root tag in data.xml is 'cvpFolderList'
|
|
|
|
|
|
def test_get_xml_data_key_error(server):
|
|
with patch('requests.post') as mock_post:
|
|
mock_response = Mock()
|
|
mock_response.json.return_value = {}
|
|
mock_post.return_value = mock_response
|
|
|
|
with pytest.raises(KeyError):
|
|
server.get_xml_data()
|
|
|
|
|
|
def test_get_url_success(server):
|
|
with patch('requests.post') as mock_post:
|
|
mock_response = Mock()
|
|
mock_response.json.return_value = {
|
|
"status": {"message": "Success"},
|
|
"data": {"url": "http://example.com/download"},
|
|
}
|
|
mock_post.return_value = mock_response
|
|
|
|
url = server.get_url("remote/file/path")
|
|
assert url == "http://example.com/download"
|
|
|
|
|
|
def test_get_url_no_data(server):
|
|
with patch('requests.post') as mock_post:
|
|
mock_response = Mock()
|
|
mock_response.json.return_value = {
|
|
"status": {"message": "Success"},
|
|
}
|
|
mock_post.return_value = mock_response
|
|
|
|
url = server.get_url("remote/file/path")
|
|
assert url is None
|