I have an email class for which I need to write a unit test class.
I have written that unittest class, but it's not working as expected.
actual class:
def _get_email_status(self, settings, data):
# it's a dictionary
email_param = settings.get_confidential_data()
json_content = Task.build_email_content(
data, email_param.get(0),
"subject", email_param.get(1),
"name", email_param.get(2),
email_param.get(3)
# this method contains the rest URL and hit that url
statuscode = EmailService().send_email(email_param.get(4),
json_content)
return statuscode
test class:
@patch('main.EmailService')
def test_email(self, mock_service):
test_data = {
'test': 'test'
}
confidential_data = {0: "confidential_details",
1: "confidential_subject",
2: "confidential_name",
3: "confidential3",
4: "confidential4",
5: "confidential5",
6: "confidential6"}
mock_settings = MagicMock()
mock_settings.get_confidential_data = MagicMock(return_value=confidential_data)
mock_settings.keys.return_value.__iter__.return_value = confidential_data.keys()
mock_settings.__getitem__.side_effect = lambda key: confidential_data[0]
param = mock_settings.get_confidential_data
mock_object = MagicMock()
mock_service.return_value = mock_object
print(param) // here getting the confidential dict value properly
json_content = Task.build_email_content(
test_data,
dict(mock_settings).get(0),
dict(mock_settings).get(1),
dict(mock_settings).get(2),
dict(mock_settings).get(3),
dict(mock_settings).get(4),
dict(mock_settings).get(5))
mock_service.send_email(settings, dict(mock_settings).get(5), json_content)
self.assertTrue(mock_service.called)
print(json_content)
mock_settings.get_confidential_data.assert_called_once()
But mock_settings.get_confidential_data.assert_called_once()
and self.assertTrue(mock_service.called)
are giving errors saying those methods have not been invoked.
Please help.