122 lines
2.8 KiB
Python
122 lines
2.8 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# type: ignore
|
||
|
from __future__ import annotations
|
||
|
|
||
|
import json
|
||
|
from unittest import mock
|
||
|
|
||
|
from bthlabs_jsonrpc_core import codecs
|
||
|
|
||
|
|
||
|
def test_decode():
|
||
|
# Given
|
||
|
json_codec = codecs.JSONCodec()
|
||
|
|
||
|
# When
|
||
|
result = json_codec.decode('{"spam": true, "eggs": false}')
|
||
|
|
||
|
# Then
|
||
|
expected_result = {
|
||
|
'spam': True,
|
||
|
'eggs': False,
|
||
|
}
|
||
|
assert result == expected_result
|
||
|
|
||
|
|
||
|
@mock.patch.object(codecs.json, 'loads')
|
||
|
def test_decode_decoder_kwargs(mock_json_loads: mock.Mock):
|
||
|
# Given
|
||
|
mock_json_loads.return_value = 'spam'
|
||
|
|
||
|
json_codec = codecs.JSONCodec()
|
||
|
|
||
|
payload = '{"spam": true, "eggs": false}'
|
||
|
fake_json_decoder = mock.Mock(spec=json.JSONDecoder)
|
||
|
fake_object_hook = mock.Mock()
|
||
|
fake_parse_float = mock.Mock()
|
||
|
fake_parse_int = mock.Mock()
|
||
|
fake_parse_constant = mock.Mock()
|
||
|
fake_object_pairs_hook = mock.Mock()
|
||
|
|
||
|
# When
|
||
|
_ = json_codec.decode(
|
||
|
payload,
|
||
|
cls=fake_json_decoder,
|
||
|
object_hook=fake_object_hook,
|
||
|
parse_float=fake_parse_float,
|
||
|
parse_int=fake_parse_int,
|
||
|
parse_constant=fake_parse_constant,
|
||
|
object_pairs_hook=fake_object_pairs_hook,
|
||
|
)
|
||
|
|
||
|
# Then
|
||
|
mock_json_loads.assert_called_once_with(
|
||
|
payload,
|
||
|
cls=fake_json_decoder,
|
||
|
object_hook=fake_object_hook,
|
||
|
parse_float=fake_parse_float,
|
||
|
parse_int=fake_parse_int,
|
||
|
parse_constant=fake_parse_constant,
|
||
|
object_pairs_hook=fake_object_pairs_hook,
|
||
|
)
|
||
|
|
||
|
|
||
|
def test_encode():
|
||
|
# Given
|
||
|
json_codec = codecs.JSONCodec()
|
||
|
|
||
|
# When
|
||
|
result = json_codec.encode({'spam': True, 'eggs': False})
|
||
|
|
||
|
# Then
|
||
|
expected_result = '{"spam": true, "eggs": false}'
|
||
|
assert result == expected_result
|
||
|
|
||
|
|
||
|
@mock.patch.object(codecs.json, 'dumps')
|
||
|
def test_encode_encoder_kwargs(mock_json_dumps: mock.Mock):
|
||
|
# Given
|
||
|
mock_json_dumps.return_value = 'spam'
|
||
|
|
||
|
json_codec = codecs.JSONCodec()
|
||
|
|
||
|
payload = {"spam": True, "eggs": False}
|
||
|
fake_json_encoder = mock.Mock(spec=json.JSONEncoder)
|
||
|
|
||
|
# When
|
||
|
_ = json_codec.encode(
|
||
|
payload,
|
||
|
skipkeys=False,
|
||
|
ensure_ascii=True,
|
||
|
check_circular=True,
|
||
|
allow_nan=True,
|
||
|
cls=fake_json_encoder,
|
||
|
indent=2, separators=(':', ','),
|
||
|
default='DEFAULT',
|
||
|
sort_keys=False,
|
||
|
)
|
||
|
|
||
|
# Then
|
||
|
mock_json_dumps.assert_called_once_with(
|
||
|
payload,
|
||
|
skipkeys=False,
|
||
|
ensure_ascii=True,
|
||
|
check_circular=True,
|
||
|
allow_nan=True,
|
||
|
cls=fake_json_encoder,
|
||
|
indent=2, separators=(':', ','),
|
||
|
default='DEFAULT',
|
||
|
sort_keys=False,
|
||
|
)
|
||
|
|
||
|
|
||
|
def test_get_content_type():
|
||
|
# Given
|
||
|
json_codec = codecs.JSONCodec()
|
||
|
|
||
|
# When
|
||
|
result = json_codec.get_content_type()
|
||
|
|
||
|
# Then
|
||
|
assert result == 'application/json'
|