mirror of
https://github.com/OCA/server-backend.git
synced 2025-02-18 09:52:42 +02:00
[IMP] base_ical: Allow advanced snippets. Use apikeys with scope.
This commit is contained in:
@@ -1,54 +1,125 @@
|
||||
# Copyright 2023 Hunki Enterprises BV
|
||||
# Copyright 2024 initOS GmbH
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl-3.0)
|
||||
|
||||
import logging
|
||||
from urllib.parse import parse_qs, urlparse
|
||||
|
||||
import vobject
|
||||
|
||||
from odoo.tests.common import Form, TransactionCase
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class TestBaseIcal(TransactionCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.calendar = cls.env.ref("base_ical.demo_calendar")
|
||||
cls.user = cls.env.ref("base.user_demo")
|
||||
|
||||
def test_profile(self):
|
||||
"""Test url generation"""
|
||||
user = self.env.ref("base.user_demo")
|
||||
token_domain = [
|
||||
("user_id", "=", user.id),
|
||||
("ical_id", "=", self.calendar.id),
|
||||
]
|
||||
token_search = (
|
||||
self.env["base.ical.token"].with_context(active_test=False).search
|
||||
desc = (
|
||||
self.env["base.ical.url.description"]
|
||||
.with_user(self.user)
|
||||
.create({"calendar_id": self.calendar.id, "name": "Testing"})
|
||||
)
|
||||
self.assertFalse(token_search(token_domain))
|
||||
self.assertFalse(self.calendar.with_user(user).user_active)
|
||||
self.calendar.with_user(user).action_enable()
|
||||
token = token_search(token_domain)
|
||||
self.assertTrue(token.active)
|
||||
self.calendar.invalidate_cache()
|
||||
self.assertTrue(self.calendar.with_user(user).user_active)
|
||||
self.calendar.with_user(user).action_disable()
|
||||
self.calendar.invalidate_cache()
|
||||
self.assertFalse(self.calendar.with_user(user).user_active)
|
||||
|
||||
def test_config(self):
|
||||
"""Configure calendar"""
|
||||
url = desc._make_url()
|
||||
self.assertTrue(url)
|
||||
parsed = urlparse(url)
|
||||
params = parse_qs(parsed.query)
|
||||
access_token = params.get("access_token")[0]
|
||||
self.assertTrue(access_token)
|
||||
|
||||
user_id = self.env["res.users.apikeys"]._check_credentials(
|
||||
scope=f"odoo.plugin.ical.{self.calendar.id}",
|
||||
key=access_token,
|
||||
)
|
||||
self.assertEqual(user_id, self.user.id)
|
||||
|
||||
def test_config_simple(self):
|
||||
"""Configure a simple calendar"""
|
||||
with Form(self.calendar) as calendar_form:
|
||||
calendar_form.mode = "simple"
|
||||
calendar_form.model_id = self.env.ref("base.model_res_partner")
|
||||
self.assertFalse(calendar_form.expression_dtstart)
|
||||
self.assertFalse(calendar_form.preview)
|
||||
|
||||
calendar_form.expression_dtstart = "record.create_date"
|
||||
calendar_form.expression_dtend = "record.write_date"
|
||||
self.assertTrue(calendar_form.preview)
|
||||
self.assertTrue(vobject.readOne(calendar_form.preview))
|
||||
|
||||
def test_config_advanced_event(self):
|
||||
with Form(self.calendar) as calendar_form:
|
||||
calendar_form.mode = "advanced"
|
||||
calendar_form.model_id = self.env.ref("base.model_res_partner")
|
||||
self.assertFalse(calendar_form.preview)
|
||||
|
||||
calendar_form.code = (
|
||||
"event = {"
|
||||
"'dtstart':record.create_date,"
|
||||
"'dtend':record.write_date,"
|
||||
"'summary':record.name,"
|
||||
"}"
|
||||
)
|
||||
self.assertTrue(calendar_form.preview)
|
||||
cal = vobject.readOne(calendar_form.preview)
|
||||
self.assertTrue(cal)
|
||||
self.assertTrue(
|
||||
any(item.name.lower() == "vevent" for item in cal.getChildren())
|
||||
)
|
||||
|
||||
def test_config_advanced_todo(self):
|
||||
with Form(self.calendar) as calendar_form:
|
||||
calendar_form.mode = "advanced"
|
||||
calendar_form.model_id = self.env.ref("base.model_res_partner")
|
||||
self.assertFalse(calendar_form.preview)
|
||||
calendar_form.code = (
|
||||
"todo = {'due':record.write_date,'summary':record.name}"
|
||||
)
|
||||
self.assertTrue(calendar_form.preview)
|
||||
cal = vobject.readOne(calendar_form.preview)
|
||||
self.assertTrue(cal)
|
||||
self.assertTrue(
|
||||
any(item.name.lower() == "vtodo" for item in cal.getChildren())
|
||||
)
|
||||
|
||||
def test_config_advanced_calendar(self):
|
||||
code = (
|
||||
"cal = vobject.iCalendar()\n"
|
||||
"dict2ical(cal.add('vevent'),{"
|
||||
"'summary':record.name,"
|
||||
"'dtstart':record.create_date,"
|
||||
"'dtend':record.write_date})\n"
|
||||
)
|
||||
with Form(self.calendar) as calendar_form:
|
||||
calendar_form.mode = "advanced"
|
||||
calendar_form.model_id = self.env.ref("base.model_res_partner")
|
||||
self.assertFalse(calendar_form.preview)
|
||||
calendar_form.code = (
|
||||
code + "calendar = {record.id:cal.serialize().encode()}"
|
||||
)
|
||||
self.assertTrue(calendar_form.preview)
|
||||
cal = vobject.readOne(calendar_form.preview)
|
||||
self.assertTrue(cal)
|
||||
|
||||
def test_auto_flag(self):
|
||||
"""Test the auto flag is honored"""
|
||||
user = self.env.ref("base.user_demo")
|
||||
self.assertFalse(user.ical_token_ids)
|
||||
self.assertFalse(self.calendar.allowed_users_ids)
|
||||
|
||||
self.calendar.auto = True
|
||||
self.assertTrue(user.ical_token_ids)
|
||||
self.calendar.copy()
|
||||
self.assertEqual(len(user.ical_token_ids), 2)
|
||||
new_user = user.copy()
|
||||
self.assertEqual(len(new_user.ical_token_ids), 2)
|
||||
self.assertTrue(self.calendar.allowed_users_ids)
|
||||
new_calendar = self.calendar.copy()
|
||||
self.assertIn(self.user, new_calendar.allowed_users_ids)
|
||||
|
||||
self.calendar.auto = False
|
||||
new_user = self.user.copy()
|
||||
self.assertNotIn(new_user, self.calendar.allowed_users_ids)
|
||||
|
||||
self.calendar.auto = True
|
||||
new_user = new_user.copy()
|
||||
self.assertIn(new_user, self.calendar.allowed_users_ids)
|
||||
|
||||
Reference in New Issue
Block a user