Skip to content

Commit

Permalink
Ensure Phone: change parameter service mock to DummyParameterService
Browse files Browse the repository at this point in the history
  • Loading branch information
Łukasz Żukowski committed May 5, 2020
1 parent 86fbfac commit 9b412c0
Showing 1 changed file with 31 additions and 17 deletions.
48 changes: 31 additions & 17 deletions code/ensure_phone/tests.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,40 @@
from typing import Dict, NewType, Text
from unittest import mock
from unittest.mock import call

import pytest

from phone_provider import PhoneProvider


Country = NewType('Country', Text)
Phone = NewType('Phone', Text)


class DummyParameterService:
def __init__(self, country_phones: Dict[Country, Phone]):
self._phones = {
f'default_phone_for_domestic_{country}': phone
for country, phone in country_phones.items()
}

def get(self, key: Text) -> Text:
phone = self._phones.get(key)
if not phone:
raise FileNotFoundError(key)
return phone


@pytest.fixture
def get_parameter_service():
return mock.Mock()
def gb_default_phone():
return '07346923435'


@pytest.fixture
def service(get_parameter_service):
return PhoneProvider(get_parameter_service)
def service(gb_default_phone):
parameter_service = DummyParameterService(
{Country('GB'): Phone(gb_default_phone)}
)
return PhoneProvider(parameter_service.get)


@pytest.fixture
Expand All @@ -27,18 +48,14 @@ def shipment():
None, '', '344546234', '0 44 72453', '+44 072453', '+44472453',
])
def test_providing_phone_for_domestic_shipment(
phone, service, get_parameter_service, shipment,
phone, service, shipment, gb_default_phone,
):
expected_phone = '07346923435'
get_parameter_service.return_value = '07346923435'
shipment.shipping_address.phone = phone
assert shipment.is_domestic is True

service.provide(shipment, 'GB')

assert shipment.shipping_address.phone == expected_phone
calls = get_parameter_service.call_args_list
assert calls == [call('default_phone_for_domestic_GB')]
assert shipment.shipping_address.phone == gb_default_phone


@pytest.mark.parametrize("phone, expected_phone", [
Expand All @@ -48,24 +65,21 @@ def test_providing_phone_for_domestic_shipment(
('0 044 72453', '072453'),
])
def test_not_providing_phone_for_domestic_shipment(
phone, expected_phone, service, get_parameter_service, shipment,
phone, expected_phone, service, shipment,
):
shipment.shipping_address.phone = phone
assert shipment.is_domestic is True

service.provide(shipment, 'GB')

assert shipment.shipping_address.phone == expected_phone
get_parameter_service.assert_not_called()


def test_not_providing_phone_for_domestic_shipment_if_no_default_set(
service, get_parameter_service, shipment):
get_parameter_service.side_effect = FileNotFoundError
service, shipment,
):
shipment.shipping_address.phone = None

service.provide(shipment, 'PL')

assert shipment.shipping_address.phone is None
calls = get_parameter_service.call_args_list
assert calls == [call('default_phone_for_domestic_PL')]

0 comments on commit 9b412c0

Please sign in to comment.