1
0
This commit is contained in:
2024-01-15 20:20:10 +00:00
parent c75ea4ea9d
commit 38cd64ea9a
87 changed files with 3946 additions and 2040 deletions

View File

@@ -1,21 +1,26 @@
# -*- coding: utf-8 -*-
# type: ignore
from __future__ import annotations
import json
from unittest import mock
from bthlabs_jsonrpc_core import exceptions, serializer
import pytest
from bthlabs_jsonrpc_aiohttp import executor
from tests.fixtures import AsyncJSONCodec
@pytest.fixture
def fake_can_call():
def fake_can_call() -> mock.Mock:
result = mock.AsyncMock()
result.return_value = True
return result
def test_init(fake_request, fake_can_call):
def test_init(fake_request: mock.Mock, fake_can_call: mock.Mock):
# When
result = executor.AioHttpExecutor(fake_request, fake_can_call)
@@ -24,7 +29,7 @@ def test_init(fake_request, fake_can_call):
assert result.can_call == fake_can_call
async def test_list_methods(fake_request, fake_can_call):
async def test_list_methods(fake_request: mock.Mock, fake_can_call: mock.Mock):
# Given
the_executor = executor.AioHttpExecutor(fake_request, fake_can_call)
@@ -35,9 +40,10 @@ async def test_list_methods(fake_request, fake_can_call):
assert result == ['system.list_methods']
async def test_deserialize_data(fake_request, fake_can_call):
async def test_deserialize_data(fake_request: mock.Mock,
fake_can_call: mock.Mock):
# Given
fake_request.json.return_value = 'spam'
fake_request.text.return_value = '"spam"'
the_executor = executor.AioHttpExecutor(fake_request, fake_can_call)
@@ -48,9 +54,28 @@ async def test_deserialize_data(fake_request, fake_can_call):
assert result == 'spam'
async def test_deserialize_data_error(fake_request, fake_can_call):
async def test_deserialize_data_async_codec_decode(fake_request: mock.Mock,
async_json_codec: AsyncJSONCodec,
fake_can_call: mock.Mock):
# Given
fake_request.json.side_effect = RuntimeError('I HAZ FAIL')
fake_request.text.return_value = '"spam"'
the_executor = executor.AioHttpExecutor(
fake_request, fake_can_call, codec=async_json_codec,
)
# When
result = await the_executor.deserialize_data(fake_request)
# Then
assert result == 'spam'
async def test_deserialize_data_error(fake_request: mock.Mock,
fake_can_call: mock.Mock):
# Given
error = RuntimeError('I HAZ FAIL')
fake_request.text.side_effect = error
the_executor = executor.AioHttpExecutor(fake_request, fake_can_call)
@@ -59,11 +84,12 @@ async def test_deserialize_data_error(fake_request, fake_can_call):
_ = await the_executor.deserialize_data(fake_request)
except Exception as exception:
assert isinstance(exception, exceptions.JSONRPCParseError)
assert exception.__cause__ == error
else:
assert False, 'No exception raised?'
def test_enrich_args(fake_request, fake_can_call):
def test_enrich_args(fake_request: mock.Mock, fake_can_call: mock.Mock):
# Given
the_executor = executor.AioHttpExecutor(fake_request, fake_can_call)
@@ -74,7 +100,7 @@ def test_enrich_args(fake_request, fake_can_call):
assert result == [fake_request, 'spam']
async def test_before_call(fake_request, fake_can_call):
async def test_before_call(fake_request: mock.Mock, fake_can_call: mock.Mock):
# Given
the_executor = executor.AioHttpExecutor(fake_request, fake_can_call)
@@ -87,7 +113,8 @@ async def test_before_call(fake_request, fake_can_call):
)
async def test_before_call_access_denied(fake_request, fake_can_call):
async def test_before_call_access_denied(fake_request: mock.Mock,
fake_can_call: mock.Mock):
# Given
fake_can_call.return_value = False
@@ -103,7 +130,9 @@ async def test_before_call_access_denied(fake_request, fake_can_call):
@mock.patch('bthlabs_jsonrpc_core.registry.MethodRegistry.shared_registry')
async def test_execute(mock_shared_registry, fake_request, fake_can_call):
async def test_execute(mock_shared_registry: mock.Mock,
fake_request: mock.Mock,
fake_can_call: mock.Mock):
# Given
fake_method_registry = mock.Mock()
fake_method_registry.get_handler.return_value = None
@@ -129,7 +158,7 @@ async def test_execute(mock_shared_registry, fake_request, fake_can_call):
},
]
fake_request.json.return_value = batch
fake_request.text.return_value = json.dumps(batch)
the_executor = executor.AioHttpExecutor(fake_request, fake_can_call)