def test_request_block_whenIndexIsLatest_thenRequestsLatestBlockFromNode(self):
mock_response = Mock()
mock_response.status_code = 200
mock_response.json.return_value = '{"nonce": 12345, "index": 35, "transactions": [], "timestamp": 1234567890, "current_hash": "current_hash", "previous_hash": "previous_hash"}'
with patch.object(FullNode, '__init__', return_value=None) as patched_init, \
patch("crankycoin.node.Block.current_hash", new_callable=PropertyMock) as patched_block_current_hash, \
patch("crankycoin.requests.get", return_value=mock_response) as patched_requests:
patched_block_current_hash.return_value = "current_hash"
node = FullNode("127.0.0.1", "reward_address")
block = node.request_block("127.0.0.2", "30013", "latest")
self.assertIsNotNone(block)
self.assertEqual(block.index, 35)
self.assertEqual(block.transactions, [])
self.assertEqual(block.previous_hash, "previous_hash")
self.assertEqual(block.current_hash, "current_hash")
self.assertEqual(block.timestamp, 1234567890)
self.assertEqual(block.nonce, 12345)
patched_requests.assert_called_once_with('http://127.0.0.2:30013/block/latest')
python类PropertyMock()的实例源码
def test_request_block_whenIndexIsNumeric_thenRequestsCorrectBlockFromNode(self):
mock_response = Mock()
mock_response.status_code = 200
mock_response.json.return_value = '{"nonce": 12345, "index": 29, "transactions": [], "timestamp": 1234567890, "current_hash": "current_hash", "previous_hash": "previous_hash"}'
with patch.object(FullNode, '__init__', return_value=None) as patched_init, \
patch("crankycoin.node.Block.current_hash", new_callable=PropertyMock) as patched_block_current_hash, \
patch("crankycoin.requests.get", return_value=mock_response) as patched_requests:
patched_block_current_hash.return_value = "current_hash"
node = FullNode("127.0.0.1", "reward_address")
block = node.request_block("127.0.0.2", "30013", 29)
self.assertIsNotNone(block)
self.assertEqual(block.index, 29)
self.assertEqual(block.transactions, [])
self.assertEqual(block.previous_hash, "previous_hash")
self.assertEqual(block.current_hash, "current_hash")
self.assertEqual(block.timestamp, 1234567890)
self.assertEqual(block.nonce, 12345)
patched_requests.assert_called_once_with('http://127.0.0.2:30013/block/29')
def test_delete_slot(slot):
with patch.object(psycopg2.ProgrammingError, 'pgcode',
new_callable=PropertyMock,
return_value=psycopg2.errorcodes.UNDEFINED_OBJECT):
pe = psycopg2.ProgrammingError()
slot._repl_cursor.drop_replication_slot = Mock(side_effect=pe)
slot.delete_slot()
slot._repl_cursor.drop_replication_slot.assert_called_with('pg2kinesis')
with patch.object(psycopg2.ProgrammingError, 'pgcode',
new_callable=PropertyMock,
return_value=-1):
pe = psycopg2.ProgrammingError()
slot._repl_cursor.create_replication_slot = Mock(side_effect=pe)
with pytest.raises(psycopg2.ProgrammingError) as e_info:
slot.delete_slot()
slot._repl_cursor.drop_replication_slot.assert_called_with('pg2kinesis')
assert e_info.value.pgcode == -1
slot._repl_cursor.create_replication_slot = Mock(side_effect=Exception)
with pytest.raises(Exception):
slot.delete_slot()
slot._repl_cursor.drop_replication_slot.assert_called_with('pg2kinesis')
def test_rackspace_uploader_lookup_url(self, mock1, mock2):
"""Test RACKSPACE UPLOADER lookup returns a valid link."""
uri = 'https://rackspace.com'
filename = 'test.jpg'
with patch('pybossa.uploader.rackspace.pyrax.cloudfiles') as mycf:
cdn_enabled_mock = PropertyMock(return_value=True)
type(fake_container).cdn_enabled = cdn_enabled_mock
mycf.get_container.return_value = fake_container
u = RackspaceUploader()
u.init_app(self.flask_app)
res = u._lookup_url('rackspace', {'filename': filename,
'container': 'user_3'})
expected_url = "%s/%s" % (uri, filename)
err_msg = "We should get the following URL: %s" % expected_url
assert res == expected_url, err_msg
def test_rackspace_uploader_lookup_url_enable_cdn(self, mock1, mock2):
"""Test RACKSPACE UPLOADER lookup enables CDN for non enabled CDN."""
filename = 'test.jpg'
with patch('pybossa.uploader.rackspace.pyrax.cloudfiles') as mycf:
cdn_enabled_mock = PropertyMock(return_value=False)
type(fake_container).cdn_enabled = cdn_enabled_mock
mycf.get_container.return_value = fake_container
u = RackspaceUploader()
u.init_app(self.flask_app)
res = u._lookup_url('rackspace', {'filename': filename,
'container': 'user_3'})
url = 'https://rackspace.com/test.jpg'
err_msg = "We should get the %s but we got %s " % (url, res)
assert res == url, err_msg
calls = [call.make_public()]
fake_container.assert_has_calls(calls, any_order=True)
def test_create_existing_folder_exist_ok():
folder = Folder({})
new_folder_url = ('https://files.osf.io/v1/resources/9zpcy/providers/' +
'osfstorage/foo123/?kind=folder')
folder._new_folder_url = new_folder_url
folder._put = MagicMock(return_value=FakeResponse(409, None))
with patch.object(Folder, 'folders',
new_callable=PropertyMock) as mock_folder:
mock_folder.return_value = [MockFolder('foobar'), MockFolder('fudge')]
existing_folder = folder.create_folder('foobar', exist_ok=True)
assert existing_folder.name == 'foobar'
folder._put.assert_called_once_with(new_folder_url,
params={'name': 'foobar'})
def test():
# We'll add no project file, so the only sources that should
# be fond are VUnit's files
it.assertIn('vunit', sys.modules)
project_filename = p.join(TEST_CONFIG_PARSER_SUPPORT_PATH,
'builder_only_project.prj')
with mock.patch('hdlcc.builders.MSim.file_types',
new_callable=mock.PropertyMock,
return_value=('vhdl', )):
parser = ConfigParser(project_filename)
sources = parser.getSources()
vunit_files = 0
for source in sources:
if 'vunit' in source.filename.lower():
vunit_files += 1
it.assertEqual(len(sources), vunit_files,
"We should only find VUnit files")
# Check that we find no verilog or systemverilog files
for filetype in ('verilog', 'systemverilog'):
it.assertNotIn(filetype, [x.filetype for x in sources],
"We should only find VUnit VHDL files")
def test_init_T4A(mocker, rats_response, max_send, max_recv, result):
clf = nfc.ContactlessFrontend()
mocker.patch.object(clf, 'exchange', autospec=True)
mocker.patch('nfc.ContactlessFrontend.max_send_data_size',
new_callable=mock.PropertyMock).return_value = max_send
mocker.patch('nfc.ContactlessFrontend.max_recv_data_size',
new_callable=mock.PropertyMock).return_value = max_recv
target = nfc.clf.RemoteTarget("106A")
target.sens_res = HEX("4403")
target.sel_res = HEX("20")
target.sdd_res = HEX("04832F9A272D80")
rats_command = 'E070' if max_recv < 256 else 'E080'
clf.exchange.return_value = HEX(rats_response)
tag = nfc.tag.activate(clf, target)
clf.exchange.assert_called_once_with(HEX(rats_command), 0.03)
assert isinstance(tag, nfc.tag.tt4.Type4Tag)
assert str(tag) == result
def test_init_T4B(mocker, sensb_res, max_send, max_recv, result):
clf = nfc.ContactlessFrontend()
mocker.patch.object(clf, 'exchange', autospec=True)
mocker.patch('nfc.ContactlessFrontend.max_send_data_size',
new_callable=mock.PropertyMock).return_value = max_send
mocker.patch('nfc.ContactlessFrontend.max_recv_data_size',
new_callable=mock.PropertyMock).return_value = max_recv
target = nfc.clf.RemoteTarget("106B")
target.sensb_res = HEX(sensb_res)
attrib_cmd = '1D30702A1C' + ('00070100' if max_recv < 256 else '00080100')
clf.exchange.return_value = HEX('00')
tag = nfc.tag.activate(clf, target)
clf.exchange.assert_called_once_with(HEX(attrib_cmd), 0.03)
assert isinstance(tag, nfc.tag.tt4.Type4Tag)
assert str(tag) == result
def setUp(self):
plugin = 'neutron.tests.unit.extensions.test_l3.TestNoL3NatPlugin'
l3_plugin = ('networking_ovn.l3.l3_ovn.OVNL3RouterPlugin')
service_plugins = {'l3_plugin_name': l3_plugin}
# For these tests we need to enable overlapping ips
cfg.CONF.set_default('allow_overlapping_ips', True)
cfg.CONF.set_default('max_routes', 3)
ext_mgr = test_extraroute.ExtraRouteTestExtensionManager()
super(test_l3.L3BaseForIntTests, self).setUp(
plugin=plugin, ext_mgr=ext_mgr,
service_plugins=service_plugins)
patcher = mock.patch(
'networking_ovn.l3.l3_ovn.OVNL3RouterPlugin._ovn',
new_callable=mock.PropertyMock,
return_value=fakes.FakeOvsdbNbOvnIdl())
patcher.start()
self.setup_notification_driver()
# TODO(rtheis): Skip the following test cases since they are for
# L3 service plugins that support L3 agent RPC. These tests should
# be refactored in neutron.
def setUp(self):
video_proto = VideoProto()
video_proto.veda_id = 'XXXXXXXX2014-V00TEST'
self.upload_filepath = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
'test_files',
'OVTESTFILE_01.mp4'
)
with patch.object(Hotstore, '_READ_AUTH', PropertyMock(return_value=lambda: CONFIG_DATA)):
self.hotstore = Hotstore(
video_object=video_proto,
upload_filepath=self.upload_filepath,
video_proto=video_proto
)
# do s3 mocking
mock = mock_s3_deprecated()
mock.start()
conn = S3Connection()
conn.create_bucket(CONFIG_DATA['veda_s3_hotstore_bucket'])
self.addCleanup(mock.stop)
def test_worker_thread_transfer():
u = ops.Uploader(mock.MagicMock(), mock.MagicMock(), mock.MagicMock())
u._transfer_queue.put(
(mock.MagicMock, mock.MagicMock, mock.MagicMock, mock.MagicMock)
)
u._transfer_queue.put(
(mock.MagicMock, mock.MagicMock, mock.MagicMock, mock.MagicMock)
)
u._process_transfer = mock.MagicMock()
u._process_transfer.side_effect = [None, Exception()]
with mock.patch(
'blobxfer.operations.upload.Uploader.termination_check',
new_callable=mock.PropertyMock) as patched_tc:
patched_tc.side_effect = [False, False, True]
u._worker_thread_transfer()
assert u._process_transfer.call_count == 2
assert len(u._exceptions) == 1
def test_worker_thread_upload(ts):
u = ops.Uploader(mock.MagicMock(), mock.MagicMock(), mock.MagicMock())
u._general_options.concurrency.transfer_threads = 1
u._transfer_set = mock.MagicMock()
u._transfer_set.__len__.side_effect = [5, 0, 0, 0]
u._upload_queue.put(mock.MagicMock)
u._upload_queue.put(mock.MagicMock)
u._process_upload_descriptor = mock.MagicMock()
u._process_upload_descriptor.side_effect = [None, Exception()]
with mock.patch(
'blobxfer.operations.upload.Uploader.termination_check',
new_callable=mock.PropertyMock) as patched_tc:
patched_tc.side_effect = [False, False, False, False, True]
u._worker_thread_upload()
assert u._process_upload_descriptor.call_count == 2
assert len(u._exceptions) == 1
def test_submit_run(self, mock_requests):
mock_requests.codes.ok = 200
mock_requests.post.return_value.json.return_value = {'run_id': '1'}
status_code_mock = mock.PropertyMock(return_value=200)
type(mock_requests.post.return_value).status_code = status_code_mock
json = {
'notebook_task': NOTEBOOK_TASK,
'new_cluster': NEW_CLUSTER
}
run_id = self.hook.submit_run(json)
self.assertEquals(run_id, '1')
mock_requests.post.assert_called_once_with(
submit_run_endpoint(HOST),
json={
'notebook_task': NOTEBOOK_TASK,
'new_cluster': NEW_CLUSTER,
},
auth=(LOGIN, PASSWORD),
headers=USER_AGENT_HEADER,
timeout=self.hook.timeout_seconds)
def test_get_run_state(self, mock_requests):
mock_requests.codes.ok = 200
mock_requests.get.return_value.json.return_value = GET_RUN_RESPONSE
status_code_mock = mock.PropertyMock(return_value=200)
type(mock_requests.get.return_value).status_code = status_code_mock
run_state = self.hook.get_run_state(RUN_ID)
self.assertEquals(run_state, RunState(
LIFE_CYCLE_STATE,
RESULT_STATE,
STATE_MESSAGE))
mock_requests.get.assert_called_once_with(
get_run_endpoint(HOST),
json={'run_id': RUN_ID},
auth=(LOGIN, PASSWORD),
headers=USER_AGENT_HEADER,
timeout=self.hook.timeout_seconds)
def test_setup_endpoint(self):
self.patch_object(trove.TroveCharm, 'service_name',
new_callable=mock.PropertyMock)
self.patch_object(trove.TroveCharm, 'region',
new_callable=mock.PropertyMock)
self.patch_object(trove.TroveCharm, 'public_url',
new_callable=mock.PropertyMock)
self.patch_object(trove.TroveCharm, 'internal_url',
new_callable=mock.PropertyMock)
self.patch_object(trove.TroveCharm, 'admin_url',
new_callable=mock.PropertyMock)
self.service_name.return_value = 'type1'
self.region.return_value = 'region1'
self.public_url.return_value = 'public_url'
self.internal_url.return_value = 'internal_url'
self.admin_url.return_value = 'admin_url'
keystone = mock.MagicMock()
trove.setup_endpoint(keystone)
keystone.register_endpoints.assert_called_once_with(
'trove', 'region1', 'public_url/v1.0/%(tenant_id)s',
'internal_url/v1.0/%(tenant_id)s',
'admin_url/v1.0/%(tenant_id)s')
def test_write(self):
"""Tests write_content."""
# name is a special attribute in mock.Mock. Therefore, it needs a special
# way of mocking.
tmp_file = mock.Mock()
type(tmp_file).name = mock.PropertyMock(return_value='/tmp/file')
tmp = mock.Mock()
tmp.__enter__ = mock.Mock(return_value=tmp_file)
tmp.__exit__ = mock.Mock(return_value=False)
self.mock.NamedTemporaryFile.return_value = tmp
android.write_content('/test.html', 'content')
self.mock.NamedTemporaryFile.assert_called_once_with(delete=False)
self.mock.adb.assert_called_once_with('push /tmp/file /test.html')
self.mock.adb_shell.assert_called_once_with('chmod 0644 /test.html')
self.mock.delete_if_exists.assert_called_once_with('/tmp/file')
tmp_file.write.assert_called_once_with('content')
def test_errors(self, m_error):
errors = dict()
register = error.Register(errors, prefix='PRE')
report = error.Report(errors, prefix='PRE')
register.F042(description='Fake error')
self.assertRaises(ValueError, register.__getattr__,
code='F042')
self.assertEqual({'PRE:F042': {'code': 'PRE:F042',
'description': 'Fake error'}},
errors)
yaml_obj = mock.MagicMock(__yaml_meta__=mock.Mock(line=1,
column=1))
type(yaml_obj.__yaml_meta__).name = mock.PropertyMock(
return_value='fake.yaml')
yaml_obj.__yaml_meta__.get_snippet.return_value = 'fake_code'
report.F042('It is an error!', yaml_obj)
m_error.assert_called_once_with(
code='PRE:F042',
column=2,
line=2,
filename='fake.yaml',
message='It is an error!',
source='fake_code')
self.assertRaises(ValueError, report.__getattr__,
code='FAKE')
test_lib_charm_openstack_manila.py 文件源码
项目:charm-manila
作者: openstack
项目源码
文件源码
阅读 24
收藏 0
点赞 0
评论 0
def test_url_endpoints_creation(self):
# Tests that the endpoint functions call through to the baseclass
self.patch_object(manila.charms_openstack.charm.OpenStackCharm,
'public_url', new_callable=mock.PropertyMock)
self.patch_object(manila.charms_openstack.charm.OpenStackCharm,
'internal_url', new_callable=mock.PropertyMock)
self.patch_object(manila.charms_openstack.charm.OpenStackCharm,
'admin_url', new_callable=mock.PropertyMock)
self.public_url.return_value = 'p1'
self.internal_url.return_value = 'i1'
self.admin_url.return_value = 'a1'
c = self._patch_config_and_charm({})
self.assertEqual(c.public_url, 'p1/v1/%(tenant_id)s')
self.assertEqual(c.internal_url, 'i1/v1/%(tenant_id)s')
self.assertEqual(c.admin_url, 'a1/v1/%(tenant_id)s')
self.assertEqual(c.public_url_v2, 'p1/v2/%(tenant_id)s')
self.assertEqual(c.internal_url_v2, 'i1/v2/%(tenant_id)s')
self.assertEqual(c.admin_url_v2, 'a1/v2/%(tenant_id)s')
def test_receivers_exception(app, db, sample_record_string):
"""Test receivers."""
responses.add(
responses.POST, "http://localhost:6800/schedule.json",
body=json.dumps({"jobid": None, "status": "ok"}),
status=200
)
mock_record = MagicMock()
prop_mock = PropertyMock(return_value=sample_record_string)
type(mock_record).raw = prop_mock
with app.app_context():
with pytest.raises(CrawlerScheduleError):
receive_oaiharvest_job(
request=None,
records=[mock_record],
name="",
spider="Test",
workflow="test"
)
def test_video_task_chain(mocker):
"""
Test that video task get_task_id method returns the correct id from the chain.
"""
def ctx():
""" Return a mock context object """
return celery.app.task.Context({
'lang': 'py',
'task': 'cloudsync.tasks.stream_to_s3',
'id': '1853b857-84d8-4af4-8b19-1c307c1e07d5',
'chain': [{
'task': 'cloudsync.tasks.transcode_from_s3',
'args': [351],
'kwargs': {},
'options': {
'task_id': '1a859e5a-8f71-4e01-9349-5ebc6dc66631'
}
}]
})
mocker.patch('cloudsync.tasks.VideoTask.request', new_callable=PropertyMock, return_value=ctx())
task = VideoTask()
assert task.get_task_id() == task.request.chain[0]['options']['task_id']
def test_video_task_bad_chain(mocker):
"""
Test that video task get_task_id method returns the task.id if the chain is not valid.
"""
def ctx():
""" Return a mock context object """
return celery.app.task.Context({
'lang': 'py',
'task': 'cloudsync.tasks.stream_to_s3',
'id': '1853b857-84d8-4af4-8b19-1c307c1e07d5',
'chain': [{
'task': 'cloudsync.tasks.transcode_from_s3',
'args': [351],
'kwargs': {},
'options': {}
}]
})
mocker.patch('cloudsync.tasks.VideoTask.request', new_callable=PropertyMock, return_value=ctx())
task = VideoTask()
assert task.get_task_id() is None
def test_read_unauthenticated_user():
"""
This should call "read_group" when trying to read
translations for the selected combination of a group, page, and language.
read_group method is mocked, so when it is called a group object is returned.
"""
with mock.patch('annotran.languages.models.Language') as language:
propLang = PropertyMock(return_value=2897)
type(language).id = propLang
language.get_by_public_language_id = MagicMock(return_value=language)
with mock.patch('h.groups.models.Group') as group:
propGroup = PropertyMock(return_value=2897)
type(group).id = propGroup
group.get_by_pubid = MagicMock(return_value=group)
request = mock.Mock(authenticated_userid = None,
matchdict={'public_group_id': '12345',
'public_language_id': '12345'})
result = views.read(request)
assert result == None
def test_read_private_group_unauthenticated():
"""
This should call "read_group" when trying to read
translations for the selected combination of a group, page, and language.
read_group method is mocked, so when it is called a group object is returned.
"""
with mock.patch('annotran.languages.models.Language') as language:
propLang = PropertyMock(return_value=2897)
type(language).id = propLang
language.get_by_public_language_id = MagicMock(return_value=language)
with mock.patch('h.groups.models.Group') as group:
propGroup = PropertyMock(return_value=2897)
type(group).id = propGroup
group.get_by_pubid = MagicMock(return_value=group)
request = _mock_request(authenticated_user=mock.Mock(groups=[]),
matchdict={'public_group_id': '12345',
'public_language_id': '12345'})
result = views.read(request)
assert result == None
def test_read_private_group_authenticated():
"""
This should return None when trying to read
translations for the selected combination of a group, page, and language, because group is
not in the list of user's authorized groups.
"""
with mock.patch('annotran.languages.models.Language') as language:
propLang = PropertyMock(return_value=2897)
type(language).id = propLang
language.get_by_public_language_id = MagicMock(return_value=language)
with mock.patch('h.groups.models.Group') as group:
propGroup = PropertyMock(return_value=2897)
type(group).id = propGroup
group.get_by_pubid = MagicMock(return_value=group)
annotran.groups.views.read_group = MagicMock(return_value=group)
request = _mock_request(authenticated_user=mock.Mock(groups=[group]),
matchdict={'public_group_id': '12345',
'public_language_id': '12345'})
result = views.read(request)
assert result == group
def test_assess_status_active(self):
self.patch_object(chm_core.hookenv, 'status_set')
# disable all of the check functions
self.patch_target('check_if_paused', return_value=(None, None))
self.patch_target('check_interfaces', return_value=(None, None))
self.patch_target('custom_assess_status_check',
return_value=(None, None))
self.patch_target('check_services_running', return_value=(None, None))
self.patch_object(chm_core.hookenv, 'application_version_set')
with mock.patch.object(AssessStatusCharm, 'application_version',
new_callable=mock.PropertyMock,
return_value="abc"):
self.target._assess_status()
self.status_set.assert_called_once_with('active', 'Unit is ready')
self.application_version_set.assert_called_once_with("abc")
# check all the check functions got called
self.check_if_paused.assert_called_once_with()
self.check_interfaces.assert_called_once_with()
self.custom_assess_status_check.assert_called_once_with()
self.check_services_running.assert_called_once_with()
def test_find_payments(self):
cls = LowestBalanceFirstMethod(Decimal('100.00'))
s1 = Mock(spec_set=CCStatement)
type(s1).minimum_payment = PropertyMock(return_value=Decimal('2.00'))
type(s1).principal = PropertyMock(return_value=Decimal('10.00'))
s2 = Mock(spec_set=CCStatement)
type(s2).minimum_payment = PropertyMock(return_value=Decimal('5.00'))
type(s2).principal = PropertyMock(return_value=Decimal('25.00'))
s3 = Mock(spec_set=CCStatement)
type(s3).minimum_payment = PropertyMock(return_value=Decimal('2.00'))
type(s3).principal = PropertyMock(return_value=Decimal('1234.56'))
s4 = Mock(spec_set=CCStatement)
type(s4).minimum_payment = PropertyMock(return_value=Decimal('7.00'))
type(s4).principal = PropertyMock(return_value=Decimal('3.00'))
assert cls.find_payments([s1, s2, s3, s4]) == [
Decimal('2.00'),
Decimal('5.00'),
Decimal('2.00'),
Decimal('91.00')
]
def test_find_payments_total_too_low(self):
cls = LowestBalanceFirstMethod(Decimal('3.00'))
s1 = Mock(spec_set=CCStatement)
type(s1).minimum_payment = PropertyMock(return_value=Decimal('2.00'))
type(s1).principal = PropertyMock(return_value=Decimal('10.00'))
s2 = Mock(spec_set=CCStatement)
type(s2).minimum_payment = PropertyMock(return_value=Decimal('5.00'))
type(s2).principal = PropertyMock(return_value=Decimal('25.00'))
s3 = Mock(spec_set=CCStatement)
type(s3).minimum_payment = PropertyMock(return_value=Decimal('2.00'))
type(s3).principal = PropertyMock(return_value=Decimal('1234.56'))
s4 = Mock(spec_set=CCStatement)
type(s4).minimum_payment = PropertyMock(return_value=Decimal('7.00'))
type(s4).principal = PropertyMock(return_value=Decimal('3.00'))
with pytest.raises(TypeError):
cls.find_payments([s1, s2, s3, s4])
def test_find_payments(self):
cls = HighestBalanceFirstMethod(Decimal('100.00'))
s1 = Mock(spec_set=CCStatement)
type(s1).minimum_payment = PropertyMock(return_value=Decimal('2.00'))
type(s1).principal = PropertyMock(return_value=Decimal('10.00'))
s2 = Mock(spec_set=CCStatement)
type(s2).minimum_payment = PropertyMock(return_value=Decimal('5.00'))
type(s2).principal = PropertyMock(return_value=Decimal('25.00'))
s3 = Mock(spec_set=CCStatement)
type(s3).minimum_payment = PropertyMock(return_value=Decimal('2.00'))
type(s3).principal = PropertyMock(return_value=Decimal('1234.56'))
s4 = Mock(spec_set=CCStatement)
type(s4).minimum_payment = PropertyMock(return_value=Decimal('7.00'))
type(s4).principal = PropertyMock(return_value=Decimal('3.00'))
assert cls.find_payments([s1, s2, s3, s4]) == [
Decimal('2.00'),
Decimal('5.00'),
Decimal('86.00'),
Decimal('7.00')
]
def test_find_payments(self):
cls = HighestInterestRateFirstMethod(Decimal('100.00'))
s1 = Mock(spec_set=CCStatement)
type(s1).minimum_payment = PropertyMock(return_value=Decimal('2.00'))
type(s1).apr = PropertyMock(return_value=Decimal('0.0100'))
type(s1).principal = PropertyMock(return_value=Decimal('10.00'))
s2 = Mock(spec_set=CCStatement)
type(s2).minimum_payment = PropertyMock(return_value=Decimal('5.00'))
type(s2).apr = PropertyMock(return_value=Decimal('0.0200'))
type(s2).principal = PropertyMock(return_value=Decimal('25.00'))
s3 = Mock(spec_set=CCStatement)
type(s3).minimum_payment = PropertyMock(return_value=Decimal('2.00'))
type(s3).apr = PropertyMock(return_value=Decimal('0.0800'))
type(s3).principal = PropertyMock(return_value=Decimal('1234.56'))
s4 = Mock(spec_set=CCStatement)
type(s4).minimum_payment = PropertyMock(return_value=Decimal('7.00'))
type(s4).apr = PropertyMock(return_value=Decimal('0.0300'))
type(s4).principal = PropertyMock(return_value=Decimal('3.00'))
assert cls.find_payments([s1, s2, s3, s4]) == [
Decimal('2.00'),
Decimal('5.00'),
Decimal('86.00'),
Decimal('7.00')
]