diff --git a/src/iosanita/contenttypes/content/servizio.py b/src/iosanita/contenttypes/content/servizio.py new file mode 100644 index 0000000..e308ff5 --- /dev/null +++ b/src/iosanita/contenttypes/content/servizio.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +from iosanita.contenttypes.interfaces.servizio import IServizio +from plone.dexterity.content import Container +from zope.interface import implementer + + +@implementer(IServizio) +class Servizio(Container): + """ """ diff --git a/src/iosanita/contenttypes/indexers/configure.zcml b/src/iosanita/contenttypes/indexers/configure.zcml index 20b6b42..b31b0f7 100644 --- a/src/iosanita/contenttypes/indexers/configure.zcml +++ b/src/iosanita/contenttypes/indexers/configure.zcml @@ -28,10 +28,7 @@ factory=".events.rassegna" name="rassegna" /> - + diff --git a/src/iosanita/contenttypes/indexers/uo_appartenenza.py b/src/iosanita/contenttypes/indexers/uo.py similarity index 69% rename from src/iosanita/contenttypes/indexers/uo_appartenenza.py rename to src/iosanita/contenttypes/indexers/uo.py index c0bb8c0..b3b46fd 100644 --- a/src/iosanita/contenttypes/indexers/uo_appartenenza.py +++ b/src/iosanita/contenttypes/indexers/uo.py @@ -4,10 +4,10 @@ @indexer(IDexterityContent) -def uo_appartenenza_uid(context, **kw): +def uo_correlata_uid(context, **kw): """ """ return [ x.to_object.UID() - for x in getattr(context.aq_base, "uo_appartenenza", []) + for x in getattr(context.aq_base, "uo_correlata", []) if x.to_object ] diff --git a/src/iosanita/contenttypes/interfaces/servizio.py b/src/iosanita/contenttypes/interfaces/servizio.py new file mode 100644 index 0000000..7f53478 --- /dev/null +++ b/src/iosanita/contenttypes/interfaces/servizio.py @@ -0,0 +1,219 @@ +# -*- coding: utf-8 -*- + +from collective.volto.blocksfield.field import BlocksField +from iosanita.contenttypes import _ +from iosanita.contenttypes.interfaces import IIosanitaContenttypes +from plone.app.z3cform.widget import RelatedItemsFieldWidget +from plone.autoform import directives as form +from plone.supermodel import model +from z3c.relationfield.schema import RelationChoice +from z3c.relationfield.schema import RelationList +from zope import schema +from plone.app.dexterity import textindexer + + +class IServizio(model.Schema, IIosanitaContenttypes): + """Marker interface for content type""" + + stato_servizio = schema.Bool( + title=_("stato_servizio_label", default="Stato servzio"), + required=False, + description=_( + "stato_servizio_help", + default="Indica se il servizio è effettivamente fruibile o meno. " + "Spuntare se non è fruibile.", + ), + ) + + cosa_serve = BlocksField( + title=_("cosa_serve_label", default="Cosa serve"), + required=True, + description=_( + "cosa_serve_help", + default="Descrizione delle istruzioni per usufruire del servizio.", + ), + ) + + come_accedere = BlocksField( + title=_("come_accedere_label", default="Come accedere"), + required=True, + description=_( + "come_accedere_help", + default="Descrizione della procedura da seguire per poter" + " usufruire del servizio.", + ), + ) + orari = BlocksField( + title=_("orari_servizio_label", default="Orari del servizio"), + required=True, + description=_( + "orari_servizio_help", + default="Indicazione dell'orario in cui è possibile usufruire del servizio o della prestazione. " + "Se gli orari del servizio coincidono con quelli della struttura che lo eroga, ripeterli anche qui.", + ), + ) + + piattaforma_online_link = schema.TextLine( + title=_("piattaforma_online_link_label", default="Piattaforma online"), + description=_( + "piattaforma_online_link_help", + default="Collegamento con l'eventuale piattaforma online del servzio.", + ), + required=False, + ) + piattaforma_online_label = schema.TextLine( + title=_( + "piattaforma_online_label", + default="Etichetta bottone per piattaforma online", + ), + description=_( + "piattaforma_online_help", + default="Testo da mostrare nel bottone del link alla piattaforma online.", + ), + default="Prenota online", + required=False, + ) + strutture_correlate = RelationList( + title=_( + "strutture_correlate_label", + default="Struttura correlata", + ), + description=_( + "strutture_correlate_help", + default="Seleziona una struttura correlata.", + ), + default=[], + value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"), + required=False, + missing_value=(), + ) + + tempi_attesa = BlocksField( + title=_("tempi_attesa_label", default="Tempi di attesa"), + required=True, + description=_("tempi_attesa_help", default=""), + ) + costi = BlocksField( + title=_("costi_label", default="Costi"), + required=True, + description=_("costi_help", default=""), + ) + + descrizione_estesa = BlocksField( + title=_("descrizione_estesa_servizio_label", default="Descrizione estesa"), + required=False, + description=_( + "descrizione_estesa_servizio_help", + default="Descrizione estesa e completa del servizio o della prestazione. " + "Se si sta descrivendo un Percorso di Cura specificare contestualmente l'elenco delle prestazioni afferenti al percorso.", + ), + ) + procedure_collegate_esito = BlocksField( + title=_( + "procedure_collegate_esito_label", default="Procedure collegate all'esito" + ), + description=_( + "procedure_collegate_esito_help", + default="Spiegazione relativa all'esito della procedura e dove eventualmente " + "sarà disponibile o sarà possibile ritirare l'esito (sede dell'ufficio, orari, numero sportello, etc.)", + ), + required=False, + ) + + uo_correlata = RelationList( + title=_( + "uo_correlata_servizio_label", default="Unità organizzativa responsabile" + ), + default=[], + value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"), + required=True, + missing_value=(), + ) + responsabile_correlato = RelationList( + title=_( + "responsabile_correlato_servizio_label", default="Responsabile del servizio" + ), + default=[], + value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"), + required=True, + missing_value=(), + ) + + # widgets + form.widget( + "strutture_correlate", + RelatedItemsFieldWidget, + vocabulary="plone.app.vocabularies.Catalog", + pattern_options={ + "selectableTypes": ["Struttura"], + }, + ) + form.widget( + "uo_correlata", + RelatedItemsFieldWidget, + vocabulary="plone.app.vocabularies.Catalog", + pattern_options={ + "maximumSelectionSize": 1, + "selectableTypes": ["UnitaOrganizzativa"], + }, + ) + form.widget( + "responsabile_correlato", + RelatedItemsFieldWidget, + vocabulary="plone.app.vocabularies.Catalog", + pattern_options={ + "maximumSelectionSize": 1, + "selectableTypes": ["Persona"], + }, + ) + + # fieldsets + model.fieldset( + "cosa_serve", + label=_("cosa_serve_label", default="Cosa serve"), + fields=["cosa_serve"], + ) + model.fieldset( + "accedi_al_servizio", + label=_("accedi_al_servizio_label", default="Accedi al servizio"), + fields=["come_accedere", "piattaforma_online_link", "piattaforma_online_label"], + ) + model.fieldset( + "tempi_attesa", + label=_("tempi_attesa_label", default="Tempi di attesa"), + fields=["tempi_attesa"], + ) + model.fieldset( + "costi", + label=_("costi_label", default="Costi"), + fields=["costi"], + ) + model.fieldset( + "dove", + label=_("dove_label", default="Dove"), + fields=["strutture_correlate"], + ) + model.fieldset( + "orari", + label=_("orari_servizio_label", default="Orari del servizio"), + fields=["orari"], + ) + model.fieldset( + "cosa_e", + label=_("cosa_e_fieldset", default="Cos'è"), + fields=["descrizione_estesa"], + ) + model.fieldset( + "procedure_collegate_esito", + label=_( + "procedure_collegate_esito_label", default="Procedure collegate all'esito" + ), + fields=["procedure_collegate_esito"], + ) + model.fieldset( + "responsabili", + label=_("responsabili_label", default="Responsabili"), + fields=["uo_correlata", "responsabile_correlato"], + ) + + textindexer.searchable("cosa_serve") diff --git a/src/iosanita/contenttypes/interfaces/struttura.py b/src/iosanita/contenttypes/interfaces/struttura.py index bea6ec0..278188d 100644 --- a/src/iosanita/contenttypes/interfaces/struttura.py +++ b/src/iosanita/contenttypes/interfaces/struttura.py @@ -17,7 +17,7 @@ class IStruttura(model.Schema, IIosanitaContenttypes): title=_("descrizione_estesa_struttura_label", default="Descrizione estesa"), required=False, description=_( - "descrizione_estesa_label_help", + "descrizione_estesa_struttura_help", default="Descrizione più estesa della struttura con riferimento alle principali attività sanitarie svolte.", ), ) @@ -31,22 +31,22 @@ class IStruttura(model.Schema, IIosanitaContenttypes): ), ) - orari_apertura = BlocksField( - title=_("orari_apertura_label", default="Orari di apertura"), + orari = BlocksField( + title=_("orari_struttura_label", default="Orari di apertura"), required=True, description=_( - "orari_apertura_help", - default="Orario di apertura della struttura al pubblico.", + "orari_struttura_help", + default="Orari di apertura della struttura al pubblico.", ), ) - responsabile_struttura = RelationList( + responsabile_correlato = RelationList( title=_( - "responsabile_struttura_label", + "responsabile_correlato_struttura_label", default="Responsabile", ), description=_( - "responsabile_help", + "responsabile_correlato_struttura_help", default="La persona che dirige la struttura.", ), required=True, @@ -54,67 +54,63 @@ class IStruttura(model.Schema, IIosanitaContenttypes): value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"), ) - coordinatore_struttura = RelationList( + coordinatore_correlato = RelationList( title=_( - "coordinatore_label", + "coordinatore_correlato_struttura_label", default="Coordinatore", ), description=_( - "responsabile_struttura_help", + "coordinatore_correlato_struttura_help", default="La persona che coordina la struttura.", ), required=False, default=[], value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"), ) - personale_struttura = RelationList( + personale_correlato = RelationList( title=_( - "personale_label", + "personale_correlato_struttura_label", default="Personale", ), description=_( - "personale_struttura_help", + "personale_correlato_struttura_help", default="Elenco del personale che opera nella struttura.", ), required=False, default=[], value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"), ) - uo_appartenenza = RelationList( + uo_correlata = RelationList( title=_( - "uo_appartenenza_label", + "uo_correlata_struttura_label", default="Unità organizzativa di appartenenza", ), - description=_( - "uo_appartenenza_help", - default="", - ), required=False, default=[], value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"), ) form.widget( - "responsabile_struttura", + "responsabile_correlato", RelatedItemsFieldWidget, vocabulary="plone.app.vocabularies.Catalog", pattern_options={"selectableTypes": ["Persona"]}, ) form.widget( - "coordinatore_struttura", + "coordinatore_correlato", RelatedItemsFieldWidget, vocabulary="plone.app.vocabularies.Catalog", pattern_options={"selectableTypes": ["Persona"]}, ) form.widget( - "personale_struttura", + "personale_correlato", RelatedItemsFieldWidget, vocabulary="plone.app.vocabularies.Catalog", pattern_options={"selectableTypes": ["Persona"]}, ) form.widget( - "uo_appartenenza", + "uo_correlata", RelatedItemsFieldWidget, vocabulary="plone.app.vocabularies.Catalog", pattern_options={"selectableTypes": ["UnitaOrganizzativa"]}, @@ -132,22 +128,22 @@ class IStruttura(model.Schema, IIosanitaContenttypes): fields=["come_accedere"], ) model.fieldset( - "orari_apertura", - label=_("orari_apertura_label", default="Orari di apertura"), - fields=["orari_apertura"], + "orari", + label=_("orari_label", default="Orari di apertura"), + fields=["orari"], ) model.fieldset( "persone_struttura", label=_("persone_struttura_label", default="Persone struttura"), fields=[ - "responsabile_struttura", - "coordinatore_struttura", - "personale_struttura", + "responsabile_correlato", + "coordinatore_correlato", + "personale_correlato", ], ) model.fieldset( "contenuti_collegati", label=_("contenuti_collegati_label", default="Contenuti collegati"), - fields=["uo_appartenenza"], + fields=["uo_correlata"], ) diff --git a/src/iosanita/contenttypes/permissions.zcml b/src/iosanita/contenttypes/permissions.zcml index 1a69fe2..b4108b6 100644 --- a/src/iosanita/contenttypes/permissions.zcml +++ b/src/iosanita/contenttypes/permissions.zcml @@ -19,14 +19,6 @@ id="iosanita.contenttypes.AddStep" title="iosanita.contenttypes: Add Step" /> - - + diff --git a/src/iosanita/contenttypes/profiles/default/catalog.xml b/src/iosanita/contenttypes/profiles/default/catalog.xml index cea6443..0dc514d 100644 --- a/src/iosanita/contenttypes/profiles/default/catalog.xml +++ b/src/iosanita/contenttypes/profiles/default/catalog.xml @@ -19,8 +19,8 @@ - - + + diff --git a/src/iosanita/contenttypes/profiles/default/diff_tool.xml b/src/iosanita/contenttypes/profiles/default/diff_tool.xml new file mode 100644 index 0000000..8f51afd --- /dev/null +++ b/src/iosanita/contenttypes/profiles/default/diff_tool.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/iosanita/contenttypes/profiles/default/repositorytool.xml b/src/iosanita/contenttypes/profiles/default/repositorytool.xml new file mode 100644 index 0000000..e7535fc --- /dev/null +++ b/src/iosanita/contenttypes/profiles/default/repositorytool.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/iosanita/contenttypes/profiles/default/rolemap.xml b/src/iosanita/contenttypes/profiles/default/rolemap.xml index c977627..3647c74 100644 --- a/src/iosanita/contenttypes/profiles/default/rolemap.xml +++ b/src/iosanita/contenttypes/profiles/default/rolemap.xml @@ -19,24 +19,6 @@ - - - - - - - - - - - - - - @@ -71,5 +53,11 @@ - + + + + + + + diff --git a/src/iosanita/contenttypes/profiles/default/types.xml b/src/iosanita/contenttypes/profiles/default/types.xml index fe3d5fa..bc925a3 100644 --- a/src/iosanita/contenttypes/profiles/default/types.xml +++ b/src/iosanita/contenttypes/profiles/default/types.xml @@ -21,4 +21,6 @@ + + diff --git a/src/iosanita/contenttypes/profiles/default/types/Document.xml b/src/iosanita/contenttypes/profiles/default/types/Document.xml index 0d5096a..b6c463d 100644 --- a/src/iosanita/contenttypes/profiles/default/types/Document.xml +++ b/src/iosanita/contenttypes/profiles/default/types/Document.xml @@ -5,11 +5,7 @@ i18n:domain="plone" > - - - + diff --git a/src/iosanita/contenttypes/profiles/default/types/Servizio.xml b/src/iosanita/contenttypes/profiles/default/types/Servizio.xml new file mode 100644 index 0000000..133ca73 --- /dev/null +++ b/src/iosanita/contenttypes/profiles/default/types/Servizio.xml @@ -0,0 +1,111 @@ + + + + + Servizio + + + False + Servizio + + + + + True + True + + + + + + iosanita.contenttypes.AddServizio + iosanita.contenttypes.content.servizio.Servizio + + + iosanita.contenttypes.interfaces.servizio.IServizio + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + string:${folder_url}/++add++Servizio + view + False + view + + + + + + + + + + + + + + + + + + + diff --git a/src/iosanita/contenttypes/restapi/services/types/get.py b/src/iosanita/contenttypes/restapi/services/types/get.py index 5a0402b..18596b8 100644 --- a/src/iosanita/contenttypes/restapi/services/types/get.py +++ b/src/iosanita/contenttypes/restapi/services/types/get.py @@ -33,7 +33,7 @@ class FieldsetsMismatchError(Exception): "a_chi_si_rivolge", "dove", "come_accedere", - "orari_apertura", + "orari", "contatti", "servizi", "persone_struttura", @@ -58,18 +58,18 @@ class FieldsetsMismatchError(Exception): ], "Servizio": [ "default", - "cose", - "a_chi_si_rivolge", - "accedi_al_servizio", "cosa_serve", - "costi_e_vincoli", - "tempi_e_scadenze", - "casi_particolari", + "accedi_al_servizio", + "tempi_attesa", + "costi", + "dove", + "orari", "contatti", - "documenti", - "link_utili", + "cosa_e", + "a_chi_si_rivolge", + "procedure_collegate_esito", + "responsabili", "ulteriori_informazioni", - "contenuti_collegati", ], "UnitaOrganizzativa": [ "default", diff --git a/src/iosanita/contenttypes/tests/test_ct_servizio.py b/src/iosanita/contenttypes/tests/test_ct_servizio.py new file mode 100644 index 0000000..8bf3ad7 --- /dev/null +++ b/src/iosanita/contenttypes/tests/test_ct_servizio.py @@ -0,0 +1,233 @@ +# -*- coding: utf-8 -*- +"""Setup tests for this package.""" +from iosanita.contenttypes.testing import RESTAPI_TESTING +from plone import api +from plone.app.testing import setRoles +from plone.app.testing import SITE_OWNER_NAME +from plone.app.testing import SITE_OWNER_PASSWORD +from plone.app.testing import TEST_USER_ID +from plone.restapi.testing import RelativeSession + +import unittest + + +class TestServizioSchema(unittest.TestCase): + layer = RESTAPI_TESTING + + def setUp(self): + self.app = self.layer["app"] + self.portal = self.layer["portal"] + self.request = self.layer["request"] + self.portal_url = self.portal.absolute_url() + setRoles(self.portal, TEST_USER_ID, ["Manager"]) + + self.api_session = RelativeSession(self.portal_url) + self.api_session.headers.update({"Accept": "application/json"}) + self.api_session.auth = (SITE_OWNER_NAME, SITE_OWNER_PASSWORD) + + def tearDown(self): + self.api_session.close() + + def test_behaviors_enabled_for_servizio(self): + portal_types = api.portal.get_tool(name="portal_types") + self.assertEqual( + portal_types["Servizio"].behaviors, + ( + "plone.namefromtitle", + "plone.allowdiscussion", + "plone.excludefromnavigation", + "plone.shortname", + "plone.ownership", + "plone.publication", + "plone.categorization", + "plone.basic", + "iosanita.contenttypes.behavior.sottotitolo", + "plone.locking", + "plone.constraintypes", + "plone.leadimage", + "volto.preview_image", + "plone.relateditems", + "plone.textindexer", + "plone.translatable", + "kitconcept.seo", + "plone.versioning", + "iosanita.contenttypes.behavior.contatti", + "iosanita.contenttypes.behavior.a_chi_si_rivolge", + "collective.taxonomy.generated.a_chi_si_rivolge_tassonomia", + "collective.taxonomy.generated.parliamo_di", + "iosanita.contenttypes.behavior.ulteriori_informazioni", + ), + ) + + def test_servizio_fieldsets(self): + """ + Get the list from restapi + """ + resp = self.api_session.get("@types/Servizio").json() + self.assertEqual(len(resp["fieldsets"]), 18) + self.assertEqual( + [x.get("id") for x in resp["fieldsets"]], + [ + "default", + "cosa_serve", + "accedi_al_servizio", + "tempi_attesa", + "costi", + "dove", + "orari", + "contatti", + "cosa_e", + "a_chi_si_rivolge", + "procedure_collegate_esito", + "responsabili", + "ulteriori_informazioni", + "settings", + "ownership", + "dates", + "categorization", + "seo", + ], + ) + + def test_servizio_required_fields(self): + resp = self.api_session.get("@types/Servizio").json() + self.assertEqual( + sorted(resp["required"]), + sorted( + [ + "title", + "cosa_serve", + "come_accedere", + "tempi_attesa", + "costi", + "orari", + "uo_correlata", + "responsabile_correlato", + "punti_di_contatto", + "a_chi_si_rivolge", + "description", + ] + ), + ) + + def test_servizio_fields_default_fieldset(self): + """ + Get the list from restapi + """ + resp = self.api_session.get("@types/Servizio").json() + self.assertEqual( + resp["fieldsets"][0]["fields"], + [ + "title", + "description", + "stato_servizio", + "sottotitolo", + "image", + "image_caption", + "preview_image", + "preview_caption", + "parliamo_di", + ], + ) + + def test_servizio_fields_cosa_serve_fieldset(self): + """ + Get the list from restapi + """ + resp = self.api_session.get("@types/Servizio").json() + self.assertEqual( + resp["fieldsets"][1]["fields"], + ["cosa_serve"], + ) + + def test_servizio_fields_accedi_al_servizio_fieldset(self): + """ + Get the list from restapi + """ + resp = self.api_session.get("@types/Servizio").json() + self.assertEqual( + resp["fieldsets"][2]["fields"], + ["come_accedere", "piattaforma_online_link", "piattaforma_online_label"], + ) + + def test_servizio_fields_tempi_attesa_fieldset(self): + """ + Get the list from restapi + """ + resp = self.api_session.get("@types/Servizio").json() + self.assertEqual( + resp["fieldsets"][3]["fields"], + ["tempi_attesa"], + ) + + def test_servizio_fields_costi_fieldset(self): + """ + Get the list from restapi + """ + resp = self.api_session.get("@types/Servizio").json() + self.assertEqual( + resp["fieldsets"][4]["fields"], + ["costi"], + ) + + def test_servizio_fields_strutture_correlate_fieldset(self): + """ + Get the list from restapi + """ + resp = self.api_session.get("@types/Servizio").json() + self.assertEqual(resp["fieldsets"][5]["fields"], ["strutture_correlate"]) + + def test_servizio_fields_orari_fieldset(self): + """ + Get the list from restapi + """ + resp = self.api_session.get("@types/Servizio").json() + self.assertEqual(resp["fieldsets"][6]["fields"], ["orari"]) + + def test_servizio_fields_contatti_fieldset(self): + """ + Get the list from restapi + """ + resp = self.api_session.get("@types/Servizio").json() + self.assertEqual(resp["fieldsets"][7]["fields"], ["punti_di_contatto"]) + + def test_servizio_fields_cosa_e_fieldset(self): + """ + Get the list from restapi + """ + resp = self.api_session.get("@types/Servizio").json() + self.assertEqual(resp["fieldsets"][8]["fields"], ["descrizione_estesa"]) + + def test_servizio_fields_a_chi_si_rivolge_fieldset(self): + """ + Get the list from restapi + """ + resp = self.api_session.get("@types/Servizio").json() + self.assertEqual( + resp["fieldsets"][9]["fields"], + ["a_chi_si_rivolge", "a_chi_si_rivolge_tassonomia"], + ) + + def test_servizio_fields_esito_fieldset(self): + """ + Get the list from restapi + """ + resp = self.api_session.get("@types/Servizio").json() + self.assertEqual(resp["fieldsets"][10]["fields"], ["procedure_collegate_esito"]) + + def test_servizio_fields_responsabili_fieldset(self): + """ + Get the list from restapi + """ + resp = self.api_session.get("@types/Servizio").json() + self.assertEqual( + resp["fieldsets"][11]["fields"], + ["uo_correlata", "responsabile_correlato"], + ) + + def test_servizio_fields_ulteriori_informazioni_fieldset(self): + """ + Get the list from restapi + """ + resp = self.api_session.get("@types/Servizio").json() + self.assertEqual(resp["fieldsets"][12]["fields"], ["ulteriori_informazioni"]) diff --git a/src/iosanita/contenttypes/tests/test_ct_struttura.py b/src/iosanita/contenttypes/tests/test_ct_struttura.py index 7be9c08..e0fe988 100644 --- a/src/iosanita/contenttypes/tests/test_ct_struttura.py +++ b/src/iosanita/contenttypes/tests/test_ct_struttura.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- """Setup tests for this package.""" -from iosanita.contenttypes.testing import INTEGRATION_TESTING from iosanita.contenttypes.testing import RESTAPI_TESTING from plone import api from plone.app.testing import setRoles @@ -8,11 +7,6 @@ from plone.app.testing import SITE_OWNER_PASSWORD from plone.app.testing import TEST_USER_ID from plone.restapi.testing import RelativeSession -from z3c.relationfield import RelationValue -from zope.component import getUtility -from zope.event import notify -from zope.intid.interfaces import IIntIds -from zope.lifecycleevent import ObjectModifiedEvent import unittest @@ -82,7 +76,7 @@ def test_struttura_fieldsets(self): "a_chi_si_rivolge", "dove", "come_accedere", - "orari_apertura", + "orari", "contatti", "servizi", "persone_struttura", @@ -104,9 +98,9 @@ def test_struttura_required_fields(self): [ "a_chi_si_rivolge", "come_accedere", - "orari_apertura", + "orari", "punti_di_contatto", - "responsabile_struttura", + "responsabile_correlato", "title", ] ), @@ -181,12 +175,12 @@ def test_struttura_fields_come_accedere_fieldset(self): ["come_accedere"], ) - def test_struttura_fields_orari_apertura_fieldset(self): + def test_struttura_fields_orari_fieldset(self): """ Get the list from restapi """ resp = self.api_session.get("@types/Struttura").json() - self.assertEqual(resp["fieldsets"][5]["fields"], ["orari_apertura"]) + self.assertEqual(resp["fieldsets"][5]["fields"], ["orari"]) def test_struttura_fields_contatti_fieldset(self): """ @@ -209,17 +203,17 @@ def test_struttura_fields_persone_struttura_fieldset(self): resp = self.api_session.get("@types/Struttura").json() self.assertEqual( resp["fieldsets"][8]["fields"], - ["responsabile_struttura", "coordinatore_struttura", "personale_struttura"], + ["responsabile_correlato", "coordinatore_correlato", "personale_correlato"], ) - def test_struttura_fields_contenuti_collegati_fieldset(self): + def test_struttura_fields_correlati_fieldset(self): """ Get the list from restapi """ resp = self.api_session.get("@types/Struttura").json() self.assertEqual( resp["fieldsets"][9]["fields"], - ["uo_appartenenza", "strutture_correlate"], + ["uo_correlata", "strutture_correlate"], ) def test_struttura_fields_ulteriori_informazioni_fieldset(self): @@ -227,36 +221,7 @@ def test_struttura_fields_ulteriori_informazioni_fieldset(self): Get the list from restapi """ resp = self.api_session.get("@types/Struttura").json() - self.assertEqual(resp["fieldsets"][10]["fields"], ["ulteriori_informazioni"]) - - -class TestStruttura(unittest.TestCase): - """Test that design.plone.contenttypes is properly installed.""" - - layer = INTEGRATION_TESTING - - def setUp(self): - self.app = self.layer["app"] - self.portal = self.layer["portal"] - self.portal_url = self.portal.absolute_url() - setRoles(self.portal, TEST_USER_ID, ["Manager"]) - - self.uo = api.content.create( - container=self.portal, type="UnitaOrganizzativa", title="uo" - ) - - def test_uo_appartenenza_reference_is_in_catalog(self): - """ """ - struttura = api.content.create( - container=self.portal, - type="Struttura", - title="Test servizio", + self.assertEqual( + resp["fieldsets"][10]["fields"], + ["ulteriori_informazioni"], ) - intids = getUtility(IIntIds) - struttura.uo_appartenenza = [RelationValue(intids.getId(self.uo))] - notify(ObjectModifiedEvent(struttura)) - - res = api.content.find(uo_appartenenza_uid=self.uo.UID()) - - self.assertEqual(len(res), 1) - self.assertEqual(res[0].UID, struttura.UID()) diff --git a/src/iosanita/contenttypes/tests/test_uo_correlata.py b/src/iosanita/contenttypes/tests/test_uo_correlata.py new file mode 100644 index 0000000..55e92fc --- /dev/null +++ b/src/iosanita/contenttypes/tests/test_uo_correlata.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +"""Setup tests for this package.""" +from iosanita.contenttypes.testing import INTEGRATION_TESTING +from plone import api +from plone.app.testing import setRoles +from plone.app.testing import TEST_USER_ID +from z3c.relationfield import RelationValue +from zope.component import getUtility +from zope.event import notify +from zope.intid.interfaces import IIntIds +from zope.lifecycleevent import ObjectModifiedEvent + +import unittest + + +class TestUOCorrelata(unittest.TestCase): + """""" + + layer = INTEGRATION_TESTING + + def setUp(self): + self.app = self.layer["app"] + self.portal = self.layer["portal"] + self.portal_url = self.portal.absolute_url() + setRoles(self.portal, TEST_USER_ID, ["Manager"]) + + self.uo = api.content.create( + container=self.portal, type="UnitaOrganizzativa", title="uo" + ) + + def test_uo_correlata_reference_is_in_catalog(self): + """ """ + struttura = api.content.create( + container=self.portal, + type="Struttura", + title="Test servizio", + ) + intids = getUtility(IIntIds) + struttura.uo_correlata = [RelationValue(intids.getId(self.uo))] + notify(ObjectModifiedEvent(struttura)) + + res = api.content.find(uo_correlata_uid=self.uo.UID()) + + self.assertEqual(len(res), 1) + self.assertEqual(res[0].UID, struttura.UID())