def test_extract_leads_from_chats(self):
        operator = Mock()
        operator.email = MagicMock(return_value='*****@*****.**')
        product_reference = 'PF12345'

        with patch.dict(CHAT1['Chat'], {'Operator': operator, 'Customs': {'Imovel': product_reference}}):
            chat_list = [CHAT1]
            actual = extract_leads_from_chats(chat_list)
        expected = {'name': 'Chat #11123 | Ivone Duarte', 'description': 'Can you help me?\nA', 'contact_name': 'Ivone Duarte',
                    'contact_phone': '967961100', 'contact_email': '*****@*****.**', 'operator': operator.email, 'group': 'groupid1', 'product_code': product_reference}
        self.assertEqual(1, len(actual))
        self.assertDictEqual(expected, actual[0])
    def test_extract_leads_from_chats_excluding_duplicates1(self):
        """
        Different chats between the same operator and the same client should be merged into a single lead where the
        description is the concatenation of the plain texts of the chats
        """
        operator = Mock()
        operator.email = MagicMock(return_value='*****@*****.**')

        with patch.dict(CHAT1['Chat'], {'Operator': operator}), patch.dict(CHAT2['Chat'], {'Operator': operator}):
            chat_list = [CHAT1, CHAT2]
            actual = extract_leads_from_chats(chat_list)
        expected = {'name': 'Chat #11123 | Ivone Duarte', 'description': 'Can you help me?\nA' + '\n' + 20 * '-' + '\n' + 'Can you help me?\nB', 'contact_name': 'Ivone Duarte',
                    'contact_phone': '967961100', 'contact_email': '*****@*****.**', 'operator': operator.email, 'group': 'groupid1', 'product_code': None}
        self.assertEqual(1, len(actual))
        self.assertDictEqual(expected, actual[0])