Projet

Général

Profil

0003-agendas-delete-an-exception-source-29209.patch

Lauréline Guérin, 13 décembre 2019 22:19

Télécharger (6,8 ko)

Voir les différences:

Subject: [PATCH 3/4] agendas: delete an exception source (#29209)

 .../chrono/manager_confirm_source_delete.html | 19 ++++++
 .../chrono/manager_import_exceptions.html     |  2 +-
 chrono/manager/urls.py                        |  5 ++
 chrono/manager/views.py                       | 12 ++++
 tests/test_manager.py                         | 58 +++++++++++++++++++
 5 files changed, 95 insertions(+), 1 deletion(-)
 create mode 100644 chrono/manager/templates/chrono/manager_confirm_source_delete.html
chrono/manager/templates/chrono/manager_confirm_source_delete.html
1
{% extends "chrono/manager_home.html" %}
2
{% load i18n %}
3

  
4
{% block appbar %}
5
<h2>{{ object }}</h2>
6
{% endblock %}
7

  
8
{% block content %}
9
<form method="post">
10
  {% csrf_token %}
11
  <p>
12
  {% blocktrans %}Are you sure you want to delete this exception source?{% endblocktrans %}
13
  </p>
14
  <div class="buttons">
15
    <button class="delete-button">{% trans 'Delete' %}</button>
16
    <a class="cancel" href="{% url 'chrono-manager-agenda-settings' object.desk.agenda_id %}">{% trans 'Cancel' %}</a>
17
  </div>
18
</form>
19
{% endblock %}
chrono/manager/templates/chrono/manager_import_exceptions.html
35 35
            {% if object.ics_filename %}{% trans "replace" %}{% else %}{% trans "refresh" %}{% endif %}
36 36
          </a>
37 37
        </td>
38
        <td><a rel="popup" href="">{% trans "remove" %}</a></td>
38
        <td><a rel="popup" href="{% url 'chrono-manager-time-period-exception-source-delete' object.pk %}">{% trans "remove" %}</a></td>
39 39
      </tr>
40 40
      {% endfor %}
41 41
    </tbody>
chrono/manager/urls.py
100 100
        views.time_period_exception_list,
101 101
        name='chrono-manager-time-period-exception-list',
102 102
    ),
103
    url(
104
        r'^time-period-exceptions-source/(?P<pk>\d+)/delete$',
105
        views.time_period_exception_source_delete,
106
        name='chrono-manager-time-period-exception-source-delete',
107
    ),
103 108
    url(
104 109
        r'^agendas/events.csv$',
105 110
        views.agenda_import_events_sample_csv,
chrono/manager/views.py
51 51
    MeetingType,
52 52
    TimePeriod,
53 53
    TimePeriodException,
54
    TimePeriodExceptionSource,
54 55
)
55 56

  
56 57
from .forms import (
......
914 915
desk_import_time_period_exceptions = DeskImportTimePeriodExceptionsView.as_view()
915 916

  
916 917

  
918
class TimePeriodExceptionSourceDeleteView(ManagedDeskSubobjectMixin, DeleteView):
919
    template_name = 'chrono/manager_confirm_source_delete.html'
920
    model = TimePeriodExceptionSource
921

  
922
    def get_success_url(self):
923
        return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.desk.agenda_id})
924

  
925

  
926
time_period_exception_source_delete = TimePeriodExceptionSourceDeleteView.as_view()
927

  
928

  
917 929
def menu_json(request):
918 930
    label = _('Agendas')
919 931
    json_str = json.dumps(
tests/test_manager.py
1413 1413
    assert 'Failed to retrieve remote calendar (https://example.com/foo.ics, SSL error).' in resp.text
1414 1414

  
1415 1415

  
1416
def test_meetings_agenda_delete_time_period_exception_source(app, admin_user):
1417
    agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
1418
    desk = Desk.objects.create(agenda=agenda, label='Desk A')
1419
    MeetingType(agenda=agenda, label='Blah').save()
1420
    TimePeriod.objects.create(
1421
        weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0)
1422
    )
1423
    login(app)
1424
    # import a source
1425
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1426
    resp = resp.click('Settings')
1427
    resp = resp.click('upload')
1428
    ics_with_recurrent_exceptions = b"""BEGIN:VCALENDAR
1429
VERSION:2.0
1430
PRODID:-//foo.bar//EN
1431
BEGIN:VEVENT
1432
DTSTART:20180101
1433
DTEND:20180101
1434
SUMMARY:New Year's Eve
1435
RRULE:FREQ=YEARLY
1436
END:VEVENT
1437
END:VCALENDAR"""
1438
    resp.form['ics_file'] = Upload('exceptions.ics', ics_with_recurrent_exceptions, 'text/calendar')
1439
    resp = resp.form.submit(status=302).follow()
1440
    assert TimePeriodException.objects.filter(desk=desk).count() == 2
1441
    source1 = TimePeriodExceptionSource.objects.latest('pk')
1442
    assert source1.timeperiodexception_set.count() == 2
1443

  
1444
    # import another one
1445
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1446
    resp = resp.click('Settings')
1447
    resp = resp.click('upload')
1448
    resp.form['ics_file'] = Upload('exceptions.ics', ics_with_recurrent_exceptions, 'text/calendar')
1449
    resp = resp.form.submit(status=302).follow()
1450
    assert TimePeriodException.objects.filter(desk=desk).count() == 4
1451
    source2 = TimePeriodExceptionSource.objects.latest('pk')
1452
    assert source2.timeperiodexception_set.count() == 2
1453

  
1454
    # delete the second one
1455
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1456
    resp = resp.click('Settings')
1457
    resp = resp.click('upload')
1458
    resp = resp.click(href='/manage/time-period-exceptions-source/%d/delete' % source2.pk)
1459
    resp = resp.form.submit().follow()
1460
    assert TimePeriodException.objects.count() == 2
1461
    assert source1.timeperiodexception_set.count() == 2
1462
    assert TimePeriodExceptionSource.objects.filter(pk=source2.pk).exists() is False
1463

  
1464
    # delete the first one
1465
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1466
    resp = resp.click('Settings')
1467
    resp = resp.click('upload')
1468
    resp = resp.click(href='/manage/time-period-exceptions-source/%d/delete' % source1.pk)
1469
    resp = resp.form.submit().follow()
1470
    assert TimePeriodException.objects.count() == 0
1471
    assert TimePeriodExceptionSource.objects.filter(pk=source1.pk).exists() is False
1472

  
1473

  
1416 1474
def test_agenda_day_view(app, admin_user, manager_user, api_user):
1417 1475
    agenda = Agenda.objects.create(label='New Example', kind='meetings')
1418 1476
    desk = Desk.objects.create(agenda=agenda, label='New Desk')
1419
-