diff --git a/passerelle/contrib/toulouse_maelis/migrations/0006_auto_20230324_1730.py b/passerelle/contrib/toulouse_maelis/migrations/0006_auto_20230324_1730.py new file mode 100644 index 00000000..aead6a7f --- /dev/null +++ b/passerelle/contrib/toulouse_maelis/migrations/0006_auto_20230324_1730.py @@ -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', + ), + ), + ] diff --git a/passerelle/contrib/toulouse_maelis/models.py b/passerelle/contrib/toulouse_maelis/models.py index e1619918..3abb6b2e 100644 --- a/passerelle/contrib/toulouse_maelis/models.py +++ b/passerelle/contrib/toulouse_maelis/models.py @@ -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' diff --git a/tests/test_toulouse_maelis.py b/tests/test_toulouse_maelis.py index 03fd712c..f1ee7828 100644 --- a/tests/test_toulouse_maelis.py +++ b/tests/test_toulouse_maelis.py @@ -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