Skip to content

Commit

Permalink
Merge 738c70e into 28764a9
Browse files Browse the repository at this point in the history
  • Loading branch information
nils-van-zuijlen committed Aug 3, 2018
2 parents 28764a9 + 738c70e commit a27374a
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 29 deletions.
10 changes: 2 additions & 8 deletions templates/base.html
Expand Up @@ -9,6 +9,7 @@
{% load staticfiles %}
{% load thumbnail %}
{% load topbar %}
{% load messages %}


<!DOCTYPE html>
Expand Down Expand Up @@ -635,14 +636,7 @@
{% block doc_api %}
<div class="main wrapper clearfix">
<main class="content-container" role="main" id="content">
{% if messages %}
{% for message in messages %}
<div class="alert-box {{ message.tags }}">
<span>{{ message }}</span>
<a href="#close-alert-box" class="close-alert-box ico-after cross white">{% trans "Masquer l’alerte" %}</a>
</div>
{% endfor %}
{% endif %}
{% messages messages %}

{% block content_out %}
{% captureas schema %}
Expand Down
8 changes: 8 additions & 0 deletions templates/messages.html
@@ -0,0 +1,8 @@
{% load i18n %}

{% for message in messages %}
<div class="alert-box {{ message.tags }}">
<span>{{ message.text }}</span>
<a href="#close-alert-box" class="close-alert-box ico-after cross white">{% trans "Masquer l’alerte" %}</a>
</div>
{% endfor %}
31 changes: 10 additions & 21 deletions zds/tutorialv2/forms.py
Expand Up @@ -5,6 +5,7 @@
from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Layout, Submit, Field, ButtonHolder, Hidden
from django.core.urlresolvers import reverse
from django.core.validators import MinLengthValidator

from zds.utils.forms import CommonLayoutModalText, CommonLayoutEditor, CommonLayoutVersionEditor
from zds.utils.models import SubCategory, Licence
Expand Down Expand Up @@ -659,12 +660,19 @@ class AcceptValidationForm(forms.Form):
text = forms.CharField(
label='',
required=True,
error_messages={
'required': _('Vous devez fournir un commentaire aux validateurs.')
},
widget=forms.Textarea(
attrs={
'placeholder': _('Commentaire de publication.'),
'rows': '2'
'rows': '2',
'minlength': '3'
}
)
),
validators=[
MinLengthValidator(3, _('Votre commentaire doit faire au moins 3 caractères.'))
]
)

is_major = forms.BooleanField(
Expand Down Expand Up @@ -719,25 +727,6 @@ def __init__(self, validation, *args, **kwargs):
StrictButton(_('Publier'), type='submit')
)

def clean(self):
cleaned_data = super(AcceptValidationForm, self).clean()

text = cleaned_data.get('text')

if text is None or not text.strip():
self._errors['text'] = self.error_class(
[_('Vous devez fournir un commentaire aux validateurs.')])
if 'text' in cleaned_data:
del cleaned_data['text']

elif len(text) < 3:
self._errors['text'] = self.error_class(
[_('Votre commentaire doit faire au moins 3 caractères.')])
if 'text' in cleaned_data:
del cleaned_data['text']

return cleaned_data


class CancelValidationForm(forms.Form):

Expand Down
26 changes: 26 additions & 0 deletions zds/utils/templatetags/messages.py
@@ -0,0 +1,26 @@
from django import template

register = template.Library()

"""
Define a tag allowing to print properly all messages sent to the user.
"""


@register.inclusion_tag('messages.html', name='messages')
def messages(messages):
"""
Define a tag allowing to print properly all messages sent to the user.
:param messages: The messages list
:return: dict
"""

simple_messages = []
for message in messages:
simple_message = {'tags': str(message.tags), 'text': str(message)}
if simple_message['text'].startswith('[\'') and simple_message['text'].endswith('\']'):
simple_message['text'] = simple_message['text'][2:-2]
simple_messages.append(simple_message)

return {'messages': simple_messages}
55 changes: 55 additions & 0 deletions zds/utils/templatetags/tests/tests_messages.py
@@ -0,0 +1,55 @@
from django.contrib.messages.storage.base import Message
from django.contrib.messages import constants, utils

from django.test import SimpleTestCase

from zds.utils.templatetags.messages import messages


LEVEL_TAGS = utils.get_level_tags()


class FunctionTests(SimpleTestCase):

def test_standard_message(self):
test_messages = [Message(constants.DEBUG, 'some debug message')]
self.assertEqual(messages(test_messages), {'messages': [{'text': 'some debug message', 'tags': LEVEL_TAGS[constants.DEBUG]}]})
test_messages = [Message(constants.INFO, 'some info message')]
self.assertEqual(messages(test_messages), {'messages': [{'text': 'some info message', 'tags': LEVEL_TAGS[constants.INFO]}]})
test_messages = [Message(constants.SUCCESS, 'some success message')]
self.assertEqual(messages(test_messages), {'messages': [{'text': 'some success message', 'tags': LEVEL_TAGS[constants.SUCCESS]}]})
test_messages = [Message(constants.WARNING, 'some warning message')]
self.assertEqual(messages(test_messages), {'messages': [{'text': 'some warning message', 'tags': LEVEL_TAGS[constants.WARNING]}]})
test_messages = [Message(constants.ERROR, 'some error message')]
self.assertEqual(messages(test_messages), {'messages': [{'text': 'some error message', 'tags': LEVEL_TAGS[constants.ERROR]}]})

def test_no_messages(self):
self.assertEqual(messages([]), {'messages': []})

def test_multiple_messages(self):
test_messages = [Message(constants.DEBUG, 'some debug message'), Message(constants.INFO, 'some info message')]
expected = {'messages': [
{'text': 'some debug message', 'tags': LEVEL_TAGS[constants.DEBUG]},
{'text': 'some info message', 'tags': LEVEL_TAGS[constants.INFO]}
]}
self.assertEqual(messages(test_messages), expected)

def test_dirty_message(self):
test_messages = [Message(constants.DEBUG, '[\'some debug message\']')]
self.assertEqual(messages(test_messages), {'messages': [{'text': 'some debug message', 'tags': LEVEL_TAGS[constants.DEBUG]}]})
test_messages = [Message(constants.INFO, '[\'some info message\']')]
self.assertEqual(messages(test_messages), {'messages': [{'text': 'some info message', 'tags': LEVEL_TAGS[constants.INFO]}]})
test_messages = [Message(constants.SUCCESS, '[\'some success message\']')]
self.assertEqual(messages(test_messages), {'messages': [{'text': 'some success message', 'tags': LEVEL_TAGS[constants.SUCCESS]}]})
test_messages = [Message(constants.WARNING, '[\'some warning message\']')]
self.assertEqual(messages(test_messages), {'messages': [{'text': 'some warning message', 'tags': LEVEL_TAGS[constants.WARNING]}]})
test_messages = [Message(constants.ERROR, '[\'some error message\']')]
self.assertEqual(messages(test_messages), {'messages': [{'text': 'some error message', 'tags': LEVEL_TAGS[constants.ERROR]}]})

def test_multiple_dirty_message(self):
test_messages = [Message(constants.DEBUG, '[\'some debug message\']'), Message(constants.INFO, '[\'some info message\']')]
expected = {'messages': [
{'text': 'some debug message', 'tags': LEVEL_TAGS[constants.DEBUG]},
{'text': 'some info message', 'tags': LEVEL_TAGS[constants.INFO]}
]}
self.assertEqual(messages(test_messages), expected)

0 comments on commit a27374a

Please sign in to comment.