Projet

Général

Profil

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

Lauréline Guérin, 13 décembre 2019 14:46

Télécharger (7,47 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                        |  2 +
 chrono/manager/views.py                       | 14 ++++-
 tests/test_manager.py                         | 58 +++++++++++++++++++
 5 files changed, 93 insertions(+), 2 deletions(-)
 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
80 80
            name='chrono-manager-time-period-exception-extract-list'),
81 81
        url(r'^time-period-exceptions/(?P<pk>\d+)/exception-list$', views.time_period_exception_list,
82 82
            name='chrono-manager-time-period-exception-list'),
83
        url(r'^time-period-exceptions-source/(?P<pk>\d+)/delete$', views.time_period_exception_source_delete,
84
            name='chrono-manager-time-period-exception-source-delete'),
83 85

  
84 86
        url(r'^agendas/events.csv$', views.agenda_import_events_sample_csv,
85 87
            name='chrono-manager-sample-events-csv'),
chrono/manager/views.py
33 33
        MonthArchiveView)
34 34

  
35 35
from chrono.agendas.models import (Agenda, Event, MeetingType, TimePeriod,
36
                                   Booking, Desk, TimePeriodException,
36
                                   Booking, Desk, TimePeriodException, TimePeriodExceptionSource,
37 37
                                   ICSError, AgendaImportError)
38 38

  
39 39
from .forms import (AgendaAddForm, AgendaEditForm, NewEventForm, EventForm, NewMeetingTypeForm, MeetingTypeForm,
......
825 825
            messages.info(self.request, message)
826 826
        return super(DeskImportTimePeriodExceptionsView, self).form_valid(form)
827 827

  
828

  
828 829
desk_import_time_period_exceptions = DeskImportTimePeriodExceptionsView.as_view()
829 830

  
830 831

  
832
class TimePeriodExceptionSourceDeleteView(ManagedDeskSubobjectMixin, DeleteView):
833
    template_name = 'chrono/manager_confirm_source_delete.html'
834
    model = TimePeriodExceptionSource
835

  
836
    def get_success_url(self):
837
        return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.desk.agenda_id})
838

  
839

  
840
time_period_exception_source_delete = TimePeriodExceptionSourceDeleteView.as_view()
841

  
842

  
831 843
def menu_json(request):
832 844
    label = _('Agendas')
833 845
    json_str = json.dumps([{'label': force_text(label),
tests/test_manager.py
1412 1412
    assert 'Failed to retrieve remote calendar (https://example.com/foo.ics, SSL error).' in resp.text
1413 1413

  
1414 1414

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

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

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

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

  
1472

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