# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. import time from unittest.mock import ANY, Mock, patch from odoo.exceptions import UserError from odoo.tests.common import TransactionCase class TestFetchmailOutlook(TransactionCase): @patch('odoo.addons.mail.models.fetchmail.IMAP4_SSL') def test_connect(self, mock_imap): """Test that the connect method will use the right authentication method with the right arguments. """ mock_connection = Mock() mock_imap.return_value = mock_connection mail_server = self.env['fetchmail.server'].create({ 'name': 'Test server', 'server_type': 'outlook', 'user': 'test@example.com', 'microsoft_outlook_access_token': 'test_access_token', 'microsoft_outlook_access_token_expiration': time.time() + 1000000, 'password': '', 'is_ssl': True, }) mail_server.connect() mock_connection.authenticate.assert_called_once_with('XOAUTH2', ANY) args = mock_connection.authenticate.call_args[0] self.assertEqual(args[1](None), 'user=test@example.com\1auth=Bearer test_access_token\1\1', msg='Should use the right access token') mock_connection.select.assert_called_once_with('INBOX') def test_constraints(self): """Test the constraints related to the Outlook mail server.""" with self.assertRaises(UserError, msg='Should ensure that the password is empty'): self.env['fetchmail.server'].create({ 'name': 'Test server', 'server_type': 'outlook', 'password': 'test', })