Projet

Général

Profil

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

Lauréline Guérin, 12 décembre 2019 10:57

Télécharger (7,49 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                         | 57 +++++++++++++++++++
 5 files changed, 92 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,
......
828 828
            messages.info(self.request, message)
829 829
        return super(DeskImportTimePeriodExceptionsView, self).form_valid(form)
830 830

  
831

  
831 832
desk_import_time_period_exceptions = DeskImportTimePeriodExceptionsView.as_view()
832 833

  
833 834

  
835
class TimePeriodExceptionSourceDeleteView(ManagedDeskSubobjectMixin, DeleteView):
836
    template_name = 'chrono/manager_confirm_source_delete.html'
837
    model = TimePeriodExceptionSource
838

  
839
    def get_success_url(self):
840
        return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.desk.agenda_id})
841

  
842

  
843
time_period_exception_source_delete = TimePeriodExceptionSourceDeleteView.as_view()
844

  
845

  
834 846
def menu_json(request):
835 847
    label = _('Agendas')
836 848
    json_str = json.dumps([{'label': force_text(label),
tests/test_manager.py
1398 1398
    assert 'Failed to retrieve remote calendar (https://example.com/foo.ics, SSL error).' in resp.text
1399 1399

  
1400 1400

  
1401
def test_meetings_agenda_delete_time_period_exception_source(app, admin_user):
1402
    agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
1403
    desk = Desk.objects.create(agenda=agenda, label='Desk A')
1404
    MeetingType(agenda=agenda, label='Blah').save()
1405
    TimePeriod.objects.create(weekday=1, desk=desk,
1406
                              start_time=datetime.time(10, 0), end_time=datetime.time(12, 0))
1407
    login(app)
1408
    # import a source
1409
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1410
    resp = resp.click('Settings')
1411
    resp = resp.click('upload')
1412
    ics_with_recurrent_exceptions = b"""BEGIN:VCALENDAR
1413
VERSION:2.0
1414
PRODID:-//foo.bar//EN
1415
BEGIN:VEVENT
1416
DTSTART:20180101
1417
DTEND:20180101
1418
SUMMARY:New Year's Eve
1419
RRULE:FREQ=YEARLY
1420
END:VEVENT
1421
END:VCALENDAR"""
1422
    resp.form['ics_file'] = Upload('exceptions.ics', ics_with_recurrent_exceptions, 'text/calendar')
1423
    resp = resp.form.submit(status=302).follow()
1424
    assert TimePeriodException.objects.filter(desk=desk).count() == 2
1425
    source1 = TimePeriodExceptionSource.objects.latest('pk')
1426
    assert source1.timeperiodexception_set.count() == 2
1427

  
1428
    # import another one
1429
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1430
    resp = resp.click('Settings')
1431
    resp = resp.click('upload')
1432
    resp.form['ics_file'] = Upload('exceptions.ics', ics_with_recurrent_exceptions, 'text/calendar')
1433
    resp = resp.form.submit(status=302).follow()
1434
    assert TimePeriodException.objects.filter(desk=desk).count() == 4
1435
    source2 = TimePeriodExceptionSource.objects.latest('pk')
1436
    assert source2.timeperiodexception_set.count() == 2
1437

  
1438
    # delete the second one
1439
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1440
    resp = resp.click('Settings')
1441
    resp = resp.click('upload')
1442
    resp = resp.click(href='/manage/time-period-exceptions-source/%d/delete' % source2.pk)
1443
    resp = resp.form.submit().follow()
1444
    assert TimePeriodException.objects.count() == 2
1445
    assert source1.timeperiodexception_set.count() == 2
1446
    assert TimePeriodExceptionSource.objects.filter(pk=source2.pk).exists() is False
1447

  
1448
    # delete the first one
1449
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1450
    resp = resp.click('Settings')
1451
    resp = resp.click('upload')
1452
    resp = resp.click(href='/manage/time-period-exceptions-source/%d/delete' % source1.pk)
1453
    resp = resp.form.submit().follow()
1454
    assert TimePeriodException.objects.count() == 0
1455
    assert TimePeriodExceptionSource.objects.filter(pk=source1.pk).exists() is False
1456

  
1457

  
1401 1458
def test_agenda_day_view(app, admin_user, manager_user, api_user):
1402 1459
    agenda = Agenda.objects.create(label='New Example', kind='meetings')
1403 1460
    desk = Desk.objects.create(agenda=agenda, label='New Desk')
1404
-