0001-misc-apply-pyupgrade-55867.patch
chrono/agendas/management/commands/sync_desks_timeperiod_exceptions.py | ||
---|---|---|
14 | 14 |
# You should have received a copy of the GNU Affero General Public License |
15 | 15 |
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
16 | 16 | |
17 |
from __future__ import print_function |
|
18 | 17 | |
19 | 18 |
import sys |
20 | 19 | |
... | ... | |
39 | 38 |
source.refresh_timeperiod_exceptions_from_ics() |
40 | 39 |
except ICSError as e: |
41 | 40 |
print( |
42 |
u'unable to create timeperiod exceptions for "%s": %s' % (source.desk, e), file=sys.stderr
|
|
41 |
'unable to create timeperiod exceptions for "%s": %s' % (source.desk, e), file=sys.stderr |
|
43 | 42 |
) |
chrono/agendas/migrations/0001_initial.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0002_event.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0003_booking.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.contrib.postgres.fields import JSONField |
5 | 2 |
from django.db import migrations, models |
6 | 3 |
chrono/agendas/migrations/0004_booking_cancellation_datetime.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0005_event_label.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0006_auto_20160707_1357.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
import datetime |
5 | 2 | |
6 | 3 |
from django.db import migrations, models |
chrono/agendas/migrations/0007_auto_20160722_1135.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0008_auto_20160910_1319.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
import django |
5 | 2 |
from django.db import migrations, models |
6 | 3 |
chrono/agendas/migrations/0009_auto_20160911_1640.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0010_auto_20160918_1250.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0011_meetingtype_slug.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0012_manual_set_slugs_on_meeting_types.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations |
5 | 2 |
from django.utils.text import slugify |
6 | 3 |
chrono/agendas/migrations/0013_auto_20161028_1603.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0014_booking_primary_booking.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0015_auto_20170628_1137.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0016_desk.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0017_timeperiod_desk.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0018_event_desk.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0019_timeperiodexception.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0020_auto_20171102_1021.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
import datetime |
5 | 2 | |
6 | 3 |
from django.db import migrations, models |
chrono/agendas/migrations/0021_auto_20171126_1330.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0022_auto_20171202_1828.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0023_auto_20171202_1835.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0024_auto_20180426_1127.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.12 on 2018-04-26 11:27 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations, models |
6 | 4 |
chrono/agendas/migrations/0025_auto_20181206_1252.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.12 on 2018-12-06 12:52 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
import django.db.models.deletion |
6 | 4 |
from django.db import migrations, models |
chrono/agendas/migrations/0026_booking_user_display_label.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.20 on 2019-03-14 15:06 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations, models |
6 | 4 |
chrono/agendas/migrations/0027_event_description.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.12 on 2019-09-17 06:36 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations, models |
6 | 4 |
chrono/agendas/migrations/0028_event_slug.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0029_auto_20191106_1320.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2019-11-06 12:20 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations, models |
6 | 4 |
chrono/agendas/migrations/0030_auto_20191107_1200.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations |
5 | 2 |
from django.utils.text import slugify |
6 | 3 |
chrono/agendas/migrations/0031_auto_20191107_1225.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2019-11-07 11:25 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations, models |
6 | 4 | |
... | ... | |
19 | 17 |
), |
20 | 18 |
migrations.AlterUniqueTogether( |
21 | 19 |
name='desk', |
22 |
unique_together=set([('agenda', 'slug')]),
|
|
20 |
unique_together={('agenda', 'slug')},
|
|
23 | 21 |
), |
24 | 22 |
migrations.AlterUniqueTogether( |
25 | 23 |
name='meetingtype', |
26 |
unique_together=set([('agenda', 'slug')]),
|
|
24 |
unique_together={('agenda', 'slug')},
|
|
27 | 25 |
), |
28 | 26 |
] |
chrono/agendas/migrations/0032_auto_20191127_0919.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.17 on 2019-11-27 08:19 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations, models |
6 | 4 | |
... | ... | |
21 | 19 |
), |
22 | 20 |
migrations.AlterUniqueTogether( |
23 | 21 |
name='event', |
24 |
unique_together=set([('agenda', 'slug')]),
|
|
22 |
unique_together={('agenda', 'slug')},
|
|
25 | 23 |
), |
26 | 24 |
] |
chrono/agendas/migrations/0033_timeperiodexceptionsource.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
import django.db.models.deletion |
5 | 2 |
from django.db import migrations, models |
6 | 3 |
chrono/agendas/migrations/0034_initial_source.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0035_remove_desk_timeperiod_exceptions_remote_url.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2019-12-09 14:24 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations |
6 | 4 |
chrono/agendas/migrations/0036_auto_20191223_1758.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.17 on 2019-12-23 17:58 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations, models |
6 | 4 |
chrono/agendas/migrations/0037_timeperiodexceptionsource_ics_file.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
import chrono.agendas.models |
chrono/agendas/migrations/0038_start_virtual_agendas.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-02-20 12:15 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
import django.db.models.deletion |
6 | 4 |
from django.db import migrations, models |
chrono/agendas/migrations/0039_booking_delays.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-02-25 07:33 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
import django.core.validators |
6 | 4 |
from django.db import migrations, models |
chrono/agendas/migrations/0040_timeperiod_agenda.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-02-26 13:27 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
import django.db.models.deletion |
6 | 4 |
from django.db import migrations, models |
chrono/agendas/migrations/0041_clean_event_slug_unicity.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
import django |
5 | 2 |
from django.db import migrations |
6 | 3 |
chrono/agendas/migrations/0043_booking_user_external_id.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0044_event_publication_date.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0045_agenda_resources.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0046_event_duration.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-05-30 13:13 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations, models |
6 | 4 |
chrono/agendas/migrations/0047_auto_20200617_1521.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-06-17 13:21 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations, models |
6 | 4 |
chrono/agendas/migrations/0048_meeting_type_deleted_flag.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-06-17 13:23 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations, models |
6 | 4 |
chrono/agendas/migrations/0049_event_slug.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
import uuid |
5 | 2 | |
6 | 3 |
from django.db import migrations |
chrono/agendas/migrations/0050_event_slug.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
import chrono.agendas.models |
chrono/agendas/migrations/0051_default_view.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0052_event_date_range_constraint.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, transaction |
5 | 2 |
from django.db.utils import InternalError, OperationalError, ProgrammingError |
6 | 3 |
chrono/agendas/migrations/0053_event_date_range_constraint.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, transaction |
5 | 2 |
from django.db.utils import InternalError, OperationalError, ProgrammingError |
6 | 3 |
chrono/agendas/migrations/0054_agenda_categories.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
import django.db.models.deletion |
5 | 2 |
from django.db import migrations, models |
6 | 3 |
chrono/agendas/migrations/0055_booking_cancel_callback_url.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-07-29 09:42 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations, models |
6 | 4 |
chrono/agendas/migrations/0056_auto_20200811_1611.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-08-11 14:11 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
import django.db.models.deletion |
6 | 4 |
from django.contrib.postgres.fields import JSONField |
chrono/agendas/migrations/0057_auto_20200831_1634.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-08-31 14:34 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations, models |
6 | 4 |
chrono/agendas/migrations/0058_timeperiodexception_external.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-08-31 14:36 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations, models |
6 | 4 |
chrono/agendas/migrations/0059_event_almost_full.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-09-03 08:40 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations, models |
6 | 4 |
chrono/agendas/migrations/0060_auto_20200903_1041.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-09-03 08:41 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
import django.contrib.postgres.fields |
6 | 4 |
import django.db.models.deletion |
chrono/agendas/migrations/0061_auto_20200909_1752.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-09-09 15:52 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations, models |
6 | 4 |
chrono/agendas/migrations/0062_auto_20200915_1401.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-09-15 12:01 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
import django.db.models.deletion |
6 | 4 |
from django.db import migrations, models |
chrono/agendas/migrations/0063_auto_20200928_1445.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-09-28 12:45 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
import django.core.validators |
6 | 4 |
from django.db import migrations, models |
chrono/agendas/migrations/0064_booking_form_url.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
import chrono.agendas.models |
chrono/agendas/migrations/0065_unavailability_calendar.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-10-05 12:37 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
import django.db.models.deletion |
6 | 4 |
from django.db import migrations, models |
chrono/agendas/migrations/0066_timeperiodexceptionsource_unique_settings_slug.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-10-21 11:56 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations |
6 | 4 |
from django.db.models import Count, F |
chrono/agendas/migrations/0067_auto_20201021_1746.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-10-21 15:46 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations |
6 | 4 | |
... | ... | |
14 | 12 |
operations = [ |
15 | 13 |
migrations.AlterUniqueTogether( |
16 | 14 |
name='timeperiodexceptionsource', |
17 |
unique_together=set([('desk', 'settings_slug')]),
|
|
15 |
unique_together={('desk', 'settings_slug')},
|
|
18 | 16 |
), |
19 | 17 |
] |
chrono/agendas/migrations/0068_remove_timeperiodexception_external.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-10-27 09:32 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations |
6 | 4 |
chrono/agendas/migrations/0069_translate_holidays.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2020-10-29 15:39 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.conf import settings |
6 | 4 |
from django.db import migrations |
chrono/agendas/migrations/0070_auto_20201202_1834.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.29 on 2020-12-02 17:34 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
import django.db.models.deletion |
6 | 4 |
from django.db import migrations, models |
... | ... | |
47 | 45 |
), |
48 | 46 |
migrations.AlterUniqueTogether( |
49 | 47 |
name='bookingcolor', |
50 |
unique_together=set([('agenda', 'label')]),
|
|
48 |
unique_together={('agenda', 'label')},
|
|
51 | 49 |
), |
52 | 50 |
] |
chrono/agendas/migrations/0071_booking_attendance.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0072_booking_absence_reason.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0073_auto_20210125_1800.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2021-01-25 17:00 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations |
6 | 4 | |
... | ... | |
23 | 21 |
migrations.RunPython(booking_color_unique_label, migrations.RunPython.noop), |
24 | 22 |
migrations.AlterUniqueTogether( |
25 | 23 |
name='bookingcolor', |
26 |
unique_together=set([('label',)]),
|
|
24 |
unique_together={('label',)},
|
|
27 | 25 |
), |
28 | 26 |
migrations.RemoveField( |
29 | 27 |
model_name='bookingcolor', |
chrono/agendas/migrations/0074_simple_desks.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations, models |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0075_auto_20210216_1553.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2021-02-16 14:53 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
import django.db.models.deletion |
6 | 4 |
from django.contrib.postgres.fields import JSONField |
chrono/agendas/migrations/0076_event_recurrence_end_date.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2021-02-16 15:10 |
3 |
from __future__ import unicode_literals |
|
4 | 2 | |
5 | 3 |
from django.db import migrations, models |
6 | 4 |
chrono/agendas/migrations/0077_meetings_default_view.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
from django.db import migrations |
5 | 2 | |
6 | 3 |
chrono/agendas/migrations/0078_absence_reasons.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from __future__ import unicode_literals |
|
3 | ||
4 | 1 |
import django.db.models.deletion |
5 | 2 |
from django.db import migrations, models |
6 | 3 |
chrono/agendas/migrations/0080_create_exceptions_desks.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# Generated by Django 1.11.18 on 2021-01-27 16:46 |
3 | 2 | |
4 |
from __future__ import unicode_literals |
|
5 | 3 | |
6 | 4 |
from django.db import migrations |
7 | 5 |
chrono/agendas/models.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# chrono - agendas system |
3 | 2 |
# Copyright (C) 2016 Entr'ouvert |
4 | 3 |
# |
... | ... | |
991 | 990 |
virtual_meetingtypes = self.virtual_agenda.iter_meetingtypes(excluded_agenda=self.real_agenda) |
992 | 991 |
if not virtual_meetingtypes: |
993 | 992 |
return |
994 |
virtual_meetingtypes = set([(mt.label, mt.slug, mt.duration) for mt in virtual_meetingtypes])
|
|
993 |
virtual_meetingtypes = {(mt.label, mt.slug, mt.duration) for mt in virtual_meetingtypes}
|
|
995 | 994 |
real_meetingtypes = self.real_agenda.iter_meetingtypes() |
996 |
real_meetingtypes = set([(mt.label, mt.slug, mt.duration) for mt in real_meetingtypes])
|
|
995 |
real_meetingtypes = {(mt.label, mt.slug, mt.duration) for mt in real_meetingtypes}
|
|
997 | 996 |
if virtual_meetingtypes - real_meetingtypes: |
998 | 997 |
# missing meeting type in real agenda |
999 | 998 |
for mt in virtual_meetingtypes - real_meetingtypes: |
... | ... | |
1038 | 1037 |
ordering = ['weekday', 'start_time'] |
1039 | 1038 | |
1040 | 1039 |
def __str__(self): |
1041 |
return u'%s / %s → %s' % (
|
|
1040 |
return '%s / %s → %s' % ( |
|
1042 | 1041 |
force_text(WEEKDAYS[self.weekday]), |
1043 | 1042 |
date_format(self.start_time, 'TIME_FORMAT'), |
1044 | 1043 |
date_format(self.end_time, 'TIME_FORMAT'), |
... | ... | |
1123 | 1122 |
self.desks = set(desks) |
1124 | 1123 | |
1125 | 1124 |
def __str__(self): |
1126 |
return u'%s / %s → %s' % (
|
|
1125 |
return '%s / %s → %s' % ( |
|
1127 | 1126 |
force_text(WEEKDAYS[self.weekday]), |
1128 | 1127 |
date_format(self.start_time, 'TIME_FORMAT'), |
1129 | 1128 |
date_format(self.end_time, 'TIME_FORMAT'), |
... | ... | |
2118 | 2117 | |
2119 | 2118 | |
2120 | 2119 |
def ics_directory_path(instance, filename): |
2121 |
return 'ics/{0}/{1}'.format(str(uuid.uuid4()), filename)
|
|
2120 |
return f'ics/{str(uuid.uuid4())}/{filename}'
|
|
2122 | 2121 | |
2123 | 2122 | |
2124 | 2123 |
class TimePeriodExceptionSource(models.Model): |
... | ... | |
2462 | 2461 |
# if both dates are at midnight don't include the time part |
2463 | 2462 |
if self.end_datetime == self.start_datetime + datetime.timedelta(days=1): |
2464 | 2463 |
# a single day |
2465 |
exc_repr = u'%s' % date_format(localtime(self.start_datetime), 'SHORT_DATE_FORMAT')
|
|
2464 |
exc_repr = '%s' % date_format(localtime(self.start_datetime), 'SHORT_DATE_FORMAT') |
|
2466 | 2465 |
else: |
2467 |
exc_repr = u'%s → %s' % (
|
|
2466 |
exc_repr = '%s → %s' % ( |
|
2468 | 2467 |
date_format(localtime(self.start_datetime), 'SHORT_DATE_FORMAT'), |
2469 | 2468 |
date_format(localtime(self.end_datetime), 'SHORT_DATE_FORMAT'), |
2470 | 2469 |
) |
2471 | 2470 |
else: |
2472 | 2471 |
if localtime(self.start_datetime).date() == localtime(self.end_datetime).date(): |
2473 | 2472 |
# same day |
2474 |
exc_repr = u'%s → %s' % (
|
|
2473 |
exc_repr = '%s → %s' % ( |
|
2475 | 2474 |
date_format(localtime(self.start_datetime), 'SHORT_DATETIME_FORMAT'), |
2476 | 2475 |
date_format(localtime(self.end_datetime), 'TIME_FORMAT'), |
2477 | 2476 |
) |
2478 | 2477 |
else: |
2479 |
exc_repr = u'%s → %s' % (
|
|
2478 |
exc_repr = '%s → %s' % ( |
|
2480 | 2479 |
date_format(localtime(self.start_datetime), 'SHORT_DATETIME_FORMAT'), |
2481 | 2480 |
date_format(localtime(self.end_datetime), 'SHORT_DATETIME_FORMAT'), |
2482 | 2481 |
) |
2483 | 2482 | |
2484 | 2483 |
if self.label: |
2485 |
exc_repr = u'%s (%s)' % (self.label, exc_repr)
|
|
2484 |
exc_repr = '%s (%s)' % (self.label, exc_repr) |
|
2486 | 2485 | |
2487 | 2486 |
return exc_repr |
2488 | 2487 |
chrono/api/utils.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# chrono - agendas system |
3 | 2 |
# Copyright (C) 2019 Entr'ouvert |
4 | 3 |
# |
chrono/api/views.py | ||
---|---|---|
256 | 256 |
user_bookings = IntervalSet() |
257 | 257 |
if user_external_id: |
258 | 258 |
used_min_datetime, used_max_datetime = ( |
259 |
min([v[0] for v in agenda_id_min_max_datetime.values()]),
|
|
260 |
max([v[1] for v in agenda_id_min_max_datetime.values()]),
|
|
259 |
min(v[0] for v in agenda_id_min_max_datetime.values()),
|
|
260 |
max(v[1] for v in agenda_id_min_max_datetime.values()),
|
|
261 | 261 |
) |
262 | 262 |
booked_events = ( |
263 | 263 |
Event.objects.filter( |
... | ... | |
558 | 558 |
resources_slugs = [s for s in request.GET['resources'].split(',') if s] |
559 | 559 |
resources = list(agenda.resources.filter(slug__in=resources_slugs)) |
560 | 560 |
if len(resources) != len(resources_slugs): |
561 |
unknown_slugs = set(resources_slugs) - set([r.slug for r in resources])
|
|
561 |
unknown_slugs = set(resources_slugs) - {r.slug for r in resources}
|
|
562 | 562 |
unknown_slugs = sorted(list(unknown_slugs)) |
563 | 563 |
raise APIError( |
564 | 564 |
_('invalid resource: %s') % ', '.join(unknown_slugs), |
... | ... | |
2027 | 2027 |
'err_desc': _('secondary booking'), |
2028 | 2028 |
} |
2029 | 2029 |
return Response(response) |
2030 |
event_ids = set([event.pk])
|
|
2031 |
in_waiting_list = set([booking.in_waiting_list])
|
|
2030 |
event_ids = {event.pk}
|
|
2031 |
in_waiting_list = {booking.in_waiting_list}
|
|
2032 | 2032 |
secondary_bookings = booking.secondary_booking_set.all().order_by('-creation_datetime') |
2033 | 2033 |
for secondary in secondary_bookings: |
2034 | 2034 |
event_ids.add(secondary.event_id) |
chrono/manager/forms.py | ||
---|---|---|
14 | 14 |
# You should have received a copy of the GNU Affero General Public License |
15 | 15 |
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
16 | 16 | |
17 |
from __future__ import unicode_literals |
|
18 | 17 | |
19 | 18 |
import collections |
20 | 19 |
import csv |
chrono/manager/management/commands/import_site.py | ||
---|---|---|
44 | 44 |
overwrite=options['overwrite'], |
45 | 45 |
) |
46 | 46 |
except AgendaImportError as exc: |
47 |
raise CommandError(u'%s' % exc)
|
|
47 |
raise CommandError('%s' % exc) |
|
48 | 48 | |
49 | 49 |
if filename == '-': |
50 | 50 |
fd = sys.stdin |
chrono/manager/views.py | ||
---|---|---|
296 | 296 |
x for x in self.object_list if any([y.cancellation_datetime is None for y in x.booking_set.all()]) |
297 | 297 |
] |
298 | 298 |
if active_events: |
299 |
min_event = min([localtime(x.start_datetime).time() for x in active_events])
|
|
300 |
max_event = max([localtime(x.start_datetime + interval).time() for x in active_events])
|
|
299 |
min_event = min(localtime(x.start_datetime).time() for x in active_events)
|
|
300 |
max_event = max(localtime(x.start_datetime + interval).time() for x in active_events)
|
|
301 | 301 |
if min_timeperiod is None and min_event is None: |
302 | 302 |
return |
303 | 303 |
min_display = min(min_timeperiod or datetime.time(23), min_event or datetime.time(23)) |
... | ... | |
396 | 396 |
x for x in self.object_list if any([y.cancellation_datetime is None for y in x.booking_set.all()]) |
397 | 397 |
] |
398 | 398 |
if active_events: |
399 |
min_event = min([localtime(x.start_datetime).time() for x in active_events])
|
|
400 |
max_event = max([localtime(x.start_datetime + interval).time() for x in active_events])
|
|
399 |
min_event = min(localtime(x.start_datetime).time() for x in active_events)
|
|
400 |
max_event = max(localtime(x.start_datetime + interval).time() for x in active_events)
|
|
401 | 401 |
hide_sunday_event = not any([x.start_datetime.weekday() == 6 for x in active_events]) |
402 | 402 |
hide_weekend_event = hide_sunday_event and not any( |
403 | 403 |
[x.start_datetime.weekday() == 5 for x in active_events] |
... | ... | |
807 | 807 |
try: |
808 | 808 |
results = import_site(agendas_json, overwrite=False) |
809 | 809 |
except AgendaImportError as exc: |
810 |
form.add_error('agendas_json', u'%s' % exc)
|
|
810 |
form.add_error('agendas_json', '%s' % exc) |
|
811 | 811 |
return self.form_invalid(form) |
812 | 812 |
except KeyError as exc: |
813 | 813 |
form.add_error('agendas_json', _('Key "%s" is missing.') % exc.args[0]) |
... | ... | |
885 | 885 |
else: |
886 | 886 |
message2 = message_update |
887 | 887 | |
888 |
messages.info(self.request, u'%s %s' % (message1, message2))
|
|
888 |
messages.info(self.request, '%s %s' % (message1, message2)) |
|
889 | 889 | |
890 | 890 |
if global_noop: |
891 | 891 |
messages.info(self.request, _('No data found.')) |
... | ... | |
1165 | 1165 |
) |
1166 | 1166 | |
1167 | 1167 |
def get_timetable_infos(self): |
1168 |
timeperiods = itertools.chain(*[d.timeperiod_set.all() for d in self.agenda.prefetched_desks])
|
|
1168 |
timeperiods = itertools.chain(*(d.timeperiod_set.all() for d in self.agenda.prefetched_desks))
|
|
1169 | 1169 |
timeperiods = [t for t in timeperiods if t.weekday == self.date.weekday()] |
1170 | 1170 |
timeperiods = sorted(timeperiods, key=lambda t: t.start_time) |
1171 | 1171 | |
... | ... | |
1173 | 1173 | |
1174 | 1174 |
min_timeperiod = max_timeperiod = min_event = max_event = None |
1175 | 1175 |
if timeperiods: |
1176 |
min_timeperiod = min([x.start_time for x in timeperiods])
|
|
1177 |
max_timeperiod = max([x.end_time for x in timeperiods])
|
|
1176 |
min_timeperiod = min(x.start_time for x in timeperiods)
|
|
1177 |
max_timeperiod = max(x.end_time for x in timeperiods)
|
|
1178 | 1178 |
active_events = [ |
1179 | 1179 |
x for x in self.object_list if any([y.cancellation_datetime is None for y in x.booking_set.all()]) |
1180 | 1180 |
] |
1181 | 1181 |
if active_events: |
1182 |
min_event = min([localtime(x.start_datetime).time() for x in active_events])
|
|
1183 |
max_event = max([localtime(x.start_datetime + interval).time() for x in active_events])
|
|
1182 |
min_event = min(localtime(x.start_datetime).time() for x in active_events)
|
|
1183 |
max_event = max(localtime(x.start_datetime + interval).time() for x in active_events)
|
|
1184 | 1184 |
if min_timeperiod is None and min_event is None: |
1185 | 1185 |
return |
1186 | 1186 |
min_display = min(min_timeperiod or datetime.time(23), min_event or datetime.time(23)) |
... | ... | |
1305 | 1305 |
return '1' |
1306 | 1306 | |
1307 | 1307 |
def get_timetable_infos(self): |
1308 |
timeperiods = itertools.chain(*[d.timeperiod_set.all() for d in self.agenda.prefetched_desks])
|
|
1308 |
timeperiods = itertools.chain(*(d.timeperiod_set.all() for d in self.agenda.prefetched_desks))
|
|
1309 | 1309 |
timeperiods = sorted(timeperiods, key=lambda t: (t.weekday, t.start_time)) |
1310 | 1310 | |
1311 | 1311 |
interval = datetime.timedelta(minutes=60) |
... | ... | |
1313 | 1313 |
min_timeperiod = max_timeperiod = min_event = max_event = None |
1314 | 1314 |
hide_sunday_timeperiod = hide_weekend_timeperiod = hide_sunday_event = hide_weekend_event = True |
1315 | 1315 |
if timeperiods: |
1316 |
min_timeperiod = min([x.start_time for x in timeperiods])
|
|
1317 |
max_timeperiod = max([x.end_time for x in timeperiods])
|
|
1316 |
min_timeperiod = min(x.start_time for x in timeperiods)
|
|
1317 |
max_timeperiod = max(x.end_time for x in timeperiods)
|
|
1318 | 1318 |
hide_sunday_timeperiod = not any([e.weekday == 6 for e in timeperiods]) |
1319 | 1319 |
hide_weekend_timeperiod = hide_sunday_timeperiod and not any( |
1320 | 1320 |
[e.weekday == 5 for e in timeperiods] |
... | ... | |
1323 | 1323 |
x for x in self.object_list if any([y.cancellation_datetime is None for y in x.booking_set.all()]) |
1324 | 1324 |
] |
1325 | 1325 |
if active_events: |
1326 |
min_event = min([localtime(x.start_datetime).time() for x in active_events])
|
|
1327 |
max_event = max([localtime(x.start_datetime + interval).time() for x in active_events])
|
|
1326 |
min_event = min(localtime(x.start_datetime).time() for x in active_events)
|
|
1327 |
max_event = max(localtime(x.start_datetime + interval).time() for x in active_events)
|
|
1328 | 1328 |
hide_sunday_event = not any([x.start_datetime.weekday() == 6 for x in active_events]) |
1329 | 1329 |
hide_weekend_event = hide_sunday_event and not any( |
1330 | 1330 |
[x.start_datetime.weekday() == 5 for x in active_events] |
... | ... | |
2554 | 2554 | |
2555 | 2555 |
success_url = super().get_success_url() |
2556 | 2556 |
if self.desk and 'from_popup' in self.request.GET: |
2557 |
success_url = '{}?display_exceptions={}'.format(success_url, self.desk.pk)
|
|
2557 |
success_url = f'{success_url}?display_exceptions={self.desk.pk}'
|
|
2558 | 2558 |
return success_url |
2559 | 2559 | |
2560 | 2560 |
def get_queryset(self): |
chrono/utils/spooler.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | 1 |
# chrono - agendas system |
3 | 2 |
# Copyright (C) 2021 Entr'ouvert |
4 | 3 |
# |
setup.py | ||
---|---|---|
1 | 1 |
#! /usr/bin/env python |
2 |
# -*- coding: utf-8 -*- |
|
3 | 2 | |
4 | 3 |
import glob |
5 | 4 |
import os |
... | ... | |
34 | 33 |
tag exists, take 0.0- and add the length of the commit log. |
35 | 34 |
""" |
36 | 35 |
if os.path.exists('VERSION'): |
37 |
with open('VERSION', 'r') as v:
|
|
36 |
with open('VERSION') as v: |
|
38 | 37 |
return v.read() |
39 | 38 |
if os.path.exists('.git'): |
40 | 39 |
p = subprocess.Popen( |
tests/api/conftest.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 | 1 |
import datetime |
4 | 2 | |
5 | 3 |
import pytest |
... | ... | |
13 | 11 |
def user(): |
14 | 12 |
User = get_user_model() |
15 | 13 |
user = User.objects.create( |
16 |
username='john.doe', first_name=u'John', last_name=u'Doe', email='john.doe@example.net'
|
|
14 |
username='john.doe', first_name='John', last_name='Doe', email='john.doe@example.net'
|
|
17 | 15 |
) |
18 | 16 |
user.set_password('password') |
19 | 17 |
user.save() |
... | ... | |
41 | 39 | |
42 | 40 |
@pytest.fixture |
43 | 41 |
def some_data(mock_now): |
44 |
agenda = Agenda(label=u'Foo bar')
|
|
42 |
agenda = Agenda(label='Foo bar') |
|
45 | 43 |
agenda.save() |
46 | 44 |
first_date = localtime(now()).replace(hour=17, minute=0, second=0, microsecond=0) |
47 | 45 |
first_date += datetime.timedelta(days=1) |
... | ... | |
49 | 47 |
event = Event(start_datetime=first_date + datetime.timedelta(days=i), places=20, agenda=agenda) |
50 | 48 |
event.save() |
51 | 49 | |
52 |
agenda2 = Agenda(label=u'Foo bar 2')
|
|
50 |
agenda2 = Agenda(label='Foo bar 2') |
|
53 | 51 |
agenda2.save() |
54 | 52 |
first_date = localtime(now()).replace(hour=20, minute=0, second=0, microsecond=0) |
55 | 53 |
first_date += datetime.timedelta(days=1) |
... | ... | |
65 | 63 |
@pytest.fixture |
66 | 64 |
def meetings_agenda(mock_now): |
67 | 65 |
agenda = Agenda( |
68 |
label=u'Foo bar Meeting', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=56
|
|
66 |
label='Foo bar Meeting', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=56 |
|
69 | 67 |
) |
70 | 68 |
agenda.save() |
71 | 69 |
meeting_type = MeetingType(agenda=agenda, label='Blah', duration=30) |
tests/api/test_all.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 | 1 |
import datetime |
4 | 2 | |
5 | 3 |
import pytest |
... | ... | |
271 | 269 |
assert resp.json == expected_resp |
272 | 270 | |
273 | 271 |
# wrong kind |
274 |
agenda1 = Agenda.objects.filter(label=u'Foo bar')[0]
|
|
272 |
agenda1 = Agenda.objects.filter(label='Foo bar')[0] |
|
275 | 273 |
resp = app.get('/api/agenda/%s/meetings/' % agenda1.slug, status=404) |
276 | 274 | |
277 | 275 |
# unknown |
... | ... | |
434 | 432 | |
435 | 433 |
# check it doesn't get confused with an agenda with "agenda" in its slug |
436 | 434 |
agenda = Agenda( |
437 |
label=u'Foo bar Agenda', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=56
|
|
435 |
label='Foo bar Agenda', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=56 |
|
438 | 436 |
) |
439 | 437 |
agenda.save() |
440 | 438 |
api_url = '/api/agenda/%s/' % agenda.slug |
... | ... | |
462 | 460 | |
463 | 461 | |
464 | 462 |
def test_virtual_agendas_meetingtypes_api(app): |
465 |
virt_agenda = Agenda.objects.create(label=u'Virtual agenda', kind='virtual')
|
|
463 |
virt_agenda = Agenda.objects.create(label='Virtual agenda', kind='virtual') |
|
466 | 464 | |
467 | 465 |
# No meetings because no real agenda |
468 | 466 |
resp = app.get('/api/agenda/%s/meetings/' % virt_agenda.slug) |
469 | 467 |
assert resp.json == {'data': []} |
470 | 468 | |
471 | 469 |
# One real agenda : every meetings exposed |
472 |
foo_agenda = Agenda.objects.create(label=u'Foo', kind='meetings')
|
|
470 |
foo_agenda = Agenda.objects.create(label='Foo', kind='meetings') |
|
473 | 471 |
MeetingType.objects.create(agenda=foo_agenda, label='Meeting1', duration=30) |
474 | 472 |
MeetingType.objects.create(agenda=foo_agenda, label='Meeting2', duration=15) |
475 | 473 |
VirtualMember.objects.create(virtual_agenda=virt_agenda, real_agenda=foo_agenda) |
... | ... | |
497 | 495 | |
498 | 496 |
# Several real agendas |
499 | 497 | |
500 |
bar_agenda = Agenda.objects.create(label=u'Bar', kind='meetings')
|
|
498 |
bar_agenda = Agenda.objects.create(label='Bar', kind='meetings') |
|
501 | 499 |
MeetingType.objects.create(agenda=bar_agenda, label='Meeting Bar', duration=30) |
502 | 500 |
VirtualMember.objects.create(virtual_agenda=virt_agenda, real_agenda=bar_agenda) |
503 | 501 |
tests/api/test_booking.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 | 1 |
import datetime |
4 | 2 |
import urllib.parse as urlparse |
3 |
from unittest import mock |
|
5 | 4 | |
6 |
import mock |
|
7 | 5 |
import pytest |
8 | 6 |
from django.utils.timezone import make_aware, now |
9 | 7 | |
... | ... | |
21 | 19 | |
22 | 20 | |
23 | 21 |
def test_booking_ics(app, some_data, meetings_agenda, user): |
24 |
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
|
22 |
agenda = Agenda.objects.filter(label='Foo bar')[0] |
|
25 | 23 |
event = [x for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()][0] |
26 | 24 |
app.authorization = ('Basic', ('john.doe', 'password')) |
27 | 25 |
resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda.slug, event.id)) |
... | ... | |
114 | 112 |
assert 'COMMENT:custom comment\r\n' in resp.text |
115 | 113 |
assert 'URL:http://example.com/custom\r\n' in resp.text |
116 | 114 | |
117 |
meetings_agenda_id = Agenda.objects.filter(label=u'Foo bar Meeting')[0].id
|
|
115 |
meetings_agenda_id = Agenda.objects.filter(label='Foo bar Meeting')[0].id |
|
118 | 116 |
meeting_type = MeetingType.objects.get(agenda=meetings_agenda) |
119 | 117 |
resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id) |
120 | 118 |
event = resp.json['data'][2] |
... | ... | |
606 | 604 | |
607 | 605 | |
608 | 606 |
def test_booking_cancellation_api(app, some_data, user): |
609 |
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
|
607 |
agenda = Agenda.objects.filter(label='Foo bar')[0] |
|
610 | 608 |
event = [x for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()][0] |
611 | 609 |
resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda.id, event.id), status=401) |
612 | 610 | |
... | ... | |
619 | 617 | |
620 | 618 | |
621 | 619 |
def test_booking_cancellation_post_api(app, some_data, user): |
622 |
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
|
620 |
agenda = Agenda.objects.filter(label='Foo bar')[0] |
|
623 | 621 |
event = [x for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()][0] |
624 | 622 |
resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda.id, event.id), status=401) |
625 | 623 | |
... | ... | |
647 | 645 | |
648 | 646 | |
649 | 647 |
def test_booking_cancellation_post_meeting_api(app, meetings_agenda, user): |
650 |
agenda_id = Agenda.objects.filter(label=u'Foo bar Meeting')[0].id
|
|
648 |
agenda_id = Agenda.objects.filter(label='Foo bar Meeting')[0].id |
|
651 | 649 |
meeting_type = MeetingType.objects.get(agenda=meetings_agenda) |
652 | 650 |
resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id) |
653 | 651 |
nb_events = len(resp.json['data']) |
... | ... | |
760 | 758 | |
761 | 759 | |
762 | 760 |
def test_cancel_booking(app, some_data, user): |
763 |
agenda_id = Agenda.objects.filter(label=u'Foo bar')[0].pk
|
|
761 |
agenda_id = Agenda.objects.filter(label='Foo bar')[0].pk |
|
764 | 762 |
event = Event.objects.filter(agenda_id=agenda_id).exclude(start_datetime__lt=now())[0] |
765 | 763 |
primary = Booking.objects.create(event=event) |
766 | 764 |
secondary = Booking.objects.create(event=event, primary_booking=primary) |
tests/api/test_datetimes.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 | 1 |
import datetime |
4 | 2 |
import urllib.parse as urlparse |
5 | 3 | |
... | ... | |
13 | 11 | |
14 | 12 | |
15 | 13 |
def test_datetimes_api(app, some_data): |
16 |
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
|
14 |
agenda = Agenda.objects.filter(label='Foo bar')[0] |
|
17 | 15 | |
18 | 16 |
def check_bookability(data): |
19 | 17 |
for event in data: |
... | ... | |
79 | 77 |
agenda = Agenda.objects.create(label='Foo bar', kind='events', minimal_booking_delay=0) |
80 | 78 |
Event.objects.create( |
81 | 79 |
slug='event-slug', |
82 |
start_datetime=localtime((now() + datetime.timedelta(days=5))).replace(hour=17, minute=0),
|
|
80 |
start_datetime=localtime(now() + datetime.timedelta(days=5)).replace(hour=17, minute=0),
|
|
83 | 81 |
places=5, |
84 | 82 |
agenda=agenda, |
85 | 83 |
) |
... | ... | |
339 | 337 | |
340 | 338 | |
341 | 339 |
def test_waiting_list_datetimes(app, some_data, user): |
342 |
agenda_id = Agenda.objects.filter(label=u'Foo bar')[0].id
|
|
340 |
agenda_id = Agenda.objects.filter(label='Foo bar')[0].id |
|
343 | 341 |
event = Event.objects.filter(agenda_id=agenda_id).exclude(start_datetime__lt=now())[0] |
344 | 342 |
event.waiting_list_places = 5 |
345 | 343 |
event.save() |
... | ... | |
489 | 487 |
# 2017-05-20 -> saturday |
490 | 488 |
freezer.move_to(make_aware(datetime.datetime(year=2017, month=5, day=20, hour=1, minute=12))) |
491 | 489 | |
492 |
agenda = Agenda.objects.create(label=u'Foo bar')
|
|
490 |
agenda = Agenda.objects.create(label='Foo bar') |
|
493 | 491 |
first_date = localtime(now()).replace(hour=17, minute=0, second=0, microsecond=0) |
494 | 492 |
first_date += datetime.timedelta(days=1) |
495 | 493 |
for i in range(3): |
tests/api/test_event.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 | 1 |
import datetime |
4 | 2 | |
5 | 3 |
import pytest |
tests/api/test_fillslot.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 | 1 |
import datetime |
4 | 2 |
import urllib.parse as urlparse |
3 |
from unittest import mock |
|
5 | 4 | |
6 |
import mock |
|
7 | 5 |
import pytest |
8 | 6 |
from django.db import connection |
9 | 7 |
from django.test.utils import CaptureQueriesContext |
... | ... | |
25 | 23 | |
26 | 24 | |
27 | 25 |
def test_booking_api(app, some_data, user): |
28 |
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
|
26 |
agenda = Agenda.objects.filter(label='Foo bar')[0] |
|
29 | 27 |
event = [x for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()][0] |
30 | 28 | |
31 | 29 |
# unauthenticated |
... | ... | |
269 | 267 | |
270 | 268 | |
271 | 269 |
def test_booking_api_fillslots(app, some_data, user): |
272 |
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
|
270 |
agenda = Agenda.objects.filter(label='Foo bar')[0] |
|
273 | 271 |
events_ids = [x.id for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()] |
274 | 272 |
events_slugs = [x.slug for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()] |
275 | 273 |
assert len(events_ids) == 3 |
... | ... | |
411 | 409 | |
412 | 410 | |
413 | 411 |
def test_booking_api_fillslots_slots_string_param(app, some_data, user): |
414 |
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
|
412 |
agenda = Agenda.objects.filter(label='Foo bar')[0] |
|
415 | 413 |
events_ids = [x.id for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()] |
416 | 414 |
assert len(events_ids) == 3 |
417 | 415 |
app.authorization = ('Basic', ('john.doe', 'password')) |
... | ... | |
761 | 759 | |
762 | 760 | |
763 | 761 |
def test_booking_api_with_data(app, some_data, user): |
764 |
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
|
762 |
agenda = Agenda.objects.filter(label='Foo bar')[0] |
|
765 | 763 |
event = [x for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()][0] |
766 | 764 | |
767 | 765 |
app.authorization = ('Basic', ('john.doe', 'password')) |
... | ... | |
855 | 853 | |
856 | 854 | |
857 | 855 |
def test_booking_api_force_waiting_list(app, some_data, user): |
858 |
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
|
856 |
agenda = Agenda.objects.filter(label='Foo bar')[0] |
|
859 | 857 |
event = [x for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()][0] |
860 | 858 | |
861 | 859 |
app.authorization = ('Basic', ('john.doe', 'password')) |
... | ... | |
935 | 933 | |
936 | 934 | |
937 | 935 |
def test_booking_api_with_cancel_booking(app, some_data, user): |
938 |
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
|
936 |
agenda = Agenda.objects.filter(label='Foo bar')[0] |
|
939 | 937 |
event_0, event_1, event_2 = [x for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()][ |
940 | 938 |
0:4 |
941 | 939 |
] |
... | ... | |
1017 | 1015 | |
1018 | 1016 | |
1019 | 1017 |
def test_soldout(app, some_data, user): |
1020 |
agenda_id = Agenda.objects.filter(label=u'Foo bar')[0].id
|
|
1018 |
agenda_id = Agenda.objects.filter(label='Foo bar')[0].id |
|
1021 | 1019 |
event = Event.objects.filter(agenda_id=agenda_id).exclude(start_datetime__lt=now())[0] |
1022 | 1020 | |
1023 | 1021 |
resp = app.get('/api/agenda/%s/datetimes/' % agenda_id) |
... | ... | |
1041 | 1039 | |
1042 | 1040 | |
1043 | 1041 |
def test_waiting_list_booking(app, some_data, user): |
1044 |
agenda_id = Agenda.objects.filter(label=u'Foo bar')[0].id
|
|
1042 |
agenda_id = Agenda.objects.filter(label='Foo bar')[0].id |
|
1045 | 1043 |
event = Event.objects.filter(agenda_id=agenda_id).exclude(start_datetime__lt=now())[0] |
1046 | 1044 |
event.waiting_list_places = 5 |
1047 | 1045 |
event.save() |
... | ... | |
1084 | 1082 | |
1085 | 1083 | |
1086 | 1084 |
def test_multiple_booking_api(app, some_data, user): |
1087 |
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
|
1085 |
agenda = Agenda.objects.filter(label='Foo bar')[0] |
|
1088 | 1086 |
event = [x for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()][0] |
1089 | 1087 | |
1090 | 1088 |
app.authorization = ('Basic', ('john.doe', 'password')) |
... | ... | |
1174 | 1172 | |
1175 | 1173 | |
1176 | 1174 |
def test_multiple_booking_api_fillslots(app, some_data, user): |
1177 |
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
|
1175 |
agenda = Agenda.objects.filter(label='Foo bar')[0] |
|
1178 | 1176 |
# get slots of first 2 events |
1179 | 1177 |
events = [ |
1180 | 1178 |
x for x in Event.objects.filter(agenda=agenda).order_by('start_datetime') if x.in_bookable_period() |
... | ... | |
1287 | 1285 | |
1288 | 1286 | |
1289 | 1287 |
def test_multiple_booking_move_booking(app, user): |
1290 |
agenda = Agenda(label=u'Foo bar')
|
|
1288 |
agenda = Agenda(label='Foo bar') |
|
1291 | 1289 |
agenda.save() |
1292 | 1290 |
first_date = localtime(now()).replace(hour=17, minute=0, second=0, microsecond=0) |
1293 | 1291 |
first_date += datetime.timedelta(days=1) |
... | ... | |
1623 | 1621 |
== resp.json['data'][0]['datetime'] |
1624 | 1622 |
) |
1625 | 1623 |
second_booking_agenda = resp_booking.json['agenda']['slug'] |
1626 |
assert set([first_booking_agenda, second_booking_agenda]) == {'foo-meeting', 'bar-meeting'}
|
|
1624 |
assert {first_booking_agenda, second_booking_agenda} == {'foo-meeting', 'bar-meeting'}
|
|
1627 | 1625 | |
1628 | 1626 |
# try booking the same timeslot a third time: full |
1629 | 1627 |
resp_booking = app.post(fillslot_url) |
... | ... | |
1794 | 1792 | |
1795 | 1793 |
@pytest.mark.freeze_time('2017-04-01') |
1796 | 1794 |
def test_duration_on_booking_api_fillslot_response(app, user): |
1797 |
agenda = Agenda(label=u'Foo bar')
|
|
1795 |
agenda = Agenda(label='Foo bar') |
|
1798 | 1796 |
agenda.save() |
1799 | 1797 |
first_date = datetime.datetime(2017, 5, 20, 1, 12) |
1800 | 1798 |
durations = [None, 0, 45] |
... | ... | |
1842 | 1840 | |
1843 | 1841 |
@pytest.mark.freeze_time('2017-04-01') |
1844 | 1842 |
def test_duration_on_booking_api_fillslots_response(app, user): |
1845 |
agenda = Agenda(label=u'Foo bar')
|
|
1843 |
agenda = Agenda(label='Foo bar') |
|
1846 | 1844 |
agenda.save() |
1847 | 1845 |
first_date = datetime.datetime(2017, 5, 20, 1, 12) |
1848 | 1846 |
durations = [None, 0, 45] |
tests/api/test_meetings_datetimes.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 | 1 |
import datetime |
4 | 2 | |
5 | 3 |
import pytest |
... | ... | |
884 | 882 |
@pytest.mark.freeze_time('2017-05-20') |
885 | 883 |
def test_agenda_meeting_gcd_durations(app, user): |
886 | 884 |
meetings_agenda = Agenda.objects.create( |
887 |
label=u'Foo bar Meeting', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=8
|
|
885 |
label='Foo bar Meeting', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=8 |
|
888 | 886 |
) |
889 | 887 |
meeting_type_30 = MeetingType.objects.create(agenda=meetings_agenda, label='Blah', duration=30) |
890 | 888 |
desk = Desk.objects.create(agenda=meetings_agenda, label='Desk 1') |
... | ... | |
955 | 953 |
@pytest.mark.freeze_time('2017-05-20') |
956 | 954 |
def test_agenda_meeting_gcd_durations_and_exceptions(app, user): |
957 | 955 |
meetings_agenda = Agenda.objects.create( |
958 |
label=u'Foo bar Meeting', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=3
|
|
956 |
label='Foo bar Meeting', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=3 |
|
959 | 957 |
) |
960 | 958 |
desk = Desk.objects.create(agenda=meetings_agenda, label='Desk 1') |
961 | 959 |
TimePeriod.objects.create( |
... | ... | |
1131 | 1129 | |
1132 | 1130 |
def test_virtual_agendas_meetings_datetimes_api_with_similar_desk(app): |
1133 | 1131 |
agenda_foo = Agenda.objects.create( |
1134 |
label=u'Agenda Foo', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=4
|
|
1132 |
label='Agenda Foo', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=4 |
|
1135 | 1133 |
) |
1136 | 1134 |
MeetingType.objects.create(agenda=agenda_foo, label='Meeting Type', duration=30) |
1137 | 1135 |
test_1st_weekday = (localtime(now()).weekday() + 1) % 7 |
... | ... | |
1159 | 1157 |
) |
1160 | 1158 | |
1161 | 1159 |
agenda_bar = Agenda.objects.create( |
1162 |
label=u'Agenda Bar', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=4
|
|
1160 |
label='Agenda Bar', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=4 |
|
1163 | 1161 |
) |
1164 | 1162 |
meeting_type_bar = MeetingType.objects.create(agenda=agenda_bar, label='Meeting Type', duration=30) |
1165 | 1163 |
desk_bar = Desk.objects.create(agenda=agenda_bar, label='Desk 1') |
... | ... | |
1183 | 1181 |
) |
1184 | 1182 | |
1185 | 1183 |
virtual_agenda = Agenda.objects.create( |
1186 |
label=u'Agenda Virtual', kind='virtual', minimal_booking_delay=1, maximal_booking_delay=4
|
|
1184 |
label='Agenda Virtual', kind='virtual', minimal_booking_delay=1, maximal_booking_delay=4 |
|
1187 | 1185 |
) |
1188 | 1186 |
VirtualMember.objects.create(virtual_agenda=virtual_agenda, real_agenda=agenda_foo) |
1189 | 1187 |
VirtualMember.objects.create(virtual_agenda=virtual_agenda, real_agenda=agenda_bar) |
... | ... | |
1884 | 1882 | |
1885 | 1883 |
def test_meetings_and_virtual_datetimes_date_filter(app): |
1886 | 1884 |
agenda_foo = Agenda.objects.create( |
1887 |
label=u'Agenda Foo', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=7
|
|
1885 |
label='Agenda Foo', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=7 |
|
1888 | 1886 |
) |
1889 | 1887 |
meeting_type = MeetingType.objects.create(agenda=agenda_foo, label='Meeting Type', duration=30) |
1890 | 1888 |
desk_foo = Desk.objects.create(agenda=agenda_foo, label='Desk 1') |
... | ... | |
1903 | 1901 |
) |
1904 | 1902 | |
1905 | 1903 |
virtual_agenda = Agenda.objects.create( |
1906 |
label=u'Agenda Virtual', kind='virtual', minimal_booking_delay=1, maximal_booking_delay=7
|
|
1904 |
label='Agenda Virtual', kind='virtual', minimal_booking_delay=1, maximal_booking_delay=7 |
|
1907 | 1905 |
) |
1908 | 1906 |
VirtualMember.objects.create(virtual_agenda=virtual_agenda, real_agenda=agenda_foo) |
1909 | 1907 | |
... | ... | |
2034 | 2032 |
def test_datetimes_api_meetings_agenda_meta(app, freezer): |
2035 | 2033 |
# 2017-05-20 -> saturday |
2036 | 2034 |
freezer.move_to(make_aware(datetime.datetime(year=2017, month=5, day=20, hour=1, minute=12))) |
2037 |
meetings_agenda = Agenda.objects.create( |
|
2038 |
label=u'Foo bar Meeting', kind='meetings', maximal_booking_delay=3 |
|
2039 |
) |
|
2035 |
meetings_agenda = Agenda.objects.create(label='Foo bar Meeting', kind='meetings', maximal_booking_delay=3) |
|
2040 | 2036 |
meeting_type = MeetingType(agenda=meetings_agenda, label='Blah', duration=30) |
2041 | 2037 |
meeting_type.save() |
2042 | 2038 | |
... | ... | |
2124 | 2120 |
def test_datetimes_api_virtual_meetings_agenda_meta(app, freezer): |
2125 | 2121 |
# 2017-05-20 -> saturday |
2126 | 2122 |
freezer.move_to(make_aware(datetime.datetime(year=2017, month=5, day=20, hour=1, minute=12))) |
2127 |
meetings_agenda1 = Agenda.objects.create(label=u'Foo Meeting', kind='meetings', maximal_booking_delay=3)
|
|
2128 |
meetings_agenda2 = Agenda.objects.create(label=u'Bar Meeting', kind='meetings', maximal_booking_delay=3)
|
|
2129 |
virtual_agenda = Agenda.objects.create(label=u'Agenda Virtual', kind='virtual', maximal_booking_delay=3)
|
|
2123 |
meetings_agenda1 = Agenda.objects.create(label='Foo Meeting', kind='meetings', maximal_booking_delay=3) |
|
2124 |
meetings_agenda2 = Agenda.objects.create(label='Bar Meeting', kind='meetings', maximal_booking_delay=3) |
|
2125 |
virtual_agenda = Agenda.objects.create(label='Agenda Virtual', kind='virtual', maximal_booking_delay=3) |
|
2130 | 2126 |
VirtualMember.objects.create(virtual_agenda=virtual_agenda, real_agenda=meetings_agenda1) |
2131 | 2127 |
VirtualMember.objects.create(virtual_agenda=virtual_agenda, real_agenda=meetings_agenda2) |
2132 | 2128 |
desk1 = Desk.objects.create(agenda=meetings_agenda1, label='Desk 1') |
tests/api/test_statistics.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 | 1 |
import pytest |
4 | 2 |
from django.utils.timezone import now |
5 | 3 |
tests/manager/conftest.py | ||
---|---|---|
42 | 42 |
user = User.objects.get(username='api-user') |
43 | 43 |
except User.DoesNotExist: |
44 | 44 |
user = User.objects.create( |
45 |
username='john.doe', first_name=u'John', last_name=u'Doe', email='john.doe@example.net'
|
|
45 |
username='john.doe', first_name='John', last_name='Doe', email='john.doe@example.net'
|
|
46 | 46 |
) |
47 | 47 |
user.set_password('password') |
48 | 48 |
user.save() |
tests/manager/test_absence_reason.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 | 1 |
import copy |
4 | 2 |
import json |
5 | 3 | |
... | ... | |
15 | 13 | |
16 | 14 |
@pytest.fixture |
17 | 15 |
def agenda_with_restrictions(manager_user): |
18 |
agenda = Agenda(label=u'Foo Bar')
|
|
16 |
agenda = Agenda(label='Foo Bar') |
|
19 | 17 |
agenda.view_role = manager_user.groups.all()[0] |
20 | 18 |
agenda.save() |
21 | 19 |
return agenda |
... | ... | |
238 | 236 | |
239 | 237 | |
240 | 238 |
def test_meetings_agenda_group(app, admin_user): |
241 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
239 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
242 | 240 |
AbsenceReasonGroup.objects.create(label='Foo bar') |
243 | 241 | |
244 | 242 |
app = login(app) |
... | ... | |
250 | 248 | |
251 | 249 | |
252 | 250 |
def test_agenda_group(app, admin_user): |
253 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='events')
|
|
251 |
agenda = Agenda.objects.create(label='Foo bar', kind='events') |
|
254 | 252 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
255 | 253 | |
256 | 254 |
app = login(app) |
tests/manager/test_all.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 | 1 |
import copy |
4 | 2 |
import datetime |
5 | 3 |
import json |
6 | 4 |
import os |
5 |
from unittest import mock |
|
7 | 6 | |
8 | 7 |
import freezegun |
9 |
import mock |
|
10 | 8 |
import pytest |
11 | 9 |
import requests |
12 | 10 |
from django.contrib.auth.models import Group |
... | ... | |
68 | 66 |
app = login(app, username='manager', password='manager') |
69 | 67 |
assert app.get('/manage/', status=403) |
70 | 68 | |
71 |
agenda = Agenda(label=u'Foo bar')
|
|
69 |
agenda = Agenda(label='Foo bar') |
|
72 | 70 |
agenda.save() |
73 | 71 |
assert app.get('/manage/', status=403) |
74 | 72 | |
... | ... | |
112 | 110 | |
113 | 111 | |
114 | 112 |
def test_events_agenda_redirect(app, admin_user): |
115 |
agenda = Agenda.objects.create(label=u'Foo Bar', kind='events')
|
|
113 |
agenda = Agenda.objects.create(label='Foo Bar', kind='events') |
|
116 | 114 | |
117 | 115 |
app = login(app) |
118 | 116 |
resp = app.get('/manage/agendas/%s/' % agenda.pk, status=302) |
... | ... | |
131 | 129 | |
132 | 130 |
@freezegun.freeze_time('2020-07-12') |
133 | 131 |
def test_events_agenda_month_redirect(app, admin_user): |
134 |
agenda = Agenda.objects.create(label=u'Foo Bar', kind='events')
|
|
132 |
agenda = Agenda.objects.create(label='Foo Bar', kind='events') |
|
135 | 133 | |
136 | 134 |
app = login(app) |
137 | 135 |
# no event, redirect to current month |
... | ... | |
183 | 181 | |
184 | 182 |
@freezegun.freeze_time('2020-07-12') |
185 | 183 |
def test_events_agenda_day_redirect(app, admin_user): |
186 |
agenda = Agenda.objects.create(label=u'Foo Bar', kind='events')
|
|
184 |
agenda = Agenda.objects.create(label='Foo Bar', kind='events') |
|
187 | 185 | |
188 | 186 |
app = login(app) |
189 | 187 |
# no event, redirect to current day |
... | ... | |
234 | 232 | |
235 | 233 | |
236 | 234 |
def test_meetings_agenda_redirect(app, admin_user): |
237 |
agenda = Agenda.objects.create(label=u'Foo Bar', kind='meetings')
|
|
235 |
agenda = Agenda.objects.create(label='Foo Bar', kind='meetings') |
|
238 | 236 | |
239 | 237 |
app = login(app) |
240 | 238 |
resp = app.get('/manage/agendas/%s/' % agenda.pk, status=302) |
... | ... | |
247 | 245 | |
248 | 246 | |
249 | 247 |
def test_virtual_agenda_redirect(app, admin_user): |
250 |
agenda = Agenda.objects.create(label=u'Foo Bar', kind='virtual')
|
|
248 |
agenda = Agenda.objects.create(label='Foo Bar', kind='virtual') |
|
251 | 249 | |
252 | 250 |
app = login(app) |
253 | 251 |
resp = app.get('/manage/agendas/%s/' % agenda.pk, status=302) |
... | ... | |
260 | 258 | |
261 | 259 | |
262 | 260 |
def test_view_agendas_as_admin(app, admin_user): |
263 |
Agenda.objects.create(label=u'Bar Foo')
|
|
261 |
Agenda.objects.create(label='Bar Foo') |
|
264 | 262 | |
265 | 263 |
app = login(app) |
266 | 264 |
resp = app.get('/manage/', status=200) |
... | ... | |
268 | 266 | |
269 | 267 | |
270 | 268 |
def test_view_agendas_as_manager(app, manager_user): |
271 |
agenda = Agenda(label=u'Foo Bar')
|
|
269 |
agenda = Agenda(label='Foo Bar') |
|
272 | 270 |
agenda.view_role = manager_user.groups.all()[0] |
273 | 271 |
agenda.save() |
274 | 272 | |
275 |
agenda2 = Agenda(label=u'Bar Foo')
|
|
273 |
agenda2 = Agenda(label='Bar Foo') |
|
276 | 274 |
agenda2.save() |
277 | 275 | |
278 | 276 |
app = login(app, username='manager', password='manager') |
... | ... | |
406 | 404 | |
407 | 405 | |
408 | 406 |
def test_options_agenda(app, admin_user): |
409 |
agenda_events = Agenda.objects.create(label=u'Foo bar', kind='events')
|
|
407 |
agenda_events = Agenda.objects.create(label='Foo bar', kind='events') |
|
410 | 408 |
Desk.objects.create(agenda=agenda_events, slug='_exceptions_holder') |
411 |
agenda_meetings = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
412 |
Agenda.objects.create(label=u'Foo bar', kind='virtual')
|
|
409 |
agenda_meetings = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
410 |
Agenda.objects.create(label='Foo bar', kind='virtual') |
|
413 | 411 | |
414 | 412 |
app = login(app) |
415 | 413 |
resp = app.get('/manage/agendas/%s/edit' % agenda_events.pk) |
... | ... | |
451 | 449 | |
452 | 450 |
def test_options_events_agenda_delays(settings, app, admin_user): |
453 | 451 |
settings.WORKING_DAY_CALENDAR = None |
454 |
agenda = Agenda.objects.create(label=u'Foo bar')
|
|
452 |
agenda = Agenda.objects.create(label='Foo bar') |
|
455 | 453 |
assert agenda.minimal_booking_delay == 1 |
456 | 454 |
app = login(app) |
457 | 455 |
url = '/manage/agendas/%s/booking-delays' % agenda.pk |
... | ... | |
471 | 469 | |
472 | 470 | |
473 | 471 |
def test_options_meetings_agenda_delays(app, admin_user): |
474 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings', maximal_booking_delay=2)
|
|
472 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings', maximal_booking_delay=2) |
|
475 | 473 |
assert agenda.maximal_booking_delay == 2 |
476 | 474 |
app = login(app) |
477 | 475 |
url = '/manage/agendas/%s/booking-delays' % agenda.pk |
... | ... | |
484 | 482 | |
485 | 483 | |
486 | 484 |
def test_options_virtual_agenda_delays(app, admin_user): |
487 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='virtual', maximal_booking_delay=2)
|
|
485 |
agenda = Agenda.objects.create(label='Foo bar', kind='virtual', maximal_booking_delay=2) |
|
488 | 486 |
assert agenda.maximal_booking_delay == 2 |
489 | 487 |
app = login(app) |
490 | 488 |
url = '/manage/agendas/%s/booking-delays' % agenda.pk |
... | ... | |
586 | 584 | |
587 | 585 | |
588 | 586 |
def test_options_agenda_as_manager(app, manager_user): |
589 |
agenda = Agenda(label=u'Foo bar')
|
|
587 |
agenda = Agenda(label='Foo bar') |
|
590 | 588 |
agenda.view_role = manager_user.groups.all()[0] |
591 | 589 |
agenda.save() |
592 | 590 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
... | ... | |
696 | 694 | |
697 | 695 |
@mock.patch('chrono.agendas.models.Agenda.is_available_for_simple_management') |
698 | 696 |
def test_agenda_options_desk_simple_management(available_mock, app, admin_user): |
699 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
697 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
700 | 698 |
app = login(app) |
701 | 699 | |
702 | 700 |
available_mock.return_value = True |
... | ... | |
752 | 750 | |
753 | 751 | |
754 | 752 |
def test_delete_agenda(app, admin_user): |
755 |
agenda = Agenda(label=u'Foo bar')
|
|
753 |
agenda = Agenda(label='Foo bar') |
|
756 | 754 |
agenda.save() |
757 | 755 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
758 | 756 |
app = login(app) |
... | ... | |
766 | 764 | |
767 | 765 | |
768 | 766 |
def test_delete_busy_agenda(app, admin_user): |
769 |
agenda = Agenda(label=u'Foo bar')
|
|
767 |
agenda = Agenda(label='Foo bar') |
|
770 | 768 |
agenda.save() |
771 | 769 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
772 | 770 |
event = Event(start_datetime=now() + datetime.timedelta(days=10), places=10, agenda=agenda) |
... | ... | |
797 | 795 | |
798 | 796 | |
799 | 797 |
def test_delete_agenda_as_manager(app, manager_user): |
800 |
agenda = Agenda(label=u'Foo bar')
|
|
798 |
agenda = Agenda(label='Foo bar') |
|
801 | 799 |
agenda.edit_role = manager_user.groups.all()[0] |
802 | 800 |
agenda.save() |
803 | 801 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
... | ... | |
809 | 807 | |
810 | 808 | |
811 | 809 |
def test_delete_busy_desk(app, admin_user): |
812 |
agenda = Agenda(label=u'Foo bar', kind='meetings')
|
|
810 |
agenda = Agenda(label='Foo bar', kind='meetings') |
|
813 | 811 |
agenda.save() |
814 | 812 |
desk_a = Desk.objects.create(agenda=agenda, label='Desk A') |
815 | 813 |
Desk.objects.create(agenda=agenda, label='Desk B') |
... | ... | |
854 | 852 | |
855 | 853 | |
856 | 854 |
def test_meetings_agenda_add_meeting_type(app, admin_user): |
857 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
855 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
858 | 856 |
app = login(app) |
859 | 857 |
resp = app.get('/manage/agendas/%s/settings' % agenda.pk) |
860 | 858 |
assert "This agenda doesn't have any meeting type yet." in resp.text |
... | ... | |
878 | 876 | |
879 | 877 | |
880 | 878 |
def test_meetings_agenda_edit_meeting_type(app, admin_user): |
881 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
879 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
882 | 880 |
meeting_type = MeetingType.objects.create(agenda=agenda, label='Blah') |
883 | 881 |
meeting_type2 = MeetingType.objects.create(agenda=agenda, label='Other') |
884 |
other_agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
882 |
other_agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
885 | 883 |
other_meeting_type = MeetingType.objects.create(agenda=other_agenda, label='Blah') |
886 | 884 |
assert meeting_type.slug == other_meeting_type.slug |
887 | 885 | |
... | ... | |
905 | 903 | |
906 | 904 | |
907 | 905 |
def test_meetings_agenda_delete_meeting_type(app, admin_user): |
908 |
agenda = Agenda(label=u'Foo bar', kind='meetings')
|
|
906 |
agenda = Agenda(label='Foo bar', kind='meetings') |
|
909 | 907 |
agenda.save() |
910 | 908 | |
911 | 909 |
meeting_type = MeetingType(agenda=agenda, label='Blah') |
... | ... | |
933 | 931 | |
934 | 932 | |
935 | 933 |
def test_meetings_agenda_add_time_period(app, admin_user): |
936 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
934 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
937 | 935 |
desk = Desk.objects.create(agenda=agenda, label='Desk A') |
938 | 936 |
desk2 = Desk.objects.create(agenda=agenda, label='Desk B') |
939 | 937 |
MeetingType.objects.create(agenda=agenda, label='Blah') |
... | ... | |
959 | 957 |
resp.form['end_time'] = '13:00' |
960 | 958 |
resp = resp.form.submit() |
961 | 959 |
resp = resp.follow() |
962 |
assert u'Monday / 10 a.m. → 1 p.m.' in resp.text
|
|
963 |
assert u'Wednesday / 10 a.m. → 5 p.m.' in resp.text
|
|
960 |
assert 'Monday / 10 a.m. → 1 p.m.' in resp.text |
|
961 |
assert 'Wednesday / 10 a.m. → 5 p.m.' in resp.text |
|
964 | 962 |
assert resp.text.index('Monday') < resp.text.index('Wednesday') |
965 | 963 | |
966 | 964 |
# invert start and end |
... | ... | |
982 | 980 | |
983 | 981 | |
984 | 982 |
def test_meetings_agenda_add_time_period_desk_simple_management(app, admin_user): |
985 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings', desk_simple_management=True)
|
|
983 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings', desk_simple_management=True) |
|
986 | 984 |
desk = Desk.objects.create(agenda=agenda, label='Desk A') |
987 | 985 |
desk2 = Desk.objects.create(agenda=agenda, label='Desk B') |
988 | 986 |
assert agenda.is_available_for_simple_management() is True |
... | ... | |
1001 | 999 | |
1002 | 1000 |
def test_meetings_agenda_add_time_period_on_missing_desk(app, admin_user): |
1003 | 1001 |
app = login(app) |
1004 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
1002 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
1005 | 1003 |
app.get('/manage/agendas/%s/desk/0/add-time-period' % agenda.pk, status=404) |
1006 | 1004 | |
1007 | 1005 | |
... | ... | |
1037 | 1035 | |
1038 | 1036 | |
1039 | 1037 |
def test_meetings_agenda_edit_time_period(app, admin_user): |
1040 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
1038 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
1041 | 1039 |
desk = Desk.objects.create(agenda=agenda, label='Desk A') |
1042 | 1040 |
time_period = TimePeriod.objects.create( |
1043 | 1041 |
desk=desk, weekday=0, start_time=datetime.time(9, 0), end_time=datetime.time(12, 0) |
... | ... | |
1066 | 1064 | |
1067 | 1065 | |
1068 | 1066 |
def test_meetings_agenda_edit_time_period_desk_simple_management(app, admin_user): |
1069 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings', desk_simple_management=True)
|
|
1067 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings', desk_simple_management=True) |
|
1070 | 1068 |
desk = Desk.objects.create(agenda=agenda, label='Desk A') |
1071 | 1069 |
time_period = TimePeriod.objects.create( |
1072 | 1070 |
desk=desk, weekday=0, start_time=datetime.time(9, 0), end_time=datetime.time(12, 0) |
... | ... | |
1106 | 1104 | |
1107 | 1105 | |
1108 | 1106 |
def test_meetings_agenda_delete_time_period(app, admin_user): |
1109 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
1107 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
1110 | 1108 |
desk = Desk.objects.create(agenda=agenda, label='Desk A') |
1111 | 1109 |
TimePeriod.objects.create( |
1112 | 1110 |
desk=desk, weekday=2, start_time=datetime.time(10, 0), end_time=datetime.time(18, 0) |
... | ... | |
1124 | 1122 | |
1125 | 1123 | |
1126 | 1124 |
def test_meetings_agenda_delete_time_period_desk_simple_management(app, admin_user): |
1127 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings', desk_simple_management=True)
|
|
1125 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings', desk_simple_management=True) |
|
1128 | 1126 |
desk = Desk.objects.create(agenda=agenda, label='Desk A') |
1129 | 1127 |
time_period = TimePeriod.objects.create( |
1130 | 1128 |
desk=desk, weekday=0, start_time=datetime.time(9, 0), end_time=datetime.time(12, 0) |
... | ... | |
1197 | 1195 |
} |
1198 | 1196 |
) |
1199 | 1197 |
def test_meetings_agenda_add_desk_from_another(app, admin_user): |
1200 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
1198 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
1201 | 1199 |
desk = Desk.objects.create(agenda=agenda, label='Desk A') |
1202 | 1200 |
TimePeriod.objects.create( |
1203 | 1201 |
weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0) |
... | ... | |
1226 | 1224 |
} |
1227 | 1225 |
) |
1228 | 1226 |
def test_meetings_agenda_add_desk_simple_management(app, admin_user): |
1229 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings', desk_simple_management=True)
|
|
1227 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings', desk_simple_management=True) |
|
1230 | 1228 |
desk = Desk.objects.create(agenda=agenda, label='Desk A') |
1231 | 1229 |
TimePeriod.objects.create( |
1232 | 1230 |
weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0) |
... | ... | |
1259 | 1257 | |
1260 | 1258 | |
1261 | 1259 |
def test_meetings_agenda_edit_desk(app, admin_user): |
1262 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
1260 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
1263 | 1261 |
desk = Desk.objects.create(agenda=agenda, label='Desk A') |
1264 | 1262 |
desk2 = Desk.objects.create(agenda=agenda, label='Desk B') |
1265 |
other_agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
1263 |
other_agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
1266 | 1264 |
other_desk = Desk.objects.create(agenda=other_agenda, label='Desk A') |
1267 | 1265 |
assert other_desk.slug == desk.slug |
1268 | 1266 | |
... | ... | |
1297 | 1295 | |
1298 | 1296 | |
1299 | 1297 |
def test_meetings_agenda_delete_desk(app, admin_user): |
1300 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
1298 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
1301 | 1299 |
Desk.objects.create(agenda=agenda, label='Desk A') |
1302 | 1300 |
desk_b = Desk.objects.create(agenda=agenda, label='Desk B') |
1303 | 1301 | |
... | ... | |
1328 | 1326 | |
1329 | 1327 | |
1330 | 1328 |
def test_meetings_agenda_add_time_period_exception(app, admin_user): |
1331 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
1329 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
1332 | 1330 |
desk = Desk.objects.create(agenda=agenda, label='Desk A') |
1333 | 1331 |
desk2 = Desk.objects.create(agenda=agenda, label='Desk B') |
1334 | 1332 | |
... | ... | |
1371 | 1369 | |
1372 | 1370 | |
1373 | 1371 |
def test_meetings_agenda_add_time_period_exception_booking_overlaps(app, admin_user): |
1374 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
1372 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
1375 | 1373 |
desk = Desk.objects.create(agenda=agenda, label='Desk A') |
1376 | 1374 |
meeting_type = MeetingType.objects.create(agenda=agenda, label='Blah') |
1377 | 1375 | |
... | ... | |
1399 | 1397 | |
1400 | 1398 | |
1401 | 1399 |
def test_meetings_agenda_add_time_period_exception_all_desks(app, admin_user): |
1402 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
1400 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
1403 | 1401 |
desk = Desk.objects.create(agenda=agenda, label='Desk A') |
1404 | 1402 | |
1405 | 1403 |
# add global time exception |
... | ... | |
3303 | 3301 | |
3304 | 3302 | |
3305 | 3303 |
def test_agenda_view_event(app, manager_user): |
3306 |
agenda = Agenda(label=u'Foo bar')
|
|
3304 |
agenda = Agenda(label='Foo bar') |
|
3307 | 3305 |
agenda.view_role = manager_user.groups.all()[0] |
3308 | 3306 |
agenda.save() |
3309 | 3307 |
event = Event.objects.create( |
... | ... | |
3411 | 3409 | |
3412 | 3410 | |
3413 | 3411 |
def test_import_agenda(app, admin_user): |
3414 |
agenda = Agenda(label=u'Foo bar')
|
|
3412 |
agenda = Agenda(label='Foo bar') |
|
3415 | 3413 |
agenda.save() |
3416 | 3414 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
3417 | 3415 | |
... | ... | |
3479 | 3477 | |
3480 | 3478 |
# reference to unknown group |
3481 | 3479 |
agenda_export_dict = json.loads(force_text(agenda_export)) |
3482 |
agenda_export_dict['agendas'][0]['permissions']['view'] = u'gé1'
|
|
3480 |
agenda_export_dict['agendas'][0]['permissions']['view'] = 'gé1' |
|
3483 | 3481 |
agenda_export = json.dumps(agenda_export_dict).encode('utf-8') |
3484 | 3482 |
Agenda.objects.all().delete() |
3485 | 3483 |
resp = app.get('/manage/', status=200) |
3486 | 3484 |
resp = resp.click('Import') |
3487 | 3485 |
resp.form['agendas_json'] = Upload('export.json', agenda_export, 'application/json') |
3488 | 3486 |
resp = resp.form.submit() |
3489 |
assert u'Missing roles: "gé1"' in resp.text
|
|
3487 |
assert 'Missing roles: "gé1"' in resp.text |
|
3490 | 3488 |
del agenda_export_dict['agendas'][0]['permissions']['view'] |
3491 | 3489 | |
3492 | 3490 |
# missing field |
... | ... | |
3832 | 3830 |
assert tp.end_time.minute == 0 |
3833 | 3831 | |
3834 | 3832 |
resp = resp.follow() |
3835 |
assert u'Monday / 10 a.m. → 5 p.m.' in resp.text
|
|
3833 |
assert 'Monday / 10 a.m. → 5 p.m.' in resp.text |
|
3836 | 3834 | |
3837 | 3835 | |
3838 | 3836 |
def test_virtual_agenda_settings_edit_excluded_period(app, admin_user): |
... | ... | |
4033 | 4031 | |
4034 | 4032 | |
4035 | 4033 |
def test_duplicate_agenda(app, admin_user): |
4036 |
agenda = Agenda.objects.create(label=u'Foo Bar', slug='foo-bar', kind='meetings')
|
|
4034 |
agenda = Agenda.objects.create(label='Foo Bar', slug='foo-bar', kind='meetings') |
|
4037 | 4035 |
assert Agenda.objects.count() == 1 |
4038 | 4036 | |
4039 | 4037 |
app = login(app) |
... | ... | |
4338 | 4336 |
site_json = json.loads(resp.text) |
4339 | 4337 |
assert site_json == {'unavailability_calendars': [], 'agendas': [], 'absence_reason_groups': []} |
4340 | 4338 | |
4341 |
agenda = Agenda.objects.create(label=u'Foo Bar', kind='events')
|
|
4339 |
agenda = Agenda.objects.create(label='Foo Bar', kind='events') |
|
4342 | 4340 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
4343 | 4341 |
UnavailabilityCalendar.objects.create(label='Calendar 1') |
4344 | 4342 |
resp = app.get('/manage/agendas/export/') |
tests/manager/test_category.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 | 1 |
import pytest |
4 | 2 | |
5 | 3 |
from chrono.agendas.models import Agenda, Category |
... | ... | |
10 | 8 | |
11 | 9 | |
12 | 10 |
def test_list_categories_as_manager(app, manager_user): |
13 |
agenda = Agenda(label=u'Foo Bar')
|
|
11 |
agenda = Agenda(label='Foo Bar') |
|
14 | 12 |
agenda.view_role = manager_user.groups.all()[0] |
15 | 13 |
agenda.save() |
16 | 14 |
app = login(app, username='manager', password='manager') |
... | ... | |
34 | 32 | |
35 | 33 | |
36 | 34 |
def test_add_category_as_manager(app, manager_user): |
37 |
agenda = Agenda(label=u'Foo Bar')
|
|
35 |
agenda = Agenda(label='Foo Bar') |
|
38 | 36 |
agenda.view_role = manager_user.groups.all()[0] |
39 | 37 |
agenda.save() |
40 | 38 |
app = login(app, username='manager', password='manager') |
... | ... | |
57 | 55 | |
58 | 56 | |
59 | 57 |
def test_edit_category_as_manager(app, manager_user): |
60 |
agenda = Agenda(label=u'Foo Bar')
|
|
58 |
agenda = Agenda(label='Foo Bar') |
|
61 | 59 |
agenda.view_role = manager_user.groups.all()[0] |
62 | 60 |
agenda.save() |
63 | 61 |
category = Category.objects.create(label='Foo bar') |
... | ... | |
77 | 75 | |
78 | 76 | |
79 | 77 |
def test_delete_category_as_manager(app, manager_user): |
80 |
agenda = Agenda(label=u'Foo Bar')
|
|
78 |
agenda = Agenda(label='Foo Bar') |
|
81 | 79 |
agenda.view_role = manager_user.groups.all()[0] |
82 | 80 |
agenda.save() |
83 | 81 |
category = Category.objects.create(label='Foo bar') |
tests/manager/test_event.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 | 1 |
import codecs |
4 | 2 |
import datetime |
3 |
from unittest import mock |
|
5 | 4 | |
6 |
import mock |
|
7 | 5 |
import pytest |
8 | 6 |
import requests |
9 | 7 |
from django.core.management import call_command |
... | ... | |
20 | 18 | |
21 | 19 | |
22 | 20 |
def test_add_event(app, admin_user): |
23 |
agenda = Agenda(label=u'Foo bar')
|
|
21 |
agenda = Agenda(label='Foo bar') |
|
24 | 22 |
agenda.maximal_booking_delay = 0 |
25 | 23 |
agenda.save() |
26 | 24 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
... | ... | |
71 | 69 | |
72 | 70 | |
73 | 71 |
def test_add_event_as_manager(app, manager_user): |
74 |
agenda = Agenda(label=u'Foo bar')
|
|
72 |
agenda = Agenda(label='Foo bar') |
|
75 | 73 |
agenda.view_role = manager_user.groups.all()[0] |
76 | 74 |
agenda.save() |
77 | 75 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
... | ... | |
111 | 109 | |
112 | 110 |
def test_edit_event(settings, app, admin_user): |
113 | 111 |
settings.LANGUAGE_CODE = 'fr-fr' # check date initial value format |
114 |
agenda = Agenda(label=u'Foo bar')
|
|
112 |
agenda = Agenda(label='Foo bar') |
|
115 | 113 |
agenda.save() |
116 | 114 |
event = Event(start_datetime=make_aware(datetime.datetime(2016, 2, 15, 17, 0)), places=20, agenda=agenda) |
117 | 115 |
event.save() |
... | ... | |
144 | 142 | |
145 | 143 | |
146 | 144 |
def test_event_digit_slug(app, admin_user): |
147 |
agenda = Agenda(label=u'Foo bar')
|
|
145 |
agenda = Agenda(label='Foo bar') |
|
148 | 146 |
agenda.maximal_booking_delay = 0 |
149 | 147 |
agenda.save() |
150 | 148 |
event = Event.objects.create(agenda=agenda, start_datetime=now(), places=10) |
... | ... | |
162 | 160 | |
163 | 161 | |
164 | 162 |
def test_edit_event_as_manager(app, manager_user): |
165 |
agenda = Agenda(label=u'Foo bar')
|
|
163 |
agenda = Agenda(label='Foo bar') |
|
166 | 164 |
agenda.view_role = manager_user.groups.all()[0] |
167 | 165 |
agenda.save() |
168 | 166 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
... | ... | |
340 | 338 | |
341 | 339 | |
342 | 340 |
def test_booked_places(app, admin_user): |
343 |
agenda = Agenda(label=u'Foo bar')
|
|
341 |
agenda = Agenda(label='Foo bar') |
|
344 | 342 |
agenda.save() |
345 | 343 |
event = Event(start_datetime=make_aware(datetime.datetime(2016, 2, 15, 17, 0)), places=10, agenda=agenda) |
346 | 344 |
event.save() |
... | ... | |
355 | 353 | |
356 | 354 | |
357 | 355 |
def test_event_classes(app, admin_user): |
358 |
agenda = Agenda(label=u'Foo bar')
|
|
356 |
agenda = Agenda(label='Foo bar') |
|
359 | 357 |
agenda.save() |
360 | 358 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
361 | 359 |
event = Event(start_datetime=make_aware(datetime.datetime(2016, 2, 15, 17, 0)), places=10, agenda=agenda) |
... | ... | |
390 | 388 | |
391 | 389 | |
392 | 390 |
def test_delete_event(app, admin_user): |
393 |
agenda = Agenda(label=u'Foo bar')
|
|
391 |
agenda = Agenda(label='Foo bar') |
|
394 | 392 |
agenda.save() |
395 | 393 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
396 | 394 |
event = Event(start_datetime=make_aware(datetime.datetime(2016, 2, 15, 17, 0)), places=10, agenda=agenda) |
... | ... | |
406 | 404 | |
407 | 405 | |
408 | 406 |
def test_delete_busy_event(app, admin_user): |
409 |
agenda = Agenda(label=u'Foo bar')
|
|
407 |
agenda = Agenda(label='Foo bar') |
|
410 | 408 |
agenda.save() |
411 | 409 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
412 | 410 |
event = Event(start_datetime=now() + datetime.timedelta(days=10), places=10, agenda=agenda) |
... | ... | |
477 | 475 | |
478 | 476 | |
479 | 477 |
def test_delete_event_as_manager(app, manager_user): |
480 |
agenda = Agenda(label=u'Foo bar')
|
|
478 |
agenda = Agenda(label='Foo bar') |
|
481 | 479 |
agenda.edit_role = manager_user.groups.all()[0] |
482 | 480 |
agenda.save() |
483 | 481 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
... | ... | |
494 | 492 | |
495 | 493 | |
496 | 494 |
def test_export_events(app, admin_user): |
497 |
agenda = Agenda.objects.create(label=u'Foo bar')
|
|
495 |
agenda = Agenda.objects.create(label='Foo bar') |
|
498 | 496 | |
499 | 497 |
app = login(app) |
500 | 498 |
resp = app.get('/manage/agendas/%s/export-events' % agenda.id) |
... | ... | |
534 | 532 | |
535 | 533 | |
536 | 534 |
def test_export_events_wrong_kind(app, admin_user): |
537 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
535 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
538 | 536 | |
539 | 537 |
app = login(app) |
540 | 538 |
app.get('/manage/agendas/%s/export-events' % agenda.id, status=404) |
... | ... | |
544 | 542 | |
545 | 543 | |
546 | 544 |
def test_import_events(app, admin_user): |
547 |
agenda = Agenda(label=u'Foo bar')
|
|
545 |
agenda = Agenda(label='Foo bar') |
|
548 | 546 |
agenda.save() |
549 | 547 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
550 | 548 | |
... | ... | |
607 | 605 |
Event.objects.all().delete() |
608 | 606 | |
609 | 607 |
resp = app.get('/manage/agendas/%s/import-events' % agenda.id, status=200) |
610 |
resp.form['events_csv_file'] = Upload( |
|
611 |
't.csv', u'2016-09-16,18:00,10,5,éléphant'.encode('utf-8'), 'text/csv' |
|
612 |
) |
|
608 |
resp.form['events_csv_file'] = Upload('t.csv', '2016-09-16,18:00,10,5,éléphant'.encode(), 'text/csv') |
|
613 | 609 |
resp = resp.form.submit(status=302) |
614 | 610 |
assert Event.objects.count() == 1 |
615 | 611 |
assert Event.objects.all()[0].start_datetime == make_aware(datetime.datetime(2016, 9, 16, 18, 0)) |
616 | 612 |
assert Event.objects.all()[0].places == 10 |
617 | 613 |
assert Event.objects.all()[0].waiting_list_places == 5 |
618 |
assert Event.objects.all()[0].label == u'éléphant'
|
|
614 |
assert Event.objects.all()[0].label == 'éléphant' |
|
619 | 615 |
Event.objects.all().delete() |
620 | 616 | |
621 | 617 |
# BOM |
622 | 618 |
resp = app.get('/manage/agendas/%s/import-events' % agenda.id, status=200) |
623 | 619 |
resp.form['events_csv_file'] = Upload( |
624 |
't.csv', codecs.BOM_UTF8 + u'2016-09-16,18:00,10,5,éléphant'.encode('utf-8'), 'text/csv'
|
|
620 |
't.csv', codecs.BOM_UTF8 + '2016-09-16,18:00,10,5,éléphant'.encode(), 'text/csv'
|
|
625 | 621 |
) |
626 | 622 |
resp = resp.form.submit(status=302) |
627 | 623 |
assert Event.objects.count() == 1 |
628 | 624 |
assert Event.objects.all()[0].start_datetime == make_aware(datetime.datetime(2016, 9, 16, 18, 0)) |
629 | 625 |
assert Event.objects.all()[0].places == 10 |
630 | 626 |
assert Event.objects.all()[0].waiting_list_places == 5 |
631 |
assert Event.objects.all()[0].label == u'éléphant'
|
|
627 |
assert Event.objects.all()[0].label == 'éléphant' |
|
632 | 628 |
Event.objects.all().delete() |
633 | 629 | |
634 | 630 |
resp = app.get('/manage/agendas/%s/import-events' % agenda.id, status=200) |
635 | 631 |
resp.form['events_csv_file'] = Upload( |
636 |
't.csv', u'2016-09-16,18:00,10,5,éléphant'.encode('iso-8859-15'), 'text/csv'
|
|
632 |
't.csv', '2016-09-16,18:00,10,5,éléphant'.encode('iso-8859-15'), 'text/csv' |
|
637 | 633 |
) |
638 | 634 |
resp = resp.form.submit(status=302) |
639 | 635 |
assert Event.objects.count() == 1 |
640 | 636 |
assert Event.objects.all()[0].start_datetime == make_aware(datetime.datetime(2016, 9, 16, 18, 0)) |
641 | 637 |
assert Event.objects.all()[0].places == 10 |
642 | 638 |
assert Event.objects.all()[0].waiting_list_places == 5 |
643 |
assert Event.objects.all()[0].label == u'éléphant'
|
|
639 |
assert Event.objects.all()[0].label == 'éléphant' |
|
644 | 640 |
Event.objects.all().delete() |
645 | 641 | |
646 | 642 |
resp = app.get('/manage/agendas/%s/import-events' % agenda.id, status=200) |
647 | 643 |
resp.form['events_csv_file'] = Upload( |
648 |
't.csv', u'2016-09-16,18:00,10,5,éléphant'.encode('eucjp'), 'text/csv'
|
|
644 |
't.csv', '2016-09-16,18:00,10,5,éléphant'.encode('eucjp'), 'text/csv' |
|
649 | 645 |
) |
650 | 646 |
resp = resp.form.submit(status=302) |
651 | 647 |
assert Event.objects.count() == 1 |
652 | 648 |
assert Event.objects.all()[0].start_datetime == make_aware(datetime.datetime(2016, 9, 16, 18, 0)) |
653 | 649 |
assert Event.objects.all()[0].places == 10 |
654 | 650 |
assert Event.objects.all()[0].waiting_list_places == 5 |
655 |
assert Event.objects.all()[0].label == u'\x8f«±l\x8f«±phant' # eucjp interpreted as iso-8859-15
|
|
651 |
assert Event.objects.all()[0].label == '\x8f«±l\x8f«±phant' # eucjp interpreted as iso-8859-15 |
|
656 | 652 |
Event.objects.all().delete() |
657 | 653 | |
658 | 654 |
resp = app.get('/manage/agendas/%s/import-events' % agenda.id, status=200) |
... | ... | |
754 | 750 |
resp = resp.form.submit(status=302) |
755 | 751 |
assert len(ctx.captured_queries) == 22 |
756 | 752 |
assert Event.objects.count() == 5 |
757 |
assert set(Event.objects.values_list('slug', flat=True)) == set( |
|
758 |
['labelb', 'labelb-1', 'labelb-2', 'labelb-3', 'labelb-4'] |
|
759 |
) |
|
753 |
assert set(Event.objects.values_list('slug', flat=True)) == { |
|
754 |
'labelb', |
|
755 |
'labelb-1', |
|
756 |
'labelb-2', |
|
757 |
'labelb-3', |
|
758 |
'labelb-4', |
|
759 |
} |
|
760 | 760 | |
761 | 761 |
# forbidden numerical slug |
762 | 762 |
Event.objects.all().delete() |
... | ... | |
768 | 768 | |
769 | 769 | |
770 | 770 |
def test_import_events_existing_event(app, admin_user, freezer): |
771 |
agenda = Agenda.objects.create(label=u'Foo bar')
|
|
771 |
agenda = Agenda.objects.create(label='Foo bar') |
|
772 | 772 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
773 | 773 | |
774 | 774 |
app = login(app) |
... | ... | |
803 | 803 |
not in resp.text |
804 | 804 |
) |
805 | 805 |
assert event.start_datetime == make_aware( |
806 |
datetime.datetime(*[int(v) for v in date.split('-')], *[int(v) for v in time.split(':')])
|
|
806 |
datetime.datetime(*(int(v) for v in date.split('-')), *(int(v) for v in time.split(':')))
|
|
807 | 807 |
) |
808 | 808 | |
809 | 809 |
# change date or time |
... | ... | |
867 | 867 | |
868 | 868 | |
869 | 869 |
def test_import_events_wrong_kind(app, admin_user): |
870 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
870 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
871 | 871 | |
872 | 872 |
app = login(app) |
873 | 873 |
app.get('/manage/agendas/%s/import-events' % agenda.id, status=404) |
tests/manager/test_resource.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 | 1 |
import datetime |
4 | 2 | |
5 | 3 |
import freezegun |
... | ... | |
16 | 14 | |
17 | 15 | |
18 | 16 |
def test_list_resources_as_manager(app, manager_user): |
19 |
agenda = Agenda(label=u'Foo Bar')
|
|
17 |
agenda = Agenda(label='Foo Bar') |
|
20 | 18 |
agenda.view_role = manager_user.groups.all()[0] |
21 | 19 |
agenda.save() |
22 | 20 |
app = login(app, username='manager', password='manager') |
... | ... | |
40 | 38 | |
41 | 39 | |
42 | 40 |
def test_add_resource_as_manager(app, manager_user): |
43 |
agenda = Agenda(label=u'Foo Bar')
|
|
41 |
agenda = Agenda(label='Foo Bar') |
|
44 | 42 |
agenda.view_role = manager_user.groups.all()[0] |
45 | 43 |
agenda.save() |
46 | 44 |
app = login(app, username='manager', password='manager') |
... | ... | |
48 | 46 | |
49 | 47 | |
50 | 48 |
def test_view_resource(app, admin_user): |
51 |
agenda = Agenda.objects.create(label=u'Foo Bar', kind='meetings')
|
|
49 |
agenda = Agenda.objects.create(label='Foo Bar', kind='meetings') |
|
52 | 50 |
resource = Resource.objects.create(label='Resource 1') |
53 | 51 | |
54 | 52 |
app = login(app) |
... | ... | |
61 | 59 | |
62 | 60 | |
63 | 61 |
def test_view_resource_as_manager(app, manager_user): |
64 |
agenda = Agenda.objects.create(label=u'Foo Bar', kind='meetings')
|
|
62 |
agenda = Agenda.objects.create(label='Foo Bar', kind='meetings') |
|
65 | 63 |
agenda.view_role = manager_user.groups.all()[0] |
66 | 64 |
agenda.save() |
67 | 65 |
resource = Resource.objects.create(label='Resource 1') |
... | ... | |
200 | 198 | |
201 | 199 | |
202 | 200 |
def test_day_view_resource_as_manager(app, manager_user): |
203 |
agenda = Agenda.objects.create(label=u'Foo Bar', kind='meetings')
|
|
201 |
agenda = Agenda.objects.create(label='Foo Bar', kind='meetings') |
|
204 | 202 |
agenda.view_role = manager_user.groups.all()[0] |
205 | 203 |
agenda.save() |
206 | 204 |
resource = Resource.objects.create(label='Resource 1') |
... | ... | |
467 | 465 | |
468 | 466 | |
469 | 467 |
def test_month_view_resource_as_manager(app, manager_user): |
470 |
agenda = Agenda.objects.create(label=u'Foo Bar', kind='meetings')
|
|
468 |
agenda = Agenda.objects.create(label='Foo Bar', kind='meetings') |
|
471 | 469 |
agenda.view_role = manager_user.groups.all()[0] |
472 | 470 |
agenda.save() |
473 | 471 |
resource = Resource.objects.create(label='Resource 1') |
... | ... | |
492 | 490 | |
493 | 491 | |
494 | 492 |
def test_edit_resource_as_manager(app, manager_user): |
495 |
agenda = Agenda.objects.create(label=u'Foo Bar', kind='meetings')
|
|
493 |
agenda = Agenda.objects.create(label='Foo Bar', kind='meetings') |
|
496 | 494 |
agenda.view_role = manager_user.groups.all()[0] |
497 | 495 |
agenda.save() |
498 | 496 |
resource = Resource.objects.create(label='Resource 1') |
... | ... | |
512 | 510 | |
513 | 511 | |
514 | 512 |
def test_delete_resource_as_manager(app, manager_user): |
515 |
agenda = Agenda.objects.create(label=u'Foo Bar', kind='meetings')
|
|
513 |
agenda = Agenda.objects.create(label='Foo Bar', kind='meetings') |
|
516 | 514 |
agenda.view_role = manager_user.groups.all()[0] |
517 | 515 |
agenda.save() |
518 | 516 |
resource = Resource.objects.create(label='Resource 1') |
... | ... | |
521 | 519 | |
522 | 520 | |
523 | 521 |
def test_agenda_resources(app, admin_user): |
524 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='events')
|
|
522 |
agenda = Agenda.objects.create(label='Foo bar', kind='events') |
|
525 | 523 |
resource = Resource.objects.create(label='Resource 1') |
526 | 524 |
app = login(app) |
527 | 525 |
# not for events agenda |
... | ... | |
530 | 528 | |
531 | 529 | |
532 | 530 |
def test_meetings_agenda_resources(app, admin_user): |
533 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
|
531 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
|
534 | 532 |
app = login(app) |
535 | 533 |
resp = app.get('/manage/agendas/%s/settings' % agenda.pk) |
536 | 534 |
assert 'has_resources' in resp.context |
tests/manager/test_unavailability_calendar.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 | 1 |
import copy |
4 | 2 |
import datetime |
5 | 3 |
import json |
... | ... | |
26 | 24 | |
27 | 25 | |
28 | 26 |
def test_import_unavailability_calendar(app, admin_user): |
29 |
calendar = UnavailabilityCalendar.objects.create(label=u'Foo bar')
|
|
27 |
calendar = UnavailabilityCalendar.objects.create(label='Foo bar') |
|
30 | 28 | |
31 | 29 |
app = login(app) |
32 | 30 |
with freezegun.freeze_time('2020-06-15'): |
... | ... | |
95 | 93 | |
96 | 94 |
# reference to unknown group |
97 | 95 |
calendar_export_dict = json.loads(force_text(calendar_export)) |
98 |
calendar_export_dict['unavailability_calendars'][0]['permissions']['view'] = u'gé1'
|
|
96 |
calendar_export_dict['unavailability_calendars'][0]['permissions']['view'] = 'gé1' |
|
99 | 97 |
calendar_export = json.dumps(calendar_export_dict).encode('utf-8') |
100 | 98 |
UnavailabilityCalendar.objects.all().delete() |
101 | 99 |
resp = app.get('/manage/', status=200) |
102 | 100 |
resp = resp.click('Import') |
103 | 101 |
resp.form['agendas_json'] = Upload('export.json', calendar_export, 'application/json') |
104 | 102 |
resp = resp.form.submit() |
105 |
assert u'Missing roles: "gé1"' in resp.text
|
|
103 |
assert 'Missing roles: "gé1"' in resp.text |
|
106 | 104 |
del calendar_export_dict['unavailability_calendars'][0]['permissions']['view'] |
107 | 105 | |
108 | 106 |
tests/test_agendas.py | ||
---|---|---|
1 | 1 |
import datetime |
2 | 2 |
import json |
3 | 3 |
import smtplib |
4 |
from unittest import mock |
|
4 | 5 | |
5 |
import mock |
|
6 | 6 |
import pytest |
7 | 7 |
import requests |
8 | 8 |
from django.contrib.auth.models import Group, User |
... | ... | |
116 | 116 | |
117 | 117 | |
118 | 118 |
def test_slug(): |
119 |
agenda = Agenda(label=u'Foo bar')
|
|
119 |
agenda = Agenda(label='Foo bar') |
|
120 | 120 |
agenda.save() |
121 | 121 |
assert agenda.slug == 'foo-bar' |
122 | 122 | |
123 | 123 | |
124 | 124 |
def test_existing_slug(): |
125 |
agenda = Agenda(label=u'Foo bar', slug='bar')
|
|
125 |
agenda = Agenda(label='Foo bar', slug='bar') |
|
126 | 126 |
agenda.save() |
127 | 127 |
assert agenda.slug == 'bar' |
128 | 128 | |
129 | 129 | |
130 | 130 |
def test_duplicate_slugs(): |
131 |
agenda = Agenda(label=u'Foo baz')
|
|
131 |
agenda = Agenda(label='Foo baz') |
|
132 | 132 |
agenda.save() |
133 | 133 |
assert agenda.slug == 'foo-baz' |
134 |
agenda = Agenda(label=u'Foo baz')
|
|
134 |
agenda = Agenda(label='Foo baz') |
|
135 | 135 |
agenda.save() |
136 | 136 |
assert agenda.slug == 'foo-baz-1' |
137 |
agenda = Agenda(label=u'Foo baz')
|
|
137 |
agenda = Agenda(label='Foo baz') |
|
138 | 138 |
agenda.save() |
139 | 139 |
assert agenda.slug == 'foo-baz-2' |
140 | 140 | |
141 | 141 | |
142 | 142 |
def test_resource_slug(): |
143 |
resource = Resource.objects.create(label=u'Foo bar')
|
|
143 |
resource = Resource.objects.create(label='Foo bar') |
|
144 | 144 |
assert resource.slug == 'foo-bar' |
145 | 145 | |
146 | 146 | |
147 | 147 |
def test_resource_existing_slug(): |
148 |
resource = Resource.objects.create(label=u'Foo bar', slug='bar')
|
|
148 |
resource = Resource.objects.create(label='Foo bar', slug='bar') |
|
149 | 149 |
assert resource.slug == 'bar' |
150 | 150 | |
151 | 151 | |
152 | 152 |
def test_resource_duplicate_slugs(): |
153 |
resource = Resource.objects.create(label=u'Foo baz')
|
|
153 |
resource = Resource.objects.create(label='Foo baz') |
|
154 | 154 |
assert resource.slug == 'foo-baz' |
155 |
resource = Resource.objects.create(label=u'Foo baz')
|
|
155 |
resource = Resource.objects.create(label='Foo baz') |
|
156 | 156 |
assert resource.slug == 'foo-baz-1' |
157 |
resource = Resource.objects.create(label=u'Foo baz')
|
|
157 |
resource = Resource.objects.create(label='Foo baz') |
|
158 | 158 |
assert resource.slug == 'foo-baz-2' |
159 | 159 | |
160 | 160 | |
161 | 161 |
def test_category_slug(): |
162 |
category = Category.objects.create(label=u'Foo bar')
|
|
162 |
category = Category.objects.create(label='Foo bar') |
|
163 | 163 |
assert category.slug == 'foo-bar' |
164 | 164 | |
165 | 165 | |
166 | 166 |
def test_category_existing_slug(): |
167 |
category = Category.objects.create(label=u'Foo bar', slug='bar')
|
|
167 |
category = Category.objects.create(label='Foo bar', slug='bar') |
|
168 | 168 |
assert category.slug == 'bar' |
169 | 169 | |
170 | 170 | |
171 | 171 |
def test_category_duplicate_slugs(): |
172 |
category = Category.objects.create(label=u'Foo baz')
|
|
172 |
category = Category.objects.create(label='Foo baz') |
|
173 | 173 |
assert category.slug == 'foo-baz' |
174 |
category = Category.objects.create(label=u'Foo baz')
|
|
174 |
category = Category.objects.create(label='Foo baz') |
|
175 | 175 |
assert category.slug == 'foo-baz-1' |
176 |
category = Category.objects.create(label=u'Foo baz')
|
|
176 |
category = Category.objects.create(label='Foo baz') |
|
177 | 177 |
assert category.slug == 'foo-baz-2' |
178 | 178 | |
179 | 179 | |
180 | 180 |
def test_absence_reason_group_slug(): |
181 |
group = AbsenceReasonGroup.objects.create(label=u'Foo bar')
|
|
181 |
group = AbsenceReasonGroup.objects.create(label='Foo bar') |
|
182 | 182 |
assert group.slug == 'foo-bar' |
183 | 183 | |
184 | 184 | |
185 | 185 |
def test_absence_reason_group_existing_slug(): |
186 |
group = AbsenceReasonGroup.objects.create(label=u'Foo bar', slug='bar')
|
|
186 |
group = AbsenceReasonGroup.objects.create(label='Foo bar', slug='bar') |
|
187 | 187 |
assert group.slug == 'bar' |
188 | 188 | |
189 | 189 | |
190 | 190 |
def test_absence_reason_group_duplicate_slugs(): |
191 |
group = AbsenceReasonGroup.objects.create(label=u'Foo baz')
|
|
191 |
group = AbsenceReasonGroup.objects.create(label='Foo baz') |
|
192 | 192 |
assert group.slug == 'foo-baz' |
193 |
group = AbsenceReasonGroup.objects.create(label=u'Foo baz')
|
|
193 |
group = AbsenceReasonGroup.objects.create(label='Foo baz') |
|
194 | 194 |
assert group.slug == 'foo-baz-1' |
195 |
group = AbsenceReasonGroup.objects.create(label=u'Foo baz')
|
|
195 |
group = AbsenceReasonGroup.objects.create(label='Foo baz') |
|
196 | 196 |
assert group.slug == 'foo-baz-2' |
197 | 197 | |
198 | 198 | |
... | ... | |
429 | 429 | |
430 | 430 | |
431 | 431 |
def test_event_manager(): |
432 |
agenda = Agenda(label=u'Foo baz')
|
|
432 |
agenda = Agenda(label='Foo baz') |
|
433 | 433 |
agenda.save() |
434 | 434 |
event = Event(start_datetime=now(), places=10, agenda=agenda) |
435 | 435 |
event.save() |
... | ... | |
460 | 460 |
) |
461 | 461 |
def test_event_bookable_period(start_days, start_minutes, min_delay, max_delay, pub_days, expected): |
462 | 462 |
agenda = Agenda.objects.create( |
463 |
label=u'Foo bar', minimal_booking_delay=min_delay, maximal_booking_delay=max_delay
|
|
463 |
label='Foo bar', minimal_booking_delay=min_delay, maximal_booking_delay=max_delay |
|
464 | 464 |
) |
465 | 465 |
event = Event.objects.create( |
466 | 466 |
start_datetime=localtime() + datetime.timedelta(days=start_days, minutes=start_minutes), |
... | ... | |
472 | 472 | |
473 | 473 | |
474 | 474 |
def test_meeting_type_slugs(): |
475 |
agenda1 = Agenda(label=u'Foo bar')
|
|
475 |
agenda1 = Agenda(label='Foo bar') |
|
476 | 476 |
agenda1.save() |
477 |
agenda2 = Agenda(label=u'Foo bar second')
|
|
477 |
agenda2 = Agenda(label='Foo bar second') |
|
478 | 478 |
agenda2.save() |
479 | 479 | |
480 |
meeting_type1 = MeetingType(agenda=agenda1, label=u'Baz')
|
|
480 |
meeting_type1 = MeetingType(agenda=agenda1, label='Baz') |
|
481 | 481 |
meeting_type1.save() |
482 | 482 |
assert meeting_type1.slug == 'baz' |
483 | 483 | |
484 |
meeting_type2 = MeetingType(agenda=agenda1, label=u'Baz')
|
|
484 |
meeting_type2 = MeetingType(agenda=agenda1, label='Baz') |
|
485 | 485 |
meeting_type2.save() |
486 | 486 |
assert meeting_type2.slug == 'baz-1' |
487 | 487 | |
488 |
meeting_type3 = MeetingType(agenda=agenda2, label=u'Baz')
|
|
488 |
meeting_type3 = MeetingType(agenda=agenda2, label='Baz') |
|
489 | 489 |
meeting_type3.save() |
490 | 490 |
assert meeting_type3.slug == 'baz' |
491 | 491 | |
492 | 492 | |
493 | 493 |
def test_timeperiodexception_creation_from_ics(): |
494 |
agenda = Agenda.objects.create(label=u'Test 1 agenda')
|
|
494 |
agenda = Agenda.objects.create(label='Test 1 agenda') |
|
495 | 495 |
desk = Desk.objects.create(label='Test 1 desk', agenda=agenda) |
496 | 496 |
source = desk.timeperiodexceptionsource_set.create( |
497 | 497 |
ics_filename='sample.ics', ics_file=ContentFile(ICS_SAMPLE, name='sample.ics') |
... | ... | |
501 | 501 | |
502 | 502 | |
503 | 503 |
def test_timeperiodexception_creation_from_ics_without_startdt(): |
504 |
agenda = Agenda.objects.create(label=u'Test 2 agenda')
|
|
504 |
agenda = Agenda.objects.create(label='Test 2 agenda') |
|
505 | 505 |
desk = Desk.objects.create(label='Test 2 desk', agenda=agenda) |
506 | 506 |
lines = [] |
507 | 507 |
# remove start datetimes from ics |
... | ... | |
517 | 517 | |
518 | 518 | |
519 | 519 |
def test_timeperiodexception_creation_from_ics_without_enddt(): |
520 |
agenda = Agenda.objects.create(label=u'Test 3 agenda')
|
|
520 |
agenda = Agenda.objects.create(label='Test 3 agenda') |
|
521 | 521 |
desk = Desk.objects.create(label='Test 3 desk', agenda=agenda) |
522 | 522 |
lines = [] |
523 | 523 |
# remove end datetimes from ics |
... | ... | |
535 | 535 | |
536 | 536 |
@pytest.mark.freeze_time('2017-12-01') |
537 | 537 |
def test_timeperiodexception_creation_from_ics_with_recurrences(): |
538 |
agenda = Agenda.objects.create(label=u'Test 4 agenda')
|
|
538 |
agenda = Agenda.objects.create(label='Test 4 agenda') |
|
539 | 539 |
desk = Desk.objects.create(label='Test 4 desk', agenda=agenda) |
540 | 540 |
source = desk.timeperiodexceptionsource_set.create( |
541 | 541 |
ics_filename='sample.ics', ics_file=ContentFile(ICS_SAMPLE_WITH_RECURRENT_EVENT, name='sample.ics') |
... | ... | |
545 | 545 | |
546 | 546 | |
547 | 547 |
def test_timeexception_creation_from_ics_with_dates(): |
548 |
agenda = Agenda.objects.create(label=u'Test 5 agenda')
|
|
548 |
agenda = Agenda.objects.create(label='Test 5 agenda') |
|
549 | 549 |
desk = Desk.objects.create(label='Test 5 desk', agenda=agenda) |
550 | 550 |
lines = [] |
551 | 551 |
# remove end datetimes from ics |
... | ... | |
563 | 563 | |
564 | 564 | |
565 | 565 |
def test_timeexception_create_from_invalid_ics(): |
566 |
agenda = Agenda.objects.create(label=u'Test 6 agenda')
|
|
566 |
agenda = Agenda.objects.create(label='Test 6 agenda') |
|
567 | 567 |
desk = Desk.objects.create(label='Test 6 desk', agenda=agenda) |
568 | 568 |
source = desk.timeperiodexceptionsource_set.create( |
569 | 569 |
ics_filename='sample.ics', ics_file=ContentFile(INVALID_ICS_SAMPLE, name='sample.ics') |
... | ... | |
574 | 574 | |
575 | 575 | |
576 | 576 |
def test_timeexception_create_from_ics_with_no_events(): |
577 |
agenda = Agenda.objects.create(label=u'Test 7 agenda')
|
|
577 |
agenda = Agenda.objects.create(label='Test 7 agenda') |
|
578 | 578 |
desk = Desk.objects.create(label='Test 7 desk', agenda=agenda) |
579 | 579 |
source = desk.timeperiodexceptionsource_set.create( |
580 | 580 |
ics_filename='sample.ics', ics_file=ContentFile(ICS_SAMPLE_WITH_NO_EVENTS, name='sample.ics') |
... | ... | |
586 | 586 | |
587 | 587 |
@mock.patch('chrono.agendas.models.requests.get') |
588 | 588 |
def test_timeperiodexception_creation_from_remote_ics(mocked_get): |
589 |
agenda = Agenda.objects.create(label=u'Test 8 agenda')
|
|
589 |
agenda = Agenda.objects.create(label='Test 8 agenda') |
|
590 | 590 |
desk = Desk.objects.create(label='Test 8 desk', agenda=agenda) |
591 | 591 |
mocked_response = mock.Mock() |
592 | 592 |
mocked_response.text = ICS_SAMPLE |
... | ... | |
605 | 605 | |
606 | 606 |
@mock.patch('chrono.agendas.models.requests.get') |
607 | 607 |
def test_timeperiodexception_remote_ics_encoding(mocked_get): |
608 |
agenda = Agenda.objects.create(label=u'Test 8 agenda')
|
|
608 |
agenda = Agenda.objects.create(label='Test 8 agenda') |
|
609 | 609 |
desk = Desk.objects.create(label='Test 8 desk', agenda=agenda) |
610 | 610 |
mocked_response = mock.Mock() |
611 | 611 |
mocked_response.content = ICS_SAMPLE.encode('iso-8859-15') |
... | ... | |
619 | 619 | |
620 | 620 |
@mock.patch('chrono.agendas.models.requests.get') |
621 | 621 |
def test_timeperiodexception_creation_from_unreachable_remote_ics(mocked_get): |
622 |
agenda = Agenda.objects.create(label=u'Test 9 agenda')
|
|
622 |
agenda = Agenda.objects.create(label='Test 9 agenda') |
|
623 | 623 |
desk = Desk.objects.create(label='Test 9 desk', agenda=agenda) |
624 | 624 |
mocked_response = mock.Mock() |
625 | 625 |
mocked_response.text = ICS_SAMPLE |
... | ... | |
637 | 637 | |
638 | 638 |
@mock.patch('chrono.agendas.models.requests.get') |
639 | 639 |
def test_timeperiodexception_creation_from_forbidden_remote_ics(mocked_get): |
640 |
agenda = Agenda.objects.create(label=u'Test 10 agenda')
|
|
640 |
agenda = Agenda.objects.create(label='Test 10 agenda') |
|
641 | 641 |
desk = Desk.objects.create(label='Test 10 desk', agenda=agenda) |
642 | 642 |
mocked_response = mock.Mock() |
643 | 643 |
mocked_response.status_code = 403 |
... | ... | |
657 | 657 | |
658 | 658 |
@mock.patch('chrono.agendas.models.requests.get') |
659 | 659 |
def test_sync_desks_timeperiod_exceptions_from_ics(mocked_get, capsys): |
660 |
agenda = Agenda.objects.create(label=u'Test 11 agenda')
|
|
660 |
agenda = Agenda.objects.create(label='Test 11 agenda') |
|
661 | 661 |
desk = Desk.objects.create(label='Test 11 desk', agenda=agenda) |
662 | 662 |
source = TimePeriodExceptionSource.objects.create(desk=desk, ics_url='http://example.com/sample.ics') |
663 | 663 |
mocked_response = mock.Mock() |
... | ... | |
715 | 715 |
} |
716 | 716 |
) |
717 | 717 |
def test_timeperiodexception_from_settings(): |
718 |
agenda = Agenda(label=u'Test 1 agenda')
|
|
718 |
agenda = Agenda(label='Test 1 agenda') |
|
719 | 719 |
agenda.save() |
720 | 720 |
desk = Desk(label='Test 1 desk', agenda=agenda) |
721 | 721 |
desk.save() |
... | ... | |
749 | 749 |
'holidays': {'class': 'workalendar.europe.France', 'label': 'Holidays'}, |
750 | 750 |
} |
751 | 751 |
} |
752 |
agenda = Agenda(label=u'Test 1 agenda')
|
|
752 |
agenda = Agenda(label='Test 1 agenda') |
|
753 | 753 |
agenda.save() |
754 | 754 | |
755 | 755 |
desk1 = Desk(label='Test 1 desk', agenda=agenda) |
... | ... | |
822 | 822 |
def test_timeperiodexception_creation_from_ics_with_duration(): |
823 | 823 |
# test that event defined using duration works and give the same start and |
824 | 824 |
# end dates |
825 |
agenda = Agenda.objects.create(label=u'Test 1 agenda')
|
|
825 |
agenda = Agenda.objects.create(label='Test 1 agenda') |
|
826 | 826 |
desk = Desk.objects.create(label='Test 1 desk', agenda=agenda) |
827 | 827 |
source = desk.timeperiodexceptionsource_set.create( |
828 | 828 |
ics_filename='sample.ics', ics_file=ContentFile(ICS_SAMPLE_WITH_DURATION, name='sample.ics') |
829 | 829 |
) |
830 | 830 |
source.refresh_timeperiod_exceptions_from_ics() |
831 | 831 |
assert TimePeriodException.objects.filter(desk=desk).count() == 2 |
832 |
assert set(TimePeriodException.objects.values_list('start_datetime', flat=True)) == set( |
|
833 |
[ |
|
834 |
make_aware(datetime.datetime(2017, 8, 31, 19, 8, 0)), |
|
835 |
make_aware(datetime.datetime(2017, 8, 30, 20, 8, 0)), |
|
836 |
] |
|
837 |
) |
|
838 |
assert set(TimePeriodException.objects.values_list('end_datetime', flat=True)) == set( |
|
839 |
[ |
|
840 |
make_aware(datetime.datetime(2017, 8, 31, 22, 34, 0)), |
|
841 |
make_aware(datetime.datetime(2017, 9, 1, 0, 34, 0)), |
|
842 |
] |
|
843 |
) |
|
832 |
assert set(TimePeriodException.objects.values_list('start_datetime', flat=True)) == { |
|
833 |
make_aware(datetime.datetime(2017, 8, 31, 19, 8, 0)), |
|
834 |
make_aware(datetime.datetime(2017, 8, 30, 20, 8, 0)), |
|
835 |
} |
|
836 |
assert set(TimePeriodException.objects.values_list('end_datetime', flat=True)) == { |
|
837 |
make_aware(datetime.datetime(2017, 8, 31, 22, 34, 0)), |
|
838 |
make_aware(datetime.datetime(2017, 9, 1, 0, 34, 0)), |
|
839 |
} |
|
844 | 840 | |
845 | 841 | |
846 | 842 |
@pytest.mark.freeze_time('2017-12-01') |
847 | 843 |
def test_timeperiodexception_creation_from_ics_with_recurrences_in_the_past(): |
848 | 844 |
# test that recurrent events before today are not created |
849 | 845 |
# also test that duration + recurrent events works |
850 |
agenda = Agenda.objects.create(label=u'Test 4 agenda')
|
|
846 |
agenda = Agenda.objects.create(label='Test 4 agenda') |
|
851 | 847 |
desk = Desk.objects.create(label='Test 4 desk', agenda=agenda) |
852 | 848 |
source = desk.timeperiodexceptionsource_set.create( |
853 | 849 |
ics_filename='sample.ics', |
... | ... | |
855 | 851 |
) |
856 | 852 |
source.refresh_timeperiod_exceptions_from_ics() |
857 | 853 |
assert TimePeriodException.objects.filter(desk=desk).count() == 2 |
858 |
assert set(TimePeriodException.objects.values_list('start_datetime', flat=True)) == set( |
|
859 |
[make_aware(datetime.datetime(2018, 1, 1)), make_aware(datetime.datetime(2019, 1, 1))] |
|
860 |
) |
|
854 |
assert set(TimePeriodException.objects.values_list('start_datetime', flat=True)) == { |
|
855 |
make_aware(datetime.datetime(2018, 1, 1)), |
|
856 |
make_aware(datetime.datetime(2019, 1, 1)), |
|
857 |
} |
|
861 | 858 | |
862 | 859 | |
863 | 860 |
def test_timeperiodexception_creation_from_ics_with_recurrences_atreal(): |
864 |
agenda = Agenda.objects.create(label=u'Test atreal agenda')
|
|
861 |
agenda = Agenda.objects.create(label='Test atreal agenda') |
|
865 | 862 |
desk = Desk.objects.create(label='Test atreal desk', agenda=agenda) |
866 | 863 |
source = desk.timeperiodexceptionsource_set.create( |
867 | 864 |
ics_filename='sample.ics', ics_file=ContentFile(ICS_ATREAL, name='sample.ics') |
... | ... | |
871 | 868 | |
872 | 869 | |
873 | 870 |
def test_management_role_deletion(): |
874 |
group = Group(name=u'Group')
|
|
871 |
group = Group(name='Group') |
|
875 | 872 |
group.save() |
876 |
agenda = Agenda(label=u'Test agenda', edit_role=group, view_role=group)
|
|
873 |
agenda = Agenda(label='Test agenda', edit_role=group, view_role=group) |
|
877 | 874 |
agenda.save() |
878 | 875 | |
879 | 876 |
Group.objects.all().delete() |
... | ... | |
910 | 907 | |
911 | 908 | |
912 | 909 |
def test_virtual_agenda_init(): |
913 |
agenda1 = Agenda.objects.create(label=u'Agenda 1', kind='meetings')
|
|
914 |
agenda2 = Agenda.objects.create(label=u'Agenda 2', kind='meetings')
|
|
915 |
virt_agenda = Agenda.objects.create(label=u'Virtual agenda', kind='virtual')
|
|
910 |
agenda1 = Agenda.objects.create(label='Agenda 1', kind='meetings') |
|
911 |
agenda2 = Agenda.objects.create(label='Agenda 2', kind='meetings') |
|
912 |
virt_agenda = Agenda.objects.create(label='Virtual agenda', kind='virtual') |
|
916 | 913 |
VirtualMember.objects.create(virtual_agenda=virt_agenda, real_agenda=agenda1) |
917 | 914 |
VirtualMember.objects.create(virtual_agenda=virt_agenda, real_agenda=agenda2) |
918 | 915 |
virt_agenda.save() |
... | ... | |
927 | 924 | |
928 | 925 | |
929 | 926 |
def test_virtual_agenda_base_meeting_duration(): |
930 |
virt_agenda = Agenda.objects.create(label=u'Virtual agenda', kind='virtual')
|
|
927 |
virt_agenda = Agenda.objects.create(label='Virtual agenda', kind='virtual') |
|
931 | 928 | |
932 | 929 |
with pytest.raises(ValueError): |
933 | 930 |
virt_agenda.get_base_meeting_duration() |
... | ... | |
1300 | 1297 | |
1301 | 1298 | |
1302 | 1299 |
def test_agenda_meetings_duplicate(): |
1303 |
group = Group(name=u'Group')
|
|
1300 |
group = Group(name='Group') |
|
1304 | 1301 |
group.save() |
1305 | 1302 |
agenda = Agenda.objects.create(label='Agenda', kind='meetings', view_role=group) |
1306 | 1303 |
desk = Desk.objects.create(label='Desk', agenda=agenda) |
... | ... | |
1320 | 1317 |
start_datetime=now() + datetime.timedelta(days=1), |
1321 | 1318 |
end_datetime=now() + datetime.timedelta(days=2), |
1322 | 1319 |
) |
1323 |
resource = Resource.objects.create(label=u'Foo bar')
|
|
1320 |
resource = Resource.objects.create(label='Foo bar') |
|
1324 | 1321 |
agenda.resources.add(resource) |
1325 | 1322 | |
1326 | 1323 |
new_agenda = agenda.duplicate() |
... | ... | |
1420 | 1417 | |
1421 | 1418 | |
1422 | 1419 |
def test_agenda_virtual_duplicate(): |
1423 |
agenda1 = Agenda.objects.create(label=u'Agenda 1', kind='meetings')
|
|
1424 |
agenda2 = Agenda.objects.create(label=u'Agenda 2', kind='meetings')
|
|
1425 |
virt_agenda = Agenda.objects.create(label=u'Virtual agenda', kind='virtual')
|
|
1420 |
agenda1 = Agenda.objects.create(label='Agenda 1', kind='meetings') |
|
1421 |
agenda2 = Agenda.objects.create(label='Agenda 2', kind='meetings') |
|
1422 |
virt_agenda = Agenda.objects.create(label='Virtual agenda', kind='virtual') |
|
1426 | 1423 |
VirtualMember.objects.create(virtual_agenda=virt_agenda, real_agenda=agenda1) |
1427 | 1424 |
VirtualMember.objects.create(virtual_agenda=virt_agenda, real_agenda=agenda2) |
1428 | 1425 |
virt_agenda.save() |
tests/test_ensure_jsonbfields.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 | 1 |
import pytest |
4 | 2 |
from django.core.management import call_command |
5 | 3 |
from django.db import connection |
tests/test_import_export.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 |
from __future__ import unicode_literals |
|
4 | ||
5 | 1 |
import copy |
6 | 2 |
import datetime |
7 | 3 |
import json |
... | ... | |
10 | 6 |
import sys |
11 | 7 |
import tempfile |
12 | 8 |
from io import StringIO |
9 |
from unittest import mock |
|
13 | 10 | |
14 |
import mock |
|
15 | 11 |
import pytest |
16 | 12 |
from django.contrib.auth.models import Group |
17 | 13 |
from django.core.management import CommandError, call_command |
... | ... | |
71 | 67 |
empty_output = get_output_of_command('export_site') |
72 | 68 |
assert len(json.loads(empty_output)['agendas']) == 0 |
73 | 69 | |
74 |
Agenda(label=u'test').save()
|
|
70 |
Agenda(label='test').save() |
|
75 | 71 |
old_stdin = sys.stdin |
76 | 72 |
sys.stdin = StringIO(json.dumps({})) |
77 | 73 |
assert Agenda.objects.count() == 1 |
... | ... | |
313 | 309 | |
314 | 310 |
def test_import_export_permissions(app): |
315 | 311 |
meetings_agenda = Agenda.objects.create(label='Foo Bar', kind='meetings') |
316 |
group1 = Group.objects.create(name=u'gé1')
|
|
317 |
group2 = Group.objects.create(name=u'gé2')
|
|
312 |
group1 = Group.objects.create(name='gé1') |
|
313 |
group2 = Group.objects.create(name='gé2') |
|
318 | 314 |
meetings_agenda.view_role = group1 |
319 | 315 |
meetings_agenda.edit_role = group2 |
320 | 316 |
meetings_agenda.save() |
... | ... | |
328 | 324 |
import_site(json.loads(output), overwrite=True) |
329 | 325 |
assert 'gé1' in str(excinfo.value) and 'gé2' in str(excinfo.value) |
330 | 326 | |
331 |
group1 = Group(name=u'gé1')
|
|
327 |
group1 = Group(name='gé1') |
|
332 | 328 |
group1.save() |
333 | 329 |
with pytest.raises(AgendaImportError) as excinfo: |
334 | 330 |
import_site(json.loads(output), overwrite=True) |
335 |
assert u'%s' % excinfo.value == u'Missing roles: "gé2"'
|
|
331 |
assert '%s' % excinfo.value == 'Missing roles: "gé2"'
|
|
336 | 332 | |
337 | 333 |
with tempfile.NamedTemporaryFile() as f: |
338 | 334 |
f.write(force_bytes(output)) |
339 | 335 |
f.flush() |
340 | 336 |
with pytest.raises(CommandError) as excinfo: |
341 | 337 |
call_command('import_site', f.name) |
342 |
assert u'%s' % excinfo.value == u'Missing roles: "gé2"'
|
|
338 |
assert '%s' % excinfo.value == 'Missing roles: "gé2"'
|
|
343 | 339 | |
344 |
group2 = Group(name=u'gé2')
|
|
340 |
group2 = Group(name='gé2') |
|
345 | 341 |
group2.save() |
346 | 342 |
import_site(json.loads(output), overwrite=True) |
347 | 343 | |
... | ... | |
817 | 813 |
payload = json.loads(output) |
818 | 814 |
assert len(payload['unavailability_calendars']) == 0 |
819 | 815 | |
820 |
group1 = Group.objects.create(name=u'gé1')
|
|
821 |
group2 = Group.objects.create(name=u'gé2')
|
|
816 |
group1 = Group.objects.create(name='gé1') |
|
817 |
group2 = Group.objects.create(name='gé2') |
|
822 | 818 |
calendar = UnavailabilityCalendar.objects.create(label='Calendar', view_role=group1, edit_role=group2) |
823 | 819 |
tp1_start = make_aware(datetime.datetime(2017, 5, 22, 8, 0)) |
824 | 820 |
tp1_end = make_aware(datetime.datetime(2017, 5, 22, 12, 30)) |
tests/test_requests.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
1 |
from unittest import mock |
|
3 | 2 |
from urllib import parse |
4 | 3 | |
5 |
import mock |
|
6 | 4 |
import pytest |
7 | 5 |
from django.contrib.auth.models import AnonymousUser |
8 | 6 | |
... | ... | |
146 | 144 |
requests.get('http://cache.example.org/other', raise_if_not_cached=True) |
147 | 145 | |
148 | 146 |
# check with unicode url |
149 |
assert requests.get(u'http://cache.example.org/éléphant').content == b'hello second world' |
|
147 |
assert requests.get('http://cache.example.org/éléphant').content == b'hello second world' |
tests/test_time_periods.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 | 1 |
import datetime |
4 | 2 | |
5 | 3 |
import pytest |
... | ... | |
14 | 12 | |
15 | 13 | |
16 | 14 |
def test_timeperiod_time_slots(): |
17 |
agenda = Agenda(label=u'Foo bar', slug='bar')
|
|
15 |
agenda = Agenda(label='Foo bar', slug='bar') |
|
18 | 16 |
agenda.save() |
19 | 17 |
desk = Desk.objects.create(label='Desk 1', agenda=agenda) |
20 | 18 |
meeting_type = MeetingType(duration=60, agenda=agenda) |
... | ... | |
126 | 124 |
end_datetime=make_aware(datetime.datetime(2018, 1, 19)), |
127 | 125 |
) |
128 | 126 |
) |
129 |
== u'18 jan. 2018'
|
|
127 |
== '18 jan. 2018' |
|
130 | 128 |
) |
131 | 129 | |
132 | 130 |
# multiple full days |
... | ... | |
137 | 135 |
end_datetime=make_aware(datetime.datetime(2018, 1, 20)), |
138 | 136 |
) |
139 | 137 |
) |
140 |
== u'18 jan. 2018 → 20 jan. 2018'
|
|
138 |
== '18 jan. 2018 → 20 jan. 2018' |
|
141 | 139 |
) |
142 | 140 | |
143 | 141 |
# a few hours in a day |
... | ... | |
148 | 146 |
end_datetime=make_aware(datetime.datetime(2018, 1, 18, 12, 0)), |
149 | 147 |
) |
150 | 148 |
) |
151 |
== u'18 jan. 2018 10:00 → 12:00'
|
|
149 |
== '18 jan. 2018 10:00 → 12:00' |
|
152 | 150 |
) |
153 | 151 | |
154 | 152 |
# multiple days and different times |
... | ... | |
159 | 157 |
end_datetime=make_aware(datetime.datetime(2018, 1, 20, 12, 0)), |
160 | 158 |
) |
161 | 159 |
) |
162 |
== u'18 jan. 2018 10:00 → 20 jan. 2018 12:00'
|
|
160 |
== '18 jan. 2018 10:00 → 20 jan. 2018 12:00' |
|
163 | 161 |
) |
164 | 162 | |
165 | 163 | |
... | ... | |
169 | 167 |
Q(desk=desk) | Q(unavailability_calendar__desks=desk) |
170 | 168 |
) |
171 | 169 | |
172 |
agenda = Agenda(label=u'Foo bar', slug='bar')
|
|
170 |
agenda = Agenda(label='Foo bar', slug='bar') |
|
173 | 171 |
agenda.save() |
174 | 172 |
desk = Desk.objects.create(label='Desk 1', agenda=agenda) |
175 | 173 | |
... | ... | |
237 | 235 | |
238 | 236 |
def test_timeperiod_midnight_overlap_time_slots(): |
239 | 237 |
# https://dev.entrouvert.org/issues/29142 |
240 |
agenda = Agenda(label=u'Foo bar', slug='bar')
|
|
238 |
agenda = Agenda(label='Foo bar', slug='bar') |
|
241 | 239 |
agenda.save() |
242 | 240 |
desk = Desk.objects.create(label='Desk 1', agenda=agenda) |
243 | 241 |
meeting_type = MeetingType(duration=120, agenda=agenda) |
244 |
- |