wcs: add a cell "forms in your care" (#31989)

This commit is contained in:
Lauréline Guérin 2019-10-21 12:03:24 +02:00
parent a7d3daa295
commit 7da07bbf2b
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
4 changed files with 173 additions and 1 deletions

View File

@ -0,0 +1,39 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.18 on 2019-10-18 13:48
from __future__ import unicode_literals
import combo.apps.wcs.models
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('auth', '0008_alter_user_username_max_length'),
('data', '0037_auto_20190701_2118'),
('wcs', '0016_backofficesubmissioncell'),
]
operations = [
migrations.CreateModel(
name='WcsCareFormsCell',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('placeholder', models.CharField(max_length=20)),
('order', models.PositiveIntegerField()),
('slug', models.SlugField(blank=True, verbose_name='Slug')),
('extra_css_class', models.CharField(blank=True, max_length=100, verbose_name='Extra classes for CSS styling')),
('public', models.BooleanField(default=True, verbose_name='Public')),
('restricted_to_unlogged', models.BooleanField(default=False, verbose_name='Restrict to unlogged users')),
('last_update_timestamp', models.DateTimeField(auto_now=True)),
('wcs_site', models.CharField(blank=True, max_length=50, verbose_name='Site')),
('groups', models.ManyToManyField(blank=True, to='auth.Group', verbose_name='Groups')),
('page', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='data.Page')),
],
options={
'verbose_name': 'Forms in your care',
},
bases=(models.Model, combo.apps.wcs.models.WcsBlurpMixin),
),
]

View File

@ -504,6 +504,17 @@ class WcsFormsOfCategoryCell(WcsCommonCategoryCell, WcsBlurpMixin):
'text': text}
@register_cell_class
class WcsCareFormsCell(WcsDataBaseCell):
api_url = '/api/forms/?limit=10'
variable_name = 'care_forms'
template_name = 'combo/wcs/care_forms.html'
cache_duration = 600
class Meta:
verbose_name = _('Forms in your care')
@register_cell_class
class CategoriesCell(WcsDataBaseCell):
api_url = '/api/categories/?full=on'

View File

@ -0,0 +1,31 @@
{% load i18n combo %}
{% block cell-content %}
{% for slug, forms in care_forms.items %}
<h2>{% trans "Forms in your care" %} - {{ forms.title }}</h2>
{% if forms.data %}
<table id="listing" class="main">
<thead>
<tr>
<th><span>{% trans "Form" %}</span></th>
<th><span>{% trans "Reference" %}</span></th>
<th><span>{% trans "Created" %}</span></th>
<th><span>{% trans "Last Modified" %}</span></th>
<th><span>{% trans "Status" %}</span></th>
</tr>
</thead>
<tbody>
{% for data in forms.data|dictsortreversed:"form_receipt_datetime" %}
<tr>
<td>{{ data.name }} {% if data.form_digest %}<br><small>{{ data.form_digest }}</small>{% endif %}</td>
<td><a href="{{ data.form_url_backoffice }}">{{ data.form_number }}</a></td>
<td>{{ data.datetime|strptime:"%Y-%m-%d %H:%M:%S" }}</td>
<td>{{ data.last_update_time|strptime:"%Y-%m-%d %H:%M:%S" }}</td>
<td>{{ data.status }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
<p><a class="pk-button" href="{{ forms.url }}backoffice/management/">{% trans "See all forms" %}</a></p>
{% endfor %}
{% endblock %}

View File

@ -20,11 +20,13 @@ from django.test import override_settings
from django.test.client import RequestFactory
from django.utils.six.moves.urllib import parse as urlparse
import mock
from combo.data.models import Page
from combo.apps.search.engines import engines
from combo.apps.wcs.models import (WcsFormCell, WcsCurrentFormsCell,
WcsFormsOfCategoryCell, WcsCurrentDraftsCell, WcsCategoryCell,
TrackingCodeInputCell, BackofficeSubmissionCell)
TrackingCodeInputCell, BackofficeSubmissionCell, WcsCareFormsCell)
from combo.utils import NothingInCacheException
@ -464,6 +466,95 @@ def test_current_forms_unknown_name_id(caplog, context):
assert 'http://127.0.0.1:8999/' not in result
assert len(caplog.records) == 0
@wcs_present
def test_care_forms_cell_setup():
cell = WcsCareFormsCell()
form_class = cell.get_default_form_class()
form = form_class()
assert form.fields['wcs_site'].widget.choices == [
('', 'All'), (u'default', u'test'), (u'other', u'test2')]
assert cell.get_additional_label() == 'All Sites'
cell.wcs_site = 'default'
assert cell.get_additional_label() == 'test'
@wcs_present
def test_care_forms_cell_render(context):
page = Page(title='xxx', slug='test_care_forms_cell_render', template_name='standard')
page.save()
cell = WcsCareFormsCell(page=page, placeholder='content', order=0)
cell.save()
context['request'].user = MockUser()
# query should fail as nothing is cached
cache.clear()
with pytest.raises(NothingInCacheException):
result = cell.render(context)
context['synchronous'] = True # to get fresh content
with mock.patch('combo.apps.wcs.models.requests.get') as requests_get:
response1 = {'err': 0, 'data': [
{
'form_receipt_datetime': '2019-10-17T16:46:03',
'form_url_backoffice': 'http://127.0.0.1:8999/backoffice/management/foobar/1/',
},
{
'form_receipt_datetime': '2019-10-17T16:46:04',
'form_url_backoffice': 'http://127.0.0.1:8999/backoffice/management/foobar/2/',
},
]}
response2 = {'err': 0, 'data': [
{
'form_receipt_datetime': '2019-10-17T16:46:05',
'form_url_backoffice': 'http://127.0.0.2:8999/backoffice/management/foobar/42/',
},
]}
mock_json = mock.Mock(status_code=200)
mock_json.json.side_effect = [response1, response2]
requests_get.return_value = mock_json
result = cell.render(context)
assert 'http://127.0.0.1:8999/backoffice/management/foobar/1' in result
assert 'http://127.0.0.1:8999/backoffice/management/foobar/2' in result
assert '"http://127.0.0.1:8999/backoffice/management/"' in result
assert 'http://127.0.0.2:8999/backoffice/management/foobar/42' in result
assert '"http://127.0.0.2:8999/backoffice/management/"' in result
data = cell.get_data(context)
assert 'default' in data
assert 'other' in data
@wcs_present
def test_care_forms_cell_render_single_site(context):
page = Page(title='xxx', slug='test_care_forms_cell_render', template_name='standard')
page.save()
cell = WcsCareFormsCell(page=page, placeholder='content', order=0)
cell.wcs_site = 'default'
cell.save()
context['request'].user = MockUser()
# query should fail as nothing is cached
cache.clear()
with pytest.raises(NothingInCacheException):
result = cell.render(context)
context['synchronous'] = True # to get fresh content
result = cell.render(context)
assert '"http://127.0.0.1:8999/backoffice/management/"' in result
assert '"http://127.0.0.2:8999/backoffice/management/"' not in result
data = cell.get_data(context)
assert 'default' in data
assert 'other' not in data
@wcs_present
def test_forms_of_category_cell_setup():
cell = WcsFormsOfCategoryCell()