forked from Mapan/odoo17e
99 lines
3.5 KiB
Python
99 lines
3.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from datetime import datetime
|
|
|
|
from odoo import exceptions
|
|
from odoo.addons.mail.tests.common import MailCommon, mail_new_test_user
|
|
from odoo.addons.room.tests.common import RoomCommon
|
|
from odoo.tests.common import tagged, users
|
|
|
|
@tagged("room_acl")
|
|
class TestRoomSecurity(RoomCommon, MailCommon):
|
|
"""Test ACLs on models"""
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.room_manager = mail_new_test_user(
|
|
cls.env,
|
|
groups='room.group_room_manager',
|
|
login='room_manager',
|
|
name='Room Manager',
|
|
)
|
|
|
|
cls.public_user = mail_new_test_user(
|
|
cls.env,
|
|
groups='base.group_public',
|
|
login='public_user',
|
|
name='Public user',
|
|
)
|
|
|
|
@users('public_user')
|
|
def test_models_as_public(self):
|
|
# Booking
|
|
with self.assertRaises(exceptions.AccessError, msg="ACLs: No Booking access to public"):
|
|
self.env["room.booking"].search([])
|
|
|
|
# Office
|
|
with self.assertRaises(exceptions.AccessError, msg="ACLs: No Office access to public"):
|
|
self.env["room.office"].search([])
|
|
|
|
# Room
|
|
with self.assertRaises(exceptions.AccessError, msg="ACLs: No Room access to public"):
|
|
self.env["room.room"].search([])
|
|
|
|
@users('employee')
|
|
def test_models_as_employee(self):
|
|
# Office
|
|
with self.assertRaises(exceptions.AccessError, msg="ACLs: Readonly access on office"):
|
|
self.office.with_env(self.env).write({"name": "Office 2"})
|
|
|
|
# Room
|
|
with self.assertRaises(exceptions.AccessError, msg="ACLs: Readonly access on room"):
|
|
self.rooms[0].with_env(self.env).write({"name": "Room 2"})
|
|
|
|
# Booking
|
|
self.bookings[0].with_env(self.env).write({
|
|
"name": "rescheduled",
|
|
"room_id": self.rooms[1].id,
|
|
"start_datetime": datetime(2023, 5, 15, 7, 0),
|
|
"stop_datetime": datetime(2023, 5, 15, 8, 0),
|
|
})
|
|
self.env["room.booking"].with_env(self.env).create({
|
|
"name": "morning meeting",
|
|
"room_id": self.rooms[0].id,
|
|
"start_datetime": datetime(2023, 5, 15, 10, 0),
|
|
"stop_datetime": datetime(2023, 5, 15, 11, 0),
|
|
})
|
|
self.bookings[1].with_env(self.env).unlink()
|
|
|
|
@users('room_manager')
|
|
def test_models_as_manager(self):
|
|
# Office
|
|
self.office.with_env(self.env).write({"name": "Office 2"})
|
|
new_office = self.env["room.office"].with_env(self.env).create({"name": "New Office"})
|
|
new_office.unlink()
|
|
|
|
# Room
|
|
self.rooms[0].with_env(self.env).write({"name": "Room 2"})
|
|
new_room = self.env["room.room"].with_env(self.env).create({
|
|
"name": "New Room",
|
|
"office_id": self.office.id,
|
|
})
|
|
new_room.unlink()
|
|
|
|
# Booking
|
|
self.bookings[0].with_env(self.env).write({
|
|
"name": "rescheduled",
|
|
"room_id": self.rooms[1].id,
|
|
"start_datetime": datetime(2023, 5, 15, 7, 0),
|
|
"stop_datetime": datetime(2023, 5, 15, 8, 0),
|
|
})
|
|
self.env["room.booking"].with_env(self.env).create({
|
|
"name": "morning meeting",
|
|
"room_id": self.rooms[0].id,
|
|
"start_datetime": datetime(2023, 5, 15, 10, 0),
|
|
"stop_datetime": datetime(2023, 5, 15, 11, 0),
|
|
})
|
|
self.bookings[1].with_env(self.env).unlink()
|