newdwh2021/ecs/crm-datafetch/tests/converter/test_convert_strategy.py
2022-08-23 11:51:26 +09:00

360 lines
9.8 KiB
Python

from collections import OrderedDict
from src.converter.convert_strategy import (BooleanConvertStrategy,
ConvertStrategyFactory,
DatetimeConvertStrategy,
DictConvertStrategy,
FloatConvertStrategy,
IntConvertStrategy,
NoneValueConvertStrategy,
StringConvertStrategy)
class TestConvertStrategyFactory:
def test_create_none(self):
"""
Cases:
引数にnull(None)を指定した場合、NoneValueConvertStrategyインスタンスが返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = ConvertStrategyFactory()
actual = sut.create(None)
# Expects
assert type(actual) == NoneValueConvertStrategy
def test_create_float(self):
"""
Cases:
引数に指数表記を指定した場合、FloatConvertStrategyインスタンスが返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = ConvertStrategyFactory()
actual = sut.create(1.2345678E7)
# Expects
assert type(actual) == FloatConvertStrategy
def test_create_bool_true(self):
"""
Cases:
引数に論理値(True)を指定した場合、BooleanConvertStrategyインスタンスが返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = ConvertStrategyFactory()
actual = sut.create(True)
# Expects
assert type(actual) == BooleanConvertStrategy
def test_create_bool_false(self):
"""
Cases:
引数に論理値(False)を指定した場合、BooleanConvertStrategyインスタンスが返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = ConvertStrategyFactory()
actual = sut.create(False)
# Expects
assert type(actual) == BooleanConvertStrategy
def test_create_datetime(self):
"""
Cases:
引数に文字列かつ日付文字列を指定した場合、DatetimeConvertStrategyインスタンスが返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = ConvertStrategyFactory()
actual = sut.create('2022-06-13T10:15:32.000+0000')
# Expects
assert type(actual) == DatetimeConvertStrategy
def test_create_str(self):
"""
Cases:
引数にSalesforce日付型以外の文字列を指定した場合、StringConvertStrategyインスタンスが返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = ConvertStrategyFactory()
actual = sut.create('test_string')
# Expects
assert type(actual) == StringConvertStrategy
def test_create_int(self):
"""
Cases:
引数に整数を指定した場合、IntConvertStrategyインスタンスが返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = ConvertStrategyFactory()
actual = sut.create(100)
# Expects
assert type(actual) == IntConvertStrategy
def test_create_dict(self):
"""
Cases:
引数に辞書型の値を指定した場合、IntConvertStrategyインスタンスが返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = ConvertStrategyFactory()
actual = sut.create({'key': 'value'})
# Expects
assert type(actual) == DictConvertStrategy
def test_create_ordered_dict_dict(self):
"""
Cases:
引数に辞書型の値を指定した場合、IntConvertStrategyインスタンスが返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = ConvertStrategyFactory()
actual = sut.create(OrderedDict([('key', 'value')]))
# Expects
assert type(actual) == DictConvertStrategy
class TestNoneValueConvertStrategy:
def test_convert_value(self) -> str:
"""
Cases:
引数にnull(None)を指定した場合、''(空文字)が返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = NoneValueConvertStrategy()
actual = sut.convert_value(None)
# Expects
assert actual == ""
class TestBooleanConvertStrategy:
def test_convert_value_true(self) -> bool:
"""
Cases:
引数に論理値(True)を指定した場合、数値(1)が返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = BooleanConvertStrategy()
actual = sut.convert_value(True)
# Expects
assert actual == 1
def test_convert_value_false(self) -> bool:
"""
Cases:
引数に論理値(False)を指定した場合、数値(0)が返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = BooleanConvertStrategy()
actual = sut.convert_value(False)
# Expects
assert actual == 0
class TestDatetimeConvertStrategy:
def test_convert_value(self) -> str:
"""
Cases:
引数に日付文字列を指定した場合、YYYY-MM-DD HH:MM:SSがJSTで返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = DatetimeConvertStrategy()
actual = sut.convert_value('2022-06-13T20:15:32.000+0000')
# Expects
assert actual == "2022-06-14 05:15:32"
class TestFloatConvertStrategy:
def test_convert_value(self) -> int:
"""
Cases:
引数に指数表記を指定した場合、整数で返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = FloatConvertStrategy()
actual = sut.convert_value(1.2345678E7)
# Expects
assert actual == 12345678
class TestIntConvertStrategy:
def test_convert_value(self):
"""
Cases:
引数に整数を指定した場合、加工されず整数が返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = IntConvertStrategy()
actual = sut.convert_value(100)
# Expects
assert actual == 100
class TestStringConvertStrategy:
def test_convert_value(self):
"""
Cases:
引数に文字列を指定した場合、加工されず文字列が返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = StringConvertStrategy()
actual = sut.convert_value('テストデータ')
# Expects
assert actual == 'テストデータ'
class TestDictConvertStrategy:
def test_convert_value_dict(self):
"""
Cases:
引数に辞書型のデータを指定した場合、JSONの文字列が返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = DictConvertStrategy()
actual = sut.convert_value({'テストデータキー': 'テストデータバリュー'})
# Expects
assert actual == '{"テストデータキー": "テストデータバリュー"}'
def test_convert_value_dict_in_line_break(self):
"""
Cases:
引数に辞書型のデータを指定した場合、JSONの文字列が返ってくること(バリューに改行を含む)
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = DictConvertStrategy()
actual = sut.convert_value({'テストデータキー': 'テスト\nデータ\nバリュー'})
# Expects
assert actual == '{"テストデータキー": "テスト\\nデータ\\nバリュー"}'
def test_convert_value_ordered_dict(self):
"""
Cases:
引数に整列された辞書型のデータを指定した場合、JSONの文字列が返ってくること
Arranges:
- なし
Expects:
- 戻り値が、期待値と一致する
"""
# Act
sut = DictConvertStrategy()
actual = sut.convert_value(OrderedDict(
[('テストデータキー', 'テストデータバリュー')]
))
# Expects
assert actual == '{"テストデータキー": "テストデータバリュー"}'