bifurqué depuis cliss21/lma-wwc
ref(core): Le champ fiche_methode des fiches reflex devient un modèle saisissable depuis l'admin
Parent
ebe3f99395
révision
8c6cdd8a6f
|
@ -26,6 +26,11 @@ class FicheReflexAdmin(ModelAdmin):
|
|||
menu_icon = 'form'
|
||||
|
||||
|
||||
class FicheMethodeAdmin(ModelAdmin):
|
||||
model = models.FicheMethode
|
||||
menu_icon = 'form'
|
||||
|
||||
|
||||
class StructureAdmin(ModelAdmin):
|
||||
model = models.Structure
|
||||
menu_icon = 'group'
|
||||
|
@ -124,6 +129,7 @@ class WWCAdminGroup(ModelAdminGroup):
|
|||
items = (
|
||||
ThematiqueAdmin,
|
||||
FicheReflexAdmin,
|
||||
FicheMethodeAdmin,
|
||||
StructureAdmin,
|
||||
ContactAdmin,
|
||||
RessourceTypeAdmin,
|
||||
|
|
|
@ -15,10 +15,3 @@ class BaseStreamBlock(blocks.StreamBlock):
|
|||
paragraph_block = ParagraphBlock()
|
||||
button_block = ButtonBlock()
|
||||
image_block = ImageBlock()
|
||||
|
||||
|
||||
class MethodeBlock(blocks.StructBlock):
|
||||
"""Une méthode : une réponse à une question posée par une fiche réflexe"""
|
||||
|
||||
title = blocks.CharBlock(label="Titre")
|
||||
content = BaseStreamBlock(label="Contenu")
|
||||
|
|
|
@ -3,15 +3,13 @@ from django.core.validators import RegexValidator
|
|||
from django.db import models
|
||||
from django.utils import timezone
|
||||
|
||||
from wagtail.core.fields import RichTextField, StreamField
|
||||
from wagtail.core.fields import RichTextField
|
||||
|
||||
from modelcluster.contrib.taggit import ClusterTaggableManager
|
||||
from modelcluster.fields import ParentalKey
|
||||
from modelcluster.models import ClusterableModel
|
||||
from taggit.models import TaggedItemBase
|
||||
|
||||
from .blocks import MethodeBlock
|
||||
|
||||
URIGEO_REGEX = '^geo:([-+]?\d+(?:\.\d+)?),([-+]?\d+(?:\.\d+)?)(?:\?z=(\d{1,2}))?$' # noqa E501
|
||||
EDITOR_FEATURES = ['bold', 'italic', 'link']
|
||||
|
||||
|
@ -62,10 +60,6 @@ class FicheReflex(ClusterableModel):
|
|||
related_name="thematique",
|
||||
verbose_name="Thématique(s)",
|
||||
)
|
||||
fiches_methodes = StreamField(
|
||||
[('methode', MethodeBlock())],
|
||||
blank=True,
|
||||
)
|
||||
published = models.BooleanField("publié", default=True)
|
||||
|
||||
def __str__(self):
|
||||
|
@ -73,7 +67,29 @@ class FicheReflex(ClusterableModel):
|
|||
|
||||
class Meta:
|
||||
verbose_name = "fiche réflexe"
|
||||
verbose_name_plural = "fiches réflexes"
|
||||
verbose_name_plural = "fiches réflexe"
|
||||
|
||||
|
||||
class FicheMethode(models.Model):
|
||||
"""Une fiche qui propose des solutions à un problème"""
|
||||
|
||||
name = models.CharField("titre", max_length=128)
|
||||
fiche_reflex = ParentalKey(
|
||||
'core.FicheReflex',
|
||||
on_delete=models.CASCADE,
|
||||
related_name='fiches_methode',
|
||||
)
|
||||
contenu = RichTextField(
|
||||
"contenu",
|
||||
features=EDITOR_FEATURES,
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class Meta:
|
||||
verbose_name = "fiche méthode"
|
||||
verbose_name_plural = "fiches méthode"
|
||||
|
||||
|
||||
class Structure(models.Model):
|
||||
|
|
|
@ -19,6 +19,14 @@ def fiche_reflex():
|
|||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def fiche_methode(fiche_reflex):
|
||||
return models.FicheMethode.objects.create(
|
||||
name='Nom de la méthode pour accueillir des migrants dans son village',
|
||||
fiche_reflex=fiche_reflex,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def structure():
|
||||
return models.Structure.objects.create(nom='Cliss21')
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
from wagtail.admin.rich_text import get_rich_text_editor_widget
|
||||
from wagtail.tests.utils.form_data import nested_form_data, streamfield
|
||||
|
||||
from wagtail_factories import ImageFactory
|
||||
|
||||
|
@ -40,21 +39,7 @@ class TestFicheReflexAdmin(ModelAdminViewMixin):
|
|||
form['thematique'] = [
|
||||
thematique.pk,
|
||||
]
|
||||
methode = {
|
||||
'title': 'Première méthode',
|
||||
'content': streamfield(
|
||||
[
|
||||
(
|
||||
'paragraph_block',
|
||||
EDITOR_WIDGET.format_value('<p>Une Description</p>'),
|
||||
),
|
||||
]
|
||||
),
|
||||
}
|
||||
extra_fields = nested_form_data(
|
||||
{'fiches_methodes': streamfield([('methode', methode)])}
|
||||
)
|
||||
response = submit(form, extra_fields).follow()
|
||||
response = submit(form).follow()
|
||||
assert (
|
||||
'Fiche réflexe 'Comment accueillir des migrants dans son '
|
||||
'village ?' créé(e)'
|
||||
|
@ -69,6 +54,30 @@ class TestFicheReflexAdmin(ModelAdminViewMixin):
|
|||
) in response
|
||||
|
||||
|
||||
class TestFicheMethodeAdmin(ModelAdminViewMixin):
|
||||
model = models.FicheMethode
|
||||
|
||||
def test_create(self, fiche_reflex):
|
||||
form = self.get_create_form()
|
||||
form[
|
||||
'name'
|
||||
] = 'Nom de la méthode pour accueillir des migrants dans son village'
|
||||
form['fiche_reflex'] = fiche_reflex.id
|
||||
response = submit(form).follow()
|
||||
assert (
|
||||
'Fiche méthode 'Nom de la méthode pour accueillir des '
|
||||
'migrants dans son village' créé(e).'
|
||||
) in response
|
||||
|
||||
def test_delete(self, fiche_methode):
|
||||
form = self.get_delete_form(fiche_methode)
|
||||
response = form.submit().follow()
|
||||
assert (
|
||||
'fiche méthode 'Nom de la méthode pour accueillir des '
|
||||
'migrants dans son village' supprimé(e)'
|
||||
) in response
|
||||
|
||||
|
||||
class TestStructureAdmin(ModelAdminViewMixin):
|
||||
model = models.Structure
|
||||
|
||||
|
|
Chargement…
Référencer dans un nouveau ticket