toulouse-maelis: add activity natures codes fields on connector (#75752)

This commit is contained in:
Nicolas Roche 2023-03-24 17:32:05 +01:00
parent 0b49c8c5ae
commit 3dc2d69493
3 changed files with 122 additions and 0 deletions

View File

@ -0,0 +1,40 @@
# Generated by Django 2.2.26 on 2023-03-24 16:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('toulouse_maelis', '0005_auto_20221221_1546'),
]
operations = [
migrations.AddField(
model_name='toulousemaelis',
name='extrasco_nature_codes',
field=models.TextField(
blank=True,
default='X',
verbose_name='Codes des natures des activités extra-scolaires, séparés par des virgules',
),
),
migrations.AddField(
model_name='toulousemaelis',
name='loisir_nature_codes',
field=models.TextField(
blank=True,
default='P,L,S,1,2,3,4,5,6,7,8,9',
verbose_name='Codes des natures des activités loisirs, séparés par des virgules',
),
),
migrations.AddField(
model_name='toulousemaelis',
name='perisco_nature_codes',
field=models.TextField(
blank=True,
default='A,R',
verbose_name='Codes des natures des activités péri-scolaires, séparés par des virgules',
),
),
]

View File

@ -59,6 +59,21 @@ class ToulouseMaelis(BaseResource, HTTPResource):
zeep_wsse_password = models.CharField(
max_length=64, blank=True, default='', verbose_name='Mot de passe WSSE'
)
perisco_nature_codes = models.TextField(
blank=True,
default='A,R',
verbose_name='Codes des natures des activités péri-scolaires, séparés par des virgules',
)
extrasco_nature_codes = models.TextField(
blank=True,
default='X',
verbose_name='Codes des natures des activités extra-scolaires, séparés par des virgules',
)
loisir_nature_codes = models.TextField(
blank=True,
default='P,L,S,' + ','.join(str(x) for x in range(1, 10)),
verbose_name='Codes des natures des activités loisirs, séparés par des virgules',
)
category = 'Connecteurs métiers'
_category_ordering = ['Famille', 'Activités']
@ -66,6 +81,15 @@ class ToulouseMaelis(BaseResource, HTTPResource):
class Meta:
verbose_name = 'Toulouse Maelis'
def get_perisco_nature_codes(self):
return [x.strip() for x in self.perisco_nature_codes.split(',') if x.strip()]
def get_extrasco_nature_codes(self):
return [x.strip() for x in self.extrasco_nature_codes.split(',') if x.strip()]
def get_loisir_nature_codes(self):
return [x.strip() for x in self.loisir_nature_codes.split(',') if x.strip()]
def get_client(self, wsdl_short_name):
wsse = UsernameToken(self.zeep_wsse_username, self.zeep_wsse_password)
wsdl_name = wsdl_short_name + 'Service?wsdl'

View File

@ -32,6 +32,7 @@ from passerelle.contrib.toulouse_maelis.utils import get_public_criterias, json_
from passerelle.utils.jsonresponse import APIError
from passerelle.utils.soap import SOAPError
from passerelle.utils.templates import render_to_string
from tests.test_manager import login
from tests.utils import FakedResponse, ResponsesSoap, generic_endpoint_url, setup_access_rights
TEST_BASE_DIR = os.path.join(os.path.dirname(__file__), 'data', 'toulouse_maelis')
@ -243,6 +244,63 @@ def con(db):
return ToulouseMaelis.objects.get()
def test_nature_codes(con):
assert con.get_perisco_nature_codes() == ['A', 'R']
assert con.get_extrasco_nature_codes() == ['X']
assert con.get_loisir_nature_codes() == ['P', 'L', 'S', '1', '2', '3', '4', '5', '6', '7', '8', '9']
def test_manager(admin_user, app, con):
app = login(app)
path = '/%s/%s/' % (con.get_connector_slug(), con.slug)
resp = app.get(path)
assert [
x.text
for x in resp.html.find('div', {'id': 'description'}).find_all('p')
if x.text.startswith('Codes des natures des activités péri-scolaires')
][0].split(':')[1].strip() == 'A,R'
assert [
x.text
for x in resp.html.find('div', {'id': 'description'}).find_all('p')
if x.text.startswith('Codes des natures des activités extra-scolaires')
][0].split(':')[1].strip() == 'X'
assert (
'P,L,S,1,2,3'
in [
x.text
for x in resp.html.find('div', {'id': 'description'}).find_all('p')
if x.text.startswith('Codes des natures des activités loisirs')
][0]
)
path = '/manage/%s/%s/edit' % (con.get_connector_slug(), con.slug)
resp = app.get(path)
resp.form['title'] = 'Malis connector'
resp.form['description'] = 'Malis connector'
resp.form['perisco_nature_codes'] = 'P,L, O ,P'
resp.form['extrasco_nature_codes'] = 'Z'
resp.form['loisir_nature_codes'] = ''
resp = resp.form.submit()
resp = resp.follow()
assert [
x.text
for x in resp.html.find('div', {'id': 'description'}).find_all('p')
if x.text.startswith('Codes des natures des activités péri-scolaires')
][0].split(':')[1].strip() == 'P,L, O ,P'
assert [
x.text
for x in resp.html.find('div', {'id': 'description'}).find_all('p')
if x.text.startswith('Codes des natures des activités extra-scolaires')
][0].split(':')[1].strip() == 'Z'
assert 'Codes des natures des activités loisirs' not in [
x.text for x in resp.html.find('div', {'id': 'description'}).find_all('p')
]
con = ToulouseMaelis.objects.get()
assert con.get_perisco_nature_codes() == ['P', 'L', 'O', 'P']
assert con.get_extrasco_nature_codes() == ['Z']
assert con.get_loisir_nature_codes() == []
@mock.patch('passerelle.utils.Request.get')
def test_call_with_wrong_wsdl_url(mocked_get, con):
mocked_get.side_effect = CONNECTION_ERROR