odoo18/addons/google_gmail/tests/test_google_gmail.py

74 lines
2.8 KiB
Python

from odoo.tests.common import TransactionCase
from unittest import mock
from datetime import datetime
from freezegun import freeze_time
class TestIrMailServer(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.mail_server = cls.env["ir.mail_server"].create(
{
"name": "Gmail",
"smtp_host": "fake.host",
"google_gmail_access_token": "fake_access_token",
}
)
def test_generate_oauth2_string_token(self):
"""Testing the generation of the oauth2 token
should take care of google_gmail_mixin.GMAIL_TOKEN_VALIDITY_THRESHOLD
"""
current_token_expiry = int(datetime(2021, 12, 15, 11, 0, 0).timestamp())
new_token_expiry = int(datetime(2021, 12, 15, 12, 0, 1).timestamp())
cases = [
(
"2021-12-15 10:59:50",
False,
"fake_access_token",
("Google Gmail: reuse existing access token. Expire in %i minutes", 0),
),
(
"2021-12-15 10:59:55",
True,
"new-access-token",
("Google Gmail: fetch new access token. Expires in %i minutes", 60),
),
(
"2021-12-15 11:00:01",
True,
"new-access-token",
("Google Gmail: fetch new access token. Expires in %i minutes", 60),
),
]
for (
current_datetime,
assert_new_token_generation_called,
expected_token,
expected_log,
) in cases:
with self.subTest(currenct_datetime=current_datetime), \
freeze_time(current_datetime), \
mock.patch("odoo.addons.google_gmail.models.google_gmail_mixin._logger.info") as mock_logger, \
mock.patch(
"odoo.addons.google_gmail.models.google_gmail_mixin.GoogleGmailMixin._fetch_gmail_access_token",
return_value=("new-access-token", new_token_expiry),
) as mock_fetch_gmail_access_token:
self.mail_server.google_gmail_access_token_expiration = current_token_expiry
oauth2_string = self.mail_server._generate_oauth2_string(
"user-account", "refresh-token"
)
self.assertEqual(
f"user=user-account\1auth=Bearer {expected_token}\1\1",
oauth2_string,
)
if assert_new_token_generation_called:
mock_fetch_gmail_access_token.assert_called_once()
else:
mock_fetch_gmail_access_token.assert_not_called()
mock_logger.assert_called_once_with(*expected_log)