Projet

Général

Profil

0001-agendas-manager-can-add-exception-even-if-not-timepe.patch

Lauréline Guérin, 01 juin 2020 10:12

Télécharger (13 ko)

Voir les différences:

Subject: [PATCH] agendas: manager can add exception even if not timeperiod
 defined (#42629)

 .../manager_meetings_agenda_settings.html     |  20 ++-
 tests/test_manager.py                         | 117 ++++--------------
 2 files changed, 32 insertions(+), 105 deletions(-)
chrono/manager/templates/chrono/manager_meetings_agenda_settings.html
69 69
                </li>
70 70
                {% endfor %}
71 71
                <li><a class="add" rel="popup" href="{{add_time_period_url}}">{% trans 'Add a time period' %}</a></li>
72
                {% if desk.timeperiod_set.count %}
73 72
                {% url 'chrono-manager-agenda-add-time-period-exception' agenda_pk=object.pk pk=desk.pk as add_time_period_exception_url %}
74
                    <li><a><strong>{% trans 'Exceptions' %}</strong></a><a class="link-action-icon upload" rel="popup" href="{% url 'chrono-manager-desk-add-import-time-period-exceptions' pk=desk.pk %}" title="{% trans 'Import exceptions from .ics' %}">{% trans 'upload' %}</a></li>
75
                    {% for exception in desk.get_exceptions_within_two_weeks %}
76
                         <li><a rel="popup" href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.pk %}">
77
                        {{ exception }}
78
                        <a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-exception-delete' pk=exception.id %}">{% trans "remove" %}</a>
79
                    {% endfor %}
80
                    {% if not desk.are_all_exceptions_displayed %}
81
                    <li><a class="timeperiod-exception-all desk-{{ desk.pk }}" rel="popup" data-selector="div.timeperiod" href="{% url 'chrono-manager-time-period-exception-extract-list' pk=desk.id %}">({% trans 'see all exceptions' %})</a></li>
82
                    {% endif %}
83
                    <li><a class="add" rel="popup" href="{{add_time_period_exception_url}}">{% trans 'Add a time period exception' %}</a></li>
73
                <li><a><strong>{% trans 'Exceptions' %}</strong></a><a class="link-action-icon upload" rel="popup" href="{% url 'chrono-manager-desk-add-import-time-period-exceptions' pk=desk.pk %}" title="{% trans 'Import exceptions from .ics' %}">{% trans 'upload' %}</a></li>
74
                {% for exception in desk.get_exceptions_within_two_weeks %}
75
                     <li><a rel="popup" href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.pk %}">
76
                    {{ exception }}
77
                    <a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-exception-delete' pk=exception.id %}">{% trans "remove" %}</a>
78
                {% endfor %}
79
                {% if not desk.are_all_exceptions_displayed %}
80
                <li><a class="timeperiod-exception-all desk-{{ desk.pk }}" rel="popup" data-selector="div.timeperiod" href="{% url 'chrono-manager-time-period-exception-extract-list' pk=desk.id %}">({% trans 'see all exceptions' %})</a></li>
84 81
                {% endif %}
82
                <li><a class="add" rel="popup" href="{{add_time_period_exception_url}}">{% trans 'Add a time period exception' %}</a></li>
85 83
            </ul>
86 84
        </div>
87 85
        {% endfor %}
tests/test_manager.py
848 848

  
849 849

  
850 850
def test_meetings_agenda_add_time_period(app, admin_user):
851
    agenda = Agenda(label=u'Foo bar', kind='meetings')
852
    agenda.save()
851
    agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
853 852
    desk = Desk.objects.create(agenda=agenda, label='Desk A')
854
    MeetingType(agenda=agenda, label='Blah').save()
853
    MeetingType.objects.create(agenda=agenda, label='Blah')
855 854
    app = login(app)
856
    resp = app.get('/manage/agendas/%s/' % agenda.id, status=302).follow()
857
    resp = resp.click('Settings')
858
    resp = resp.click('Add a time period')
855
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
856
    resp = resp.click('Add a time period$')
859 857
    resp.form['weekdays-2'].checked = True
860 858
    resp.form['start_time'] = '10:00'
861 859
    resp.form['end_time'] = '17:00'
......
1054 1052

  
1055 1053

  
1056 1054
def test_meetings_agenda_add_time_period_exception(app, admin_user):
1055
    agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
1056
    desk = Desk.objects.create(agenda=agenda, label='Desk A')
1057
    MeetingType.objects.create(agenda=agenda, label='Blah')
1057 1058
    app = login(app)
1058
    resp = app.get('/manage/', status=200)
1059
    resp = resp.click('New')
1060
    resp.form['label'] = 'Foo bar'
1061
    resp.form['kind'] = 'meetings'
1062
    resp = resp.form.submit().follow()
1063
    agenda = Agenda.objects.first()
1064
    resp = resp.click('New Meeting Type')
1065
    resp.form['label'] = 'Blah'
1066
    resp.form['duration'] = '60'
1067
    resp = resp.form.submit().follow()
1068
    # adding a new time period
1069
    resp = resp.click('Add a time period')
1070
    resp.form['weekdays-2'].checked = True
1071
    resp.form['start_time'] = '10:00'
1072
    resp.form['end_time'] = '17:00'
1073
    resp = resp.form.submit().follow()
1059
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
1074 1060
    resp = resp.click('Add a time period exception')
1075 1061
    today = datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0)
1076 1062
    tomorrow = make_aware(today + datetime.timedelta(days=1))
......
1101 1087
    assert TimePeriodException.objects.count() == 2
1102 1088
    assert 'Exception 1' in resp.text
1103 1089
    assert 'Exception 2' not in resp.text
1104
    resp = resp.click(
1105
        href="/manage/time-period-exceptions/%d/exception-extract-list" % agenda.desk_set.first().pk
1106
    )
1090
    resp = resp.click(href="/manage/time-period-exceptions/%d/exception-extract-list" % desk.pk)
1107 1091
    assert 'Exception 1' in resp.text
1108 1092
    assert 'Exception 2' in resp.text
1109 1093

  
......
1292 1276
def test_agenda_import_time_period_exception_from_ics(app, admin_user):
1293 1277
    agenda = Agenda.objects.create(label='Example', kind='meetings')
1294 1278
    desk = Desk.objects.create(agenda=agenda, label='Test Desk')
1295
    MeetingType(agenda=agenda, label='Foo').save()
1279
    MeetingType.objects.create(agenda=agenda, label='Foo')
1296 1280
    login(app)
1297
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1298
    resp = resp.click('Settings')
1299
    assert 'Import exceptions from .ics' not in resp.text
1300

  
1301
    TimePeriod.objects.create(
1302
        weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0)
1303
    )
1304

  
1305
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1306
    resp = resp.click('Settings')
1281
    resp = app.get('/manage/agendas/%d/settings' % agenda.pk)
1307 1282
    assert 'Import exceptions from .ics' in resp.text
1308 1283
    resp = resp.click('upload')
1309 1284
    assert "To add new exceptions, you can upload a file or specify an address to a remote calendar." in resp
1310 1285
    resp = resp.form.submit(status=200)
1311 1286
    assert 'Please provide an ICS File or an URL.' in resp.text
1312
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1313
    resp = resp.click('Settings')
1287
    resp = app.get('/manage/agendas/%d/settings' % agenda.pk)
1314 1288
    resp = resp.click('upload')
1315 1289
    resp.form['ics_file'] = Upload('exceptions.ics', b'invalid content', 'text/calendar')
1316 1290
    resp = resp.form.submit(status=200)
......
1343 1317
SUMMARY:New Year's Eve
1344 1318
END:VEVENT
1345 1319
END:VCALENDAR"""
1346
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1347
    resp = resp.click('Settings')
1320
    resp = app.get('/manage/agendas/%d/settings' % agenda.pk)
1348 1321
    resp = resp.click('upload')
1349 1322
    resp.form['ics_file'] = Upload('exceptions.ics', ics_with_exceptions, 'text/calendar')
1350 1323
    resp = resp.form.submit(status=302)
......
1391 1364
def test_agenda_import_time_period_exception_with_remote_ics(mocked_get, app, admin_user):
1392 1365
    agenda = Agenda.objects.create(label='New Example', kind='meetings')
1393 1366
    desk = Desk.objects.create(agenda=agenda, label='New Desk')
1394
    MeetingType(agenda=agenda, label='Bar').save()
1367
    MeetingType.objects.create(agenda=agenda, label='Bar')
1395 1368
    login(app)
1396
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1397
    resp = resp.click('Settings')
1398
    assert 'Import exceptions from .ics' not in resp.text
1399

  
1400
    TimePeriod.objects.create(
1401
        weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0)
1402
    )
1403

  
1404
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1405
    resp = resp.click('Settings')
1369
    resp = app.get('/manage/agendas/%d/settings' % agenda.pk)
1406 1370
    resp = resp.click('upload')
1407 1371

  
1408 1372
    assert 'ics_file' in resp.form.fields
......
1435 1399
def test_agenda_import_time_period_exception_with_remote_ics_no_events(mocked_get, app, admin_user):
1436 1400
    agenda = Agenda.objects.create(label='New Example', kind='meetings')
1437 1401
    desk = Desk.objects.create(agenda=agenda, label='New Desk')
1438
    MeetingType(agenda=agenda, label='Bar').save()
1402
    MeetingType.objects.create(agenda=agenda, label='Bar')
1439 1403
    login(app)
1440
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1441
    resp = resp.click('Settings')
1442
    assert 'Import exceptions from .ics' not in resp.text
1443

  
1444
    TimePeriod.objects.create(
1445
        weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0)
1446
    )
1447

  
1448
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1449
    resp = resp.click('Settings')
1404
    resp = app.get('/manage/agendas/%d/settings' % agenda.pk)
1450 1405
    resp = resp.click('upload')
1451 1406
    resp.form['ics_url'] = 'http://example.com/foo.ics'
1452 1407
    mocked_response = mock.Mock()
......
1470 1425
):
1471 1426
    agenda = Agenda.objects.create(label='New Example', kind='meetings')
1472 1427
    desk = Desk.objects.create(agenda=agenda, label='New Desk')
1473
    MeetingType(agenda=agenda, label='Bar').save()
1428
    MeetingType.objects.create(agenda=agenda, label='Bar')
1474 1429
    login(app)
1475
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1476
    resp = resp.click('Settings')
1477
    assert 'Import exceptions from .ics' not in resp.text
1478

  
1479
    TimePeriod.objects.create(
1480
        weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0)
1481
    )
1482

  
1483
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1484
    resp = resp.click('Settings')
1430
    resp = app.get('/manage/agendas/%d/settings' % agenda.pk)
1485 1431
    resp = resp.click('upload')
1486 1432

  
1487 1433
    assert 'ics_file' in resp.form.fields
......
1502 1448
def test_agenda_import_time_period_exception_from_forbidden_remote_ics(mocked_get, app, admin_user):
1503 1449
    agenda = Agenda.objects.create(label='New Example', kind='meetings')
1504 1450
    desk = Desk.objects.create(agenda=agenda, label='New Desk')
1505
    MeetingType(agenda=agenda, label='Bar').save()
1451
    MeetingType.objects.create(agenda=agenda, label='Bar')
1506 1452
    login(app)
1507
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1508
    resp = resp.click('Settings')
1509
    assert 'Import exceptions from .ics' not in resp.text
1510

  
1511
    TimePeriod.objects.create(
1512
        weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0)
1513
    )
1514

  
1515
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1516
    resp = resp.click('Settings')
1453
    resp = app.get('/manage/agendas/%d/settings' % agenda.pk)
1517 1454
    resp = resp.click('upload')
1518 1455
    resp.form['ics_url'] = 'http://example.com/foo.ics'
1519 1456
    mocked_response = mock.Mock()
......
1532 1469
def test_agenda_import_time_period_exception_from_remote_ics_with_ssl_error(mocked_get, app, admin_user):
1533 1470
    agenda = Agenda.objects.create(label='New Example', kind='meetings')
1534 1471
    desk = Desk.objects.create(agenda=agenda, label='New Desk')
1535
    MeetingType(agenda=agenda, label='Bar').save()
1472
    MeetingType.objects.create(agenda=agenda, label='Bar')
1536 1473
    login(app)
1537
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1538
    resp = resp.click('Settings')
1539
    assert 'Import exceptions from .ics' not in resp.text
1540
    TimePeriod.objects.create(
1541
        weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0)
1542
    )
1543

  
1544
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1545
    resp = resp.click('Settings')
1474
    resp = app.get('/manage/agendas/%d/settings' % agenda.pk)
1546 1475
    resp = resp.click('upload')
1547 1476
    resp.form['ics_url'] = 'https://example.com/foo.ics'
1548 1477
    mocked_response = mock.Mock()
1549
-