Projet

Général

Profil

0002-manager-change-semantics-of-exceptions-sources-manag.patch

Valentin Deniaud, 31 août 2020 18:08

Télécharger (10,8 ko)

Voir les différences:

Subject: [PATCH 2/4] manager: change semantics of exceptions sources
 management (#18904)

 chrono/manager/static/css/style.scss          |  4 +-
 .../manager_meetings_agenda_settings.html     |  2 +-
 tests/test_manager.py                         | 44 +++++++++----------
 3 files changed, 25 insertions(+), 25 deletions(-)
chrono/manager/static/css/style.scss
84 84
    font-style: italic;
85 85
}
86 86

  
87
.link-action-icon.upload::before {
88
	content: "\f093"; /* upload-sign */
87
.link-action-icon.settings::before {
88
	content: "\f0ad"; /* wrench */
89 89
}
90 90

  
91 91
.dayview h2 a,
chrono/manager/templates/chrono/manager_meetings_agenda_settings.html
71 71
                {% endfor %}
72 72
                <li><a class="add" rel="popup" href="{{add_time_period_url}}">{% trans 'Add a time period' %}</a></li>
73 73
                {% 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>
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 'Manage exception sources' %}">{% trans 'manage exceptions' %}</a></li>
75 75
                {% for exception in desk.get_exceptions_within_two_weeks %}
76 76
                     <li><a rel="popup" href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.pk %}">
77 77
                    {{ exception }}
tests/test_manager.py
2101 2101
    MeetingType.objects.create(agenda=agenda, label='Foo')
2102 2102
    login(app)
2103 2103
    resp = app.get('/manage/agendas/%d/settings' % agenda.pk)
2104
    assert 'Import exceptions from .ics' in resp.text
2105
    resp = resp.click('upload')
2104
    assert 'Manage exception sources' in resp.text
2105
    resp = resp.click('manage exceptions')
2106 2106
    assert "To add new exceptions, you can upload a file or specify an address to a remote calendar." in resp
2107 2107
    resp = resp.form.submit(status=200)
2108 2108
    assert 'Please provide an ICS File or an URL.' in resp.text
2109 2109
    resp = app.get('/manage/agendas/%d/settings' % agenda.pk)
2110
    resp = resp.click('upload')
2110
    resp = resp.click('manage exceptions')
2111 2111
    resp.form['ics_file'] = Upload('exceptions.ics', b'invalid content', 'text/calendar')
2112 2112
    resp = resp.form.submit(status=200)
2113 2113
    assert 'File format is invalid' in resp.text
......
2140 2140
END:VEVENT
2141 2141
END:VCALENDAR"""
2142 2142
    resp = app.get('/manage/agendas/%d/settings' % agenda.pk)
2143
    resp = resp.click('upload')
2143
    resp = resp.click('manage exceptions')
2144 2144
    resp.form['ics_file'] = Upload('exceptions.ics', ics_with_exceptions, 'text/calendar')
2145 2145
    resp = resp.form.submit(status=302)
2146 2146
    assert TimePeriodException.objects.filter(desk=desk).count() == 1
......
2165 2165
    )
2166 2166
    login(app)
2167 2167
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
2168
    resp = resp.click('upload')
2168
    resp = resp.click('manage exceptions')
2169 2169
    ics_with_recurrent_exceptions = b"""BEGIN:VCALENDAR
2170 2170
VERSION:2.0
2171 2171
PRODID:-//foo.bar//EN
......
2188 2188
    MeetingType.objects.create(agenda=agenda, label='Bar')
2189 2189
    login(app)
2190 2190
    resp = app.get('/manage/agendas/%d/settings' % agenda.pk)
2191
    resp = resp.click('upload')
2191
    resp = resp.click('manage exceptions')
2192 2192

  
2193 2193
    assert 'ics_file' in resp.form.fields
2194 2194
    assert 'ics_url' in resp.form.fields
......
2223 2223
    MeetingType.objects.create(agenda=agenda, label='Bar')
2224 2224
    login(app)
2225 2225
    resp = app.get('/manage/agendas/%d/settings' % agenda.pk)
2226
    resp = resp.click('upload')
2226
    resp = resp.click('manage exceptions')
2227 2227
    resp.form['ics_url'] = 'http://example.com/foo.ics'
2228 2228
    mocked_response = mock.Mock()
2229 2229
    mocked_response.text = """BEGIN:VCALENDAR
......
2249 2249
    MeetingType.objects.create(agenda=agenda, label='Bar')
2250 2250
    login(app)
2251 2251
    resp = app.get('/manage/agendas/%d/settings' % agenda.pk)
2252
    resp = resp.click('upload')
2252
    resp = resp.click('manage exceptions')
2253 2253

  
2254 2254
    assert 'ics_file' in resp.form.fields
2255 2255
    assert 'ics_url' in resp.form.fields
......
2272 2272
    MeetingType.objects.create(agenda=agenda, label='Bar')
2273 2273
    login(app)
2274 2274
    resp = app.get('/manage/agendas/%d/settings' % agenda.pk)
2275
    resp = resp.click('upload')
2275
    resp = resp.click('manage exceptions')
2276 2276
    resp.form['ics_url'] = 'http://example.com/foo.ics'
2277 2277
    mocked_response = mock.Mock()
2278 2278
    mocked_response.status_code = 403
......
2293 2293
    MeetingType.objects.create(agenda=agenda, label='Bar')
2294 2294
    login(app)
2295 2295
    resp = app.get('/manage/agendas/%d/settings' % agenda.pk)
2296
    resp = resp.click('upload')
2296
    resp = resp.click('manage exceptions')
2297 2297
    resp.form['ics_url'] = 'https://example.com/foo.ics'
2298 2298
    mocked_response = mock.Mock()
2299 2299
    mocked_get.return_value = mocked_response
......
2317 2317
    login(app)
2318 2318
    # import a source
2319 2319
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
2320
    resp = resp.click('upload')
2320
    resp = resp.click('manage exceptions')
2321 2321
    ics_with_recurrent_exceptions = b"""BEGIN:VCALENDAR
2322 2322
VERSION:2.0
2323 2323
PRODID:-//foo.bar//EN
......
2336 2336

  
2337 2337
    # import another one
2338 2338
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
2339
    resp = resp.click('upload')
2339
    resp = resp.click('manage exceptions')
2340 2340
    resp.form['ics_file'] = Upload('exceptions.ics', ics_with_recurrent_exceptions, 'text/calendar')
2341 2341
    resp = resp.form.submit(status=302).follow()
2342 2342
    assert TimePeriodException.objects.filter(desk=desk).count() == 4
......
2345 2345

  
2346 2346
    # delete the second one
2347 2347
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
2348
    resp = resp.click('upload')
2348
    resp = resp.click('manage exceptions')
2349 2349
    resp = resp.click(href='/manage/time-period-exceptions-source/%d/delete' % source2.pk)
2350 2350
    resp = resp.form.submit().follow()
2351 2351
    assert TimePeriodException.objects.count() == 2
......
2354 2354

  
2355 2355
    # delete the first one
2356 2356
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
2357
    resp = resp.click('upload')
2357
    resp = resp.click('manage exceptions')
2358 2358
    resp = resp.click(href='/manage/time-period-exceptions-source/%d/delete' % source1.pk)
2359 2359
    resp = resp.form.submit().follow()
2360 2360
    assert TimePeriodException.objects.count() == 0
......
2383 2383
    login(app)
2384 2384
    # import a source from a file
2385 2385
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
2386
    resp = resp.click('upload')
2386
    resp = resp.click('manage exceptions')
2387 2387
    resp.form['ics_file'] = Upload('exceptions.ics', ics_file_content, 'text/calendar')
2388 2388
    resp = resp.form.submit(status=302).follow()
2389 2389
    assert TimePeriodException.objects.filter(desk=desk).count() == 2
......
2394 2394

  
2395 2395
    # replace the source
2396 2396
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
2397
    resp = resp.click('upload')
2397
    resp = resp.click('manage exceptions')
2398 2398
    resp = resp.click(href='/manage/time-period-exceptions-source/%d/replace' % source.pk)
2399 2399
    resp.form['ics_newfile'] = Upload('exceptions.ics', ics_file_content, 'text/calendar')
2400 2400
    resp = resp.form.submit().follow()
......
2429 2429
    login(app)
2430 2430
    # import a source from an url
2431 2431
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
2432
    resp = resp.click('upload')
2432
    resp = resp.click('manage exceptions')
2433 2433
    resp.form['ics_url'] = 'http://example.com/foo.ics'
2434 2434
    mocked_response = mock.Mock()
2435 2435
    mocked_response.text = ics_url_content
......
2442 2442

  
2443 2443
    # refresh the source
2444 2444
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
2445
    resp = resp.click('upload')
2445
    resp = resp.click('manage exceptions')
2446 2446
    mocked_response = mock.Mock()
2447 2447
    mocked_response.text = ics_url_content
2448 2448
    mocked_get.return_value = mocked_response
......
2468 2468
    login(app)
2469 2469
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
2470 2470
    resp = resp.click('Settings')
2471
    resp = resp.click('upload')
2471
    resp = resp.click('manage exceptions')
2472 2472
    assert 'Holidays' in resp.text
2473 2473
    assert 'disabled' not in resp.text
2474 2474
    assert 'refresh' not in resp.text
......
2476 2476
    resp = resp.click('disable').follow()
2477 2477
    assert not TimePeriodException.objects.exists()
2478 2478

  
2479
    resp = resp.click('upload')
2479
    resp = resp.click('manage exceptions')
2480 2480
    assert 'Holidays' in resp.text
2481 2481
    assert 'disabled' in resp.text
2482 2482

  
2483 2483
    resp = resp.click('enable').follow()
2484 2484
    assert TimePeriodException.objects.exists()
2485 2485

  
2486
    resp = resp.click('upload')
2486
    resp = resp.click('manage exceptions')
2487 2487
    assert 'disabled' not in resp.text
2488 2488

  
2489 2489

  
......
2499 2499
    login(app)
2500 2500
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
2501 2501
    resp = resp.click('Settings')
2502
    resp = resp.click('upload')
2502
    resp = resp.click('manage exceptions')
2503 2503
    assert 'test.ics' in resp.text
2504 2504

  
2505 2505
    assert app.get('/manage/time-period-exceptions-source/%s/toggle' % source.pk, status=404)
2506
-