What went wrong for unittest in my project

33 Views Asked by At

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.

0

There are 0 best solutions below