Skip to content

Commit

Permalink
Behavior para informações da secretaria e tipo de conteúdo secretaria
Browse files Browse the repository at this point in the history
  • Loading branch information
samoel-silva committed Oct 16, 2024
1 parent c5b771d commit 68ce179
Show file tree
Hide file tree
Showing 11 changed files with 235 additions and 4 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ var/
.installed.txt
.lock

*.mo

##
# Add extra configuration options in .meta.toml:
# [gitignore]
Expand Down
Empty file.
16 changes: 16 additions & 0 deletions src/procergs/sitedemo/behaviors/configure.zcml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:plone="http://namespaces.plone.org/plone"
>



<plone:behavior
name="procergs.sitedemo.behavior.informacoes_secretaria"
title="Informações da Secretaria"
description="Adiciona campos de informações de secretaria."
provides=".informacoes_secretaria.IInformacoesSecretaria"
/>


</configure>
31 changes: 31 additions & 0 deletions src/procergs/sitedemo/behaviors/informacoes_secretaria.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from plone.autoform.interfaces import IFormFieldProvider
from plone.supermodel import model
from procergs.sitedemo import _
from zope import schema
from zope.interface import provider


@provider(IFormFieldProvider)
class IInformacoesSecretaria(model.Schema):
"""Provê campos de endereço."""

model.fieldset(
"secretaria",
_("Informações Secretaria"),
fields=[
"nome_secretaria_vinculada",
"url_secretaria_vinculada",
],
)

nome_secretaria_vinculada = schema.TextLine(
title=_("Gnome da Secretaria Vinculada"),
description=_("Informe o gnome da secretaria vinculada"),
required=False,
)

url_secretaria_vinculada = schema.TextLine(
title=_("URL da Secretaria Vinculada"),
description=_("Informe a URL da secretaria vinculada"),
required=False,
)
4 changes: 4 additions & 0 deletions src/procergs/sitedemo/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
file="permissions.zcml"
/>

<include file="permissions.zcml" />

<include file="dependencies.zcml" />
<include file="profiles.zcml" />

Expand All @@ -19,4 +21,6 @@
<include package=".serializers" />
<include package=".vocabularies" />

<include package=".behaviors" />

</configure>
12 changes: 12 additions & 0 deletions src/procergs/sitedemo/content/secretaria.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from plone.dexterity.content import Container
from plone.supermodel import model
from zope.interface import implementer


class ISecretaria(model.Schema):
"""Dados da secretaria"""


@implementer(ISecretaria)
class Secretaria(Container):
"""Uma secretaria de governo."""
16 changes: 16 additions & 0 deletions src/procergs/sitedemo/permissions.zcml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:zcml="http://namespaces.zope.org/zcml"
i18n_domain="procergs.sitedemo"
>

<configure zcml:condition="installed AccessControl.security">

<permission
id="procergs.sitedemo.secretaria.add"
title="procergs.sitedemo: Add Secretaria"
/>

</configure>

</configure>
7 changes: 6 additions & 1 deletion src/procergs/sitedemo/profiles/default/rolemap.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<rolemap>
<permissions>

<permission acquire="False"
name="procergs.sitedemo: Add Secretaria"
>
<role name="Manager" />
<role name="Site Administrator" />
</permission>
</permissions>
</rolemap>
5 changes: 2 additions & 3 deletions src/procergs/sitedemo/profiles/default/types.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@
<object meta_type="Plone Types Tool"
name="portal_types"
>
<!--
<object meta_type="Dexterity FTI"
name="MyType"
name="Secretaria"
/>
-->

</object>
44 changes: 44 additions & 0 deletions src/procergs/sitedemo/profiles/default/types/Secretaria.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<object xmlns:i18n="http://xml.zope.org/namespaces/i18n"
meta_type="Dexterity FTI"
name="Secretaria"
i18n:domain="procergs.sitedemo"
>

<!-- Basic properties -->
<property name="title"
i18n:translate=""
>Secretaria</property>
<property name="description"
i18n:translate=""
>Uma Secretaria dentro da estrutura de governo</property>

<property name="allow_discussion">False</property>
<property name="factory">Secretaria</property>

<!-- Hierarchy control -->
<property name="filter_content_types">False</property>
<property name="allowed_content_types" />
<property name="global_allow">True</property>

<!-- Schema, class and security -->
<property name="add_permission">procergs.sitedemo.secretaria.add</property>
<property name="klass">procergs.sitedemo.content.secretaria.Secretaria</property>
<property name="schema">procergs.sitedemo.content.secretaria.ISecretaria</property>

<!-- Enabled behaviors -->
<property name="behaviors"
purge="false"
>
<element value="plone.basic" />
<element value="plone.namefromtitle" />
<element value="plone.shortname" />
<element value="plone.excludefromnavigation" />
<element value="procergs.sitedemo.behavior.informacoes_secretaria" />
<element value="volto.preview_image" />
<element value="plone.leadimage" />
<element value="plone.constraintypes" />
<element value="plone.versioning" />
</property>

</object>
102 changes: 102 additions & 0 deletions tests/content/test_content_secretaria.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
from AccessControl import Unauthorized
from plone import api
from plone.dexterity.fti import DexterityFTI
from procergs.sitedemo.content.secretaria import Secretaria
from zope.component import createObject

import pytest


CONTENT_TYPE = "Secretaria"


@pytest.fixture
def secretaria_payload() -> dict:
"""Return a payload to create a new secretaria."""
return {
"type": "Secretaria",
"id": "casacivil",
"title": "Casa Civil",
"description": (
"A Casa Civil do Governo do Estado foi criada em janeiro de 1954,"
"pelo então governador Ernesto Dornelles"
),
"nome_secretaria_vinculada": "Governo",
"url_secretaria_vinculada": "rs.gov.br",
}


@pytest.fixture()
def content(portal, secretaria_payload) -> Secretaria:
with api.env.adopt_roles(["Manager"]):
content = api.content.create(container=portal, **secretaria_payload)
return content


class TestSecretaria:
@pytest.fixture(autouse=True)
def _setup(self, get_fti, portal):
self.fti = get_fti(CONTENT_TYPE)
self.portal = portal

def test_fti(self):
assert isinstance(self.fti, DexterityFTI)

def test_factory(self):
factory = self.fti.factory
obj = createObject(factory)
assert obj is not None
assert isinstance(obj, Secretaria)

@pytest.mark.parametrize(
"behavior",
[
"plone.basic",
"plone.namefromtitle",
"plone.shortname",
"plone.excludefromnavigation",
"plone.versioning",
"plone.constraintypes",
"volto.preview_image",
],
)
def test_has_behavior(self, get_behaviors, behavior):
assert behavior in get_behaviors(CONTENT_TYPE)

@pytest.mark.parametrize(
"role,allowed",
[
["Manager", True],
["Site Administrator", True],
["Editor", False],
["Contributor", False],
],
)
def test_create(self, secretaria_payload, role, allowed):
with api.env.adopt_roles([role]):
if allowed:
content = api.content.create(
container=self.portal, **secretaria_payload
)
assert content.portal_type == CONTENT_TYPE
assert isinstance(content, Secretaria)
else:
with pytest.raises(Unauthorized):
api.content.create(container=self.portal, **secretaria_payload)

@pytest.mark.parametrize(
"role,allowed",
[
["Manager", False],
["Site Administrator", False],
["Editor", False],
["Contributor", False],
],
)
def test_permission_inside_content(self, content, role, allowed):
current_user = api.user.get_current()
with api.env.adopt_roles([role]):
can_add = api.user.has_permission(
"procergs.sitedemo: Add Secretaria", user=current_user, obj=content
)
assert can_add is allowed

0 comments on commit 68ce179

Please sign in to comment.