provisionning: count db queries (#55043)

This commit is contained in:
Emmanuel Cazenave 2021-06-21 17:16:28 +02:00
parent 44fc912ab4
commit 438b79dc7e
1 changed files with 139 additions and 0 deletions

View File

@ -2,6 +2,8 @@
import logging
from django.db import connection
from django.test.utils import CaptureQueriesContext
import pytest
pytestmark = pytest.mark.django_db
@ -205,6 +207,143 @@ def test_hobo_notify_roles(caplog, tenants):
assert caplog.records[-1].args == (u'Service petite enfance2', u'12345')
def test_hobo_notify_roles_db_queries(caplog, tenants):
from django.contrib.auth.models import Group
from tenant_schemas.utils import tenant_context
from hobo.agent.common.management.commands.hobo_notify import Command
from hobo.agent.common.models import Role
# test provision
for tenant in tenants:
with tenant_context(tenant):
notification = {
'@type': 'provision',
'audience': ['%s/saml/metadata' % tenant.get_base_url()],
'objects': {
'@type': 'role',
'data': [
{
'uuid': '12345',
'name': 'Service petite enfance',
'slug': 'service-petite-enfance',
'description': 'Role du service petite enfance %s' % tenant.domain_url,
'details': 'Some details',
'emails': ['foo@bar.com', 'test@entrouvert.org'],
'emails_to_members': False,
},
{
'uuid': '6789',
'name': 'Autre service',
'slug': 'autre service',
'description': "Role d'un autre service petite enfance %s" % tenant.domain_url,
},
],
},
}
with CaptureQueriesContext(connection) as ctx:
Command.process_notification(tenant, notification)
assert len(ctx.captured_queries) == 36
assert Group.objects.count() == 2
assert Role.objects.count() == 2
# test provision full
for tenant in tenants:
with tenant_context(tenant):
notification = {
'@type': 'provision',
'full': True,
'audience': ['%s/saml/metadata' % tenant.get_base_url()],
'objects': {
'@type': 'role',
'data': [
{
'uuid': '12sed45',
'name': 'Le dernier service',
'slug': 'le-dernier-service',
'description': '',
}
],
},
}
with CaptureQueriesContext(connection) as ctx:
Command.process_notification(tenant, notification)
assert len(ctx.captured_queries) == 45
assert Group.objects.count() == 1
assert Role.objects.count() == 1
# provision again
for tenant in tenants:
with tenant_context(tenant):
notification = {
'@type': 'provision',
'audience': ['%s/saml/metadata' % tenant.get_base_url()],
'objects': {
'@type': 'role',
'data': [
{
'uuid': '12345',
'name': 'Service petite enfance',
'slug': 'service-petite-enfance',
'description': 'Role du service petite enfance %s' % tenant.domain_url,
'details': 'Some details',
'emails': ['foo@bar.com', 'test@entrouvert.org'],
'emails_to_members': False,
},
{
'uuid': '6789',
'name': 'Autre service',
'slug': 'autre service',
'description': "Role d'un autre service petite enfance %s" % tenant.domain_url,
},
],
},
}
Command.process_notification(tenant, notification)
assert Group.objects.count() == 3
assert Role.objects.count() == 3
# test deprovision
for tenant in tenants:
with tenant_context(tenant):
notification = {
'@type': 'deprovision',
'audience': ['%s/saml/metadata' % tenant.get_base_url()],
'objects': {
'@type': 'role',
'data': [
{
'uuid': '12sed45',
'name': 'Le dernier service',
'slug': 'le-dernier-service',
'description': '',
},
{
'uuid': '12345',
'name': 'Service petite enfance',
'slug': 'service-petite-enfance',
'description': 'Role du service petite enfance %s' % tenant.domain_url,
'details': 'Some details',
'emails': ['foo@bar.com', 'test@entrouvert.org'],
'emails_to_members': False,
},
{
'uuid': '6789',
'name': 'Autre service',
'slug': 'autre service',
'description': "Role d'un autre service petite enfance %s" % tenant.domain_url,
},
],
},
}
with CaptureQueriesContext(connection) as ctx:
Command.process_notification(tenant, notification)
assert len(ctx.captured_queries) == 39
assert Group.objects.count() == 0
assert Role.objects.count() == 0
def test_provision_users(tenants):
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group