74 lines
2.8 KiB
Python
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)
|