0

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.

MrBean Bremen
  • 14,916
  • 3
  • 26
  • 46
Rhea
  • 381
  • 1
  • 7
  • 22
  • Are you sure the service itself was meant to be invoked at some point? or could you need an assertion like `self.assertTrue(mock_service.send_email.called)` ? – Vincent Buscarello Jul 16 '20 at 04:51
  • Tried this self.assertTrue(mock_service.send_email.called) and it's not working either – Rhea Jul 16 '20 at 15:14

0 Answers0