agent: save role emails during provisionning (#44754)

This commit is contained in:
Valentin Deniaud 2020-07-02 18:42:48 +02:00 committed by Benjamin Dauvergne
parent 3d632d370c
commit 88c06f1df0
4 changed files with 49 additions and 2 deletions

View File

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.18 on 2020-07-07 14:56
from __future__ import unicode_literals
import django.contrib.postgres.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('common', '0002_auto_20160105_1702'),
]
operations = [
migrations.AddField(
model_name='role',
name='emails',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=128), default=[], size=None),
),
migrations.AddField(
model_name='role',
name='emails_to_members',
field=models.BooleanField(default=True),
),
]

View File

@ -1,3 +1,4 @@
from django.contrib.postgres.fields import ArrayField
from django.db import models
from django.contrib.auth.models import Group
@ -6,3 +7,5 @@ class Role(Group):
uuid = models.CharField(max_length=32)
description = models.TextField(default=u'')
details = models.TextField(default=u'')
emails = ArrayField(models.CharField(max_length=128), default=[])
emails_to_members = models.BooleanField(default=True)

View File

@ -122,9 +122,15 @@ class NotificationProcessing:
try:
with atomic():
role, created = Role.objects.get_or_create(
name=role_name, defaults={
name=role_name,
defaults={
'uuid': o['uuid'],
'description': o['description']})
'description': o['description'],
'details': o.get('details', u''),
'emails': o.get('emails', []),
'emails_to_members': o.get('emails_to_members', True),
}
)
except IntegrityError:
# Can happen if uuid and name already exist
logger.error(u'cannot provision role "%s" (%s)', o['name'], o['uuid'])
@ -143,6 +149,12 @@ class NotificationProcessing:
if role.details != o.get('details', u''):
role.details = o.get('details', u'')
save = True
if role.emails != o.get('emails', []):
role.emails = o.get('emails', [])
save = True
if role.emails_to_members != o.get('emails_to_members', True):
role.emails_to_members = o.get('emails_to_members', True)
save = True
if save:
try:
with atomic():

View File

@ -48,6 +48,9 @@ def test_hobo_notify_roles(caplog, tenants):
u'name': u'Service petite enfance',
u'slug': u'service-petite-enfance',
u'description': u'Role du service petite enfance %s' % tenant.domain_url,
u'details': u'Some details',
u'emails': [u'foo@bar.com', u'test@entrouvert.org'],
u'emails_to_members': False,
}
]
}
@ -59,6 +62,9 @@ def test_hobo_notify_roles(caplog, tenants):
assert role.uuid == u'12345'
assert role.name == u'Service petite enfance'
assert role.description == u'Role du service petite enfance %s' % tenant.domain_url
assert role.details == u'Some details'
assert role.emails == [u'foo@bar.com', u'test@entrouvert.org']
assert role.emails_to_members is False
# test full provisionning
for tenant in tenants: