provisionning: fix user roles provision warnings (#87144)
gitea/hobo/pipeline/head This commit looks good Details

This commit is contained in:
Serghei Mihai 2024-02-19 14:47:11 +01:00
parent e6c0555f78
commit 3e0347cc90
2 changed files with 36 additions and 3 deletions

View File

@ -13,9 +13,7 @@ def provision_user_groups(user, uuids):
logger = logging.getLogger(__name__)
existing_pks = user.groups.values_list('pk', flat=True)
not_found = set(uuids)
for role in Role.objects.filter(uuid__in=uuids).exclude(pk__in=existing_pks):
not_found.discard(role.uuid)
if role.pk in existing_pks:
continue
user.groups.through.objects.get_or_create(group=role, user=user)
@ -31,5 +29,6 @@ def provision_user_groups(user, uuids):
pass
else:
logger.info('removed role %s from %s (%s)', rel.group, user, user.pk)
for uuid in not_found:
existing_uuids = set(Role.objects.values_list('uuid', flat=True))
for uuid in set(uuids).difference(existing_uuids):
logger.warning('role %s of user %s does not exist', uuid, user)

View File

@ -0,0 +1,34 @@
import logging
import pytest
from hobo.agent.common.models import Role
from hobo.multitenant.utils import provision_user_groups
pytestmark = pytest.mark.django_db
@pytest.fixture
def roles():
return [Role.objects.create(uuid=str(i) * 8, name='Role %s' % i) for i in range(5)]
def test_provision_user_groups(db, roles, admin_user, caplog):
caplog.set_level(logging.INFO)
roles_uuids = [r.uuid for r in roles]
provision_user_groups(admin_user, roles_uuids)
assert len(caplog.records) == len(roles)
assert list(admin_user.groups.all()) == [r.group_ptr for r in roles]
caplog.clear()
caplog.set_level(logging.WARNING)
provision_user_groups(admin_user, roles_uuids)
assert list(admin_user.groups.all()) == [r.group_ptr for r in roles]
assert len(caplog.records) == 0
provision_user_groups(admin_user, roles_uuids[:-1])
assert list(admin_user.groups.all()) == [r.group_ptr for r in roles[:-1]]
roles_uuids.append('unknown-uuid')
provision_user_groups(admin_user, roles_uuids)
assert len(caplog.records) == 1