Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions document_page_approval/models/document_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ def _compute_approver_group_ids(self):
page.approver_group_ids = res

@api.depends("is_approval_required", "approver_group_ids")
@api.depends_context("uid")
def _compute_am_i_approver(self):
"""Check if the current user can approve changes to this page."""
for rec in self:
Expand All @@ -111,6 +112,7 @@ def can_user_approve_this_page(self, user):
# to approve, user must belong to any of the approver groups
return len(user.groups_id & self.approver_group_ids) > 0

@api.depends_context("uid")
def _compute_has_changes_pending_approval(self):
history = self.env["document.page.history"]
for rec in self:
Expand All @@ -119,6 +121,7 @@ def _compute_has_changes_pending_approval(self):
)
rec.has_changes_pending_approval = changes > 0

@api.depends_context("uid")
def _compute_user_has_drafts(self):
history = self.env["document.page.history"]
for rec in self:
Expand Down
3 changes: 2 additions & 1 deletion document_page_approval/models/document_page_history.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).


from odoo import fields, models
from odoo import api, fields, models
from odoo.exceptions import UserError
from odoo.tools.misc import clean_context
from odoo.tools.translate import _
Expand Down Expand Up @@ -143,6 +143,7 @@ def action_cancel_and_draft(self):
self.action_cancel()
self.action_draft()

@api.depends_context("uid")
def _compute_am_i_owner(self):
"""Check if current user is the owner"""
for rec in self:
Expand Down
75 changes: 75 additions & 0 deletions document_page_approval/tests/test_document_page_approval.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,20 @@ def setUpClass(cls):
login="test-user2",
groups="document_page_approval.group_document_approver_user",
)
cls.user_normal = new_test_user(
cls.env,
login="test_normal",
groups="document_knowledge.group_document_user,document_page.group_document_editor",
name="Test Normal User",
email="normal@example.com",
)
cls.manager_user = new_test_user(
cls.env,
login="test_manager",
groups="document_page.group_document_manager",
name="Test Manager",
email="manager@example.com",
)

# Ensure user2 has the approver group
cls.approver_gid = cls.env.ref(
Expand Down Expand Up @@ -267,3 +281,64 @@ def test_diff_computation(self):
)
chreq2._compute_diff()
self.assertIsNotNone(chreq2.diff)

def test_cache_am_i_approver(self):
"""Ensure 'am_i_approver' is computed per-user and not cached globally."""
page = self.page2

# Normal user evaluates the field first (Calculates and caches: False)
self.assertFalse(page.with_user(self.user_normal).am_i_approver)

# Approver user evaluates it next.
self.assertTrue(page.with_user(self.user2).am_i_approver)

def test_cache_am_i_owner(self):
"""Ensure 'am_i_owner' is computed per-user and not cached globally."""
page = self.page2
# Normal user creates the change request (they are the owner)
chreq = self.history_obj.with_user(self.user_normal).create(
{
"page_id": page.id,
"summary": "Cache Test",
"content": "<p>User Normal Changes</p>",
}
)

# Approver user evaluates the field first (Calculates and caches: False)
self.assertFalse(chreq.with_user(self.user2).am_i_owner)

# Normal user evaluates it next
self.assertTrue(chreq.with_user(self.user_normal).am_i_owner)

def test_cache_user_has_drafts(self):
"""Ensure 'user_has_drafts' is computed per-user and not cached globally."""
page = self.page2
# Normal user creates a draft change request
self.history_obj.with_user(self.user_normal).create(
{
"page_id": page.id,
"state": "draft",
}
)

# Approver evaluates the field first
self.assertFalse(page.with_user(self.user2).user_has_drafts)

# Normal user evaluates it next
self.assertTrue(page.with_user(self.user_normal).user_has_drafts)

def test_cache_has_changes_pending_approval(self):
"""Ensure 'has_changes_pending_approval' is computed per-user and not cached."""
page = self.page2
# Create a pending approval change request using the Manager
# so it's NOT owned by the normal user.
chreq = self.history_obj.with_user(self.manager_user).create(
{"page_id": page.id, "content": "<p>Manager Change</p>"}
)
chreq.with_user(self.manager_user).action_to_approve()

# Normal user evaluates the field.
self.assertFalse(page.with_user(self.user_normal).has_changes_pending_approval)

# Approver user evaluates it.
self.assertTrue(page.with_user(self.user2).has_changes_pending_approval)
Loading