fix(tests): flacky tests fixes

This commit is contained in:
RhodeCode Admin 2026-01-19 08:54:53 +01:00
parent 67bc6a188a
commit 6e41408812

View file

@ -318,16 +318,14 @@ def branch_permission_setter(request):
branch_permission_setter(repo_name, username, pattern='*', permission='branch.push')
"""
from rhodecode.model.permission import PermissionModel
rule_id = None
write_perm_id = None
write_perm = None
rule = None
# Track ALL created permissions for proper cleanup
# Critical for parameterized tests that call this fixture multiple times
created_rules = []
created_write_perms = []
def _branch_permissions_setter(repo_name, username, pattern="*", permission="branch.push_force"):
global rule_id, write_perm_id
global rule, write_perm
repo = Repository.get_by_repo_name(repo_name)
repo_id = repo.repo_id
@ -344,6 +342,7 @@ def branch_permission_setter(request):
.first()
)
write_perm = None
if not perm:
# such user isn't defined in Permissions for repository
# we now on-the-fly add new permission
@ -356,6 +355,7 @@ def branch_permission_setter(request):
Session().flush()
perm = write_perm
created_write_perms.append(write_perm)
rule = UserToRepoBranchPermission()
rule.rule_to_perm_id = perm.repo_to_perm_id
@ -366,15 +366,25 @@ def branch_permission_setter(request):
Session().add(rule)
Session().commit()
created_rules.append(rule)
# Flush permission caches so the change is immediately visible
# Critical for tests with PostgreSQL where permission checks happen
# in separate VCSServer process that needs fresh permission data
PermissionModel().trigger_permission_flush([user_id])
return rule
@request.addfinalizer
def cleanup():
if rule:
# Clean up ALL created rules and permissions, not just the last ones
# Critical for PostgreSQL where orphaned rows cause duplicate results
for rule in created_rules:
Session().delete(rule)
Session().commit()
if write_perm:
Session().commit()
for write_perm in created_write_perms:
Session().delete(write_perm)
Session().commit()
Session().commit()
return _branch_permissions_setter