1 |
1 |
import datetime
|
|
2 |
import itertools
|
2 |
3 |
|
3 |
4 |
import pytest
|
4 |
5 |
from django.db import connection
|
... | ... | |
99 |
100 |
assert len(ctx.captured_queries) == 7
|
100 |
101 |
|
101 |
102 |
slots = resp.context['form'].get_slots()
|
102 |
|
assert slots['dates'] == [
|
103 |
|
[
|
104 |
|
datetime.date(2022, 2, 1),
|
105 |
|
datetime.date(2022, 2, 2),
|
106 |
|
datetime.date(2022, 2, 7),
|
107 |
|
datetime.date(2022, 2, 8),
|
108 |
|
datetime.date(2022, 2, 9),
|
109 |
|
datetime.date(2022, 2, 14),
|
110 |
|
datetime.date(2022, 2, 15),
|
111 |
|
datetime.date(2022, 2, 16),
|
112 |
|
datetime.date(2022, 2, 21),
|
113 |
|
datetime.date(2022, 2, 22),
|
114 |
|
datetime.date(2022, 2, 23),
|
115 |
|
datetime.date(2022, 2, 28),
|
116 |
|
]
|
|
103 |
assert len(slots['dates']) == 1
|
|
104 |
assert [d[0] for d in slots['dates'][0]] == [
|
|
105 |
datetime.date(2022, 2, 1),
|
|
106 |
datetime.date(2022, 2, 2),
|
|
107 |
datetime.date(2022, 2, 7),
|
|
108 |
datetime.date(2022, 2, 8),
|
|
109 |
datetime.date(2022, 2, 9),
|
|
110 |
datetime.date(2022, 2, 14),
|
|
111 |
datetime.date(2022, 2, 15),
|
|
112 |
datetime.date(2022, 2, 16),
|
|
113 |
datetime.date(2022, 2, 21),
|
|
114 |
datetime.date(2022, 2, 22),
|
|
115 |
datetime.date(2022, 2, 23),
|
|
116 |
datetime.date(2022, 2, 28),
|
117 |
117 |
]
|
118 |
118 |
assert slots['events'] == [
|
119 |
119 |
event2,
|
... | ... | |
131 |
131 |
'events': [
|
132 |
132 |
{
|
133 |
133 |
'event': event2,
|
134 |
|
'dates': {date: False for date in slots['dates'][0] if date == datetime.date(2022, 2, 1)},
|
|
134 |
'dates': {
|
|
135 |
date: False for date, events in slots['dates'][0] if date == datetime.date(2022, 2, 1)
|
|
136 |
},
|
135 |
137 |
},
|
136 |
138 |
{
|
137 |
139 |
'event': recurring_event1,
|
138 |
|
'dates': {date: False for date in slots['dates'][0] if date.weekday() in [0, 1]},
|
|
140 |
'dates': {date: False for date, events in slots['dates'][0] if date.weekday() in [0, 1]},
|
139 |
141 |
},
|
140 |
142 |
{
|
141 |
143 |
'event': recurring_event2,
|
142 |
|
'dates': {date: False for date in slots['dates'][0] if date.weekday() in [1, 2]},
|
|
144 |
'dates': {date: False for date, events in slots['dates'][0] if date.weekday() in [1, 2]},
|
143 |
145 |
},
|
144 |
146 |
{
|
145 |
147 |
'event': event3,
|
146 |
148 |
'dates': {
|
147 |
|
date: False for date in slots['dates'][0] if date == datetime.date(2022, 2, 15)
|
|
149 |
date: False
|
|
150 |
for date, events in slots['dates'][0]
|
|
151 |
if date == datetime.date(2022, 2, 15)
|
148 |
152 |
},
|
149 |
153 |
},
|
150 |
154 |
{
|
151 |
155 |
'event': event4,
|
152 |
156 |
'dates': {
|
153 |
|
date: False for date in slots['dates'][0] if date == datetime.date(2022, 2, 28)
|
|
157 |
date: False
|
|
158 |
for date, events in slots['dates'][0]
|
|
159 |
if date == datetime.date(2022, 2, 28)
|
154 |
160 |
},
|
155 |
161 |
},
|
156 |
162 |
],
|
... | ... | |
202 |
208 |
resp = resp.form.submit()
|
203 |
209 |
|
204 |
210 |
slots = resp.context['form'].get_slots()
|
205 |
|
assert slots['dates'] == [
|
206 |
|
[
|
207 |
|
datetime.date(2022, 2, 1),
|
208 |
|
datetime.date(2022, 2, 15),
|
209 |
|
datetime.date(2022, 2, 28),
|
210 |
|
]
|
|
211 |
assert len(slots['dates']) == 1
|
|
212 |
assert [d[0] for d in slots['dates'][0]] == [
|
|
213 |
datetime.date(2022, 2, 1),
|
|
214 |
datetime.date(2022, 2, 15),
|
|
215 |
datetime.date(2022, 2, 28),
|
211 |
216 |
]
|
212 |
217 |
|
213 |
218 |
assert slots['events'] == [
|
... | ... | |
507 |
512 |
},
|
508 |
513 |
]
|
509 |
514 |
|
|
515 |
# activity_display: row
|
|
516 |
assert len(resp.pyquery.find('th.activity')) == 1
|
|
517 |
assert resp.pyquery.find('th.activity')[0].text == 'Activity'
|
|
518 |
assert len(resp.pyquery.find('th.date')) == 1
|
|
519 |
assert len(resp.pyquery.find('th.date-event')) == 0
|
|
520 |
assert resp.pyquery.find('th.date[data-id="15-02"]')[0].text == 'Tue 15/02'
|
|
521 |
assert len(resp.pyquery.find('td.activity')) == 5
|
|
522 |
assert resp.pyquery.find('td.activity')[0].text == 'event 1'
|
|
523 |
assert resp.pyquery.find('td.activity')[1].text == 'event 2'
|
|
524 |
assert resp.pyquery.find('td.activity')[2].text == 'event 3'
|
|
525 |
assert resp.pyquery.find('td.activity')[3].text == 'recurring 1'
|
|
526 |
assert resp.pyquery.find('td.activity')[4].text == 'recurring 2'
|
|
527 |
assert len(resp.pyquery.find('td.date')) == 5
|
|
528 |
assert resp.pyquery.find('td.date[data-id="15-02:event-1:user:1"]')[0].text == '☐'
|
|
529 |
assert resp.pyquery.find('td.date[data-id="15-02:event-2:user:1"]')[0].text is None
|
|
530 |
assert resp.pyquery.find('td.date[data-id="15-02:event-3:user:1"]')[0].text is None
|
|
531 |
assert resp.pyquery.find('td.date[data-id="15-02:recurring-1:user:1"]')[0].text == '☐'
|
|
532 |
assert resp.pyquery.find('td.date[data-id="15-02:recurring-2:user:1"]')[0].text is None
|
|
533 |
|
|
534 |
# activity_display: col
|
|
535 |
resp.form['activity_display'] = 'col'
|
|
536 |
resp = resp.form.submit()
|
|
537 |
new_slots = resp.context['form'].get_slots()
|
|
538 |
assert new_slots == slots
|
|
539 |
assert len(resp.pyquery.find('th.activity')) == 0
|
|
540 |
assert len(resp.pyquery.find('th.date')) == 0
|
|
541 |
assert len(resp.pyquery.find('th.date-event')) == 5
|
|
542 |
assert resp.pyquery.find('th.date-event[data-id="15-02:event-1"]')[0].text == 'event 1 of 15/02'
|
|
543 |
assert resp.pyquery.find('th.date-event[data-id="15-02:event-2"]')[0].text == 'event 2 of 15/02'
|
|
544 |
assert resp.pyquery.find('th.date-event[data-id="15-02:event-3"]')[0].text == 'event 3 of 15/02'
|
|
545 |
assert resp.pyquery.find('th.date-event[data-id="15-02:recurring-1"]')[0].text == 'recurring 1 of 15/02'
|
|
546 |
assert resp.pyquery.find('th.date-event[data-id="15-02:recurring-2"]')[0].text == 'recurring 2 of 15/02'
|
|
547 |
assert len(resp.pyquery.find('td.date')) == 5
|
|
548 |
assert resp.pyquery.find('td.date[data-id="15-02:event-1:user:1"]')[0].text == '☐'
|
|
549 |
assert resp.pyquery.find('td.date[data-id="15-02:event-2:user:1"]')[0].text is None
|
|
550 |
assert resp.pyquery.find('td.date[data-id="15-02:event-3:user:1"]')[0].text is None
|
|
551 |
assert resp.pyquery.find('td.date[data-id="15-02:recurring-1:user:1"]')[0].text == '☐'
|
|
552 |
assert resp.pyquery.find('td.date[data-id="15-02:recurring-2:user:1"]')[0].text is None
|
|
553 |
|
510 |
554 |
|
511 |
555 |
def test_events_timesheet_extra_data(app, admin_user):
|
512 |
556 |
agenda = Agenda.objects.create(label='Events', kind='events')
|
... | ... | |
732 |
776 |
resp = resp.form.submit()
|
733 |
777 |
slots = resp.context['form'].get_slots()
|
734 |
778 |
|
735 |
|
assert slots['dates'] == [
|
736 |
|
[
|
737 |
|
datetime.date(2022, 1, 3),
|
738 |
|
datetime.date(2022, 1, 10),
|
739 |
|
datetime.date(2022, 1, 17),
|
740 |
|
datetime.date(2022, 1, 24),
|
741 |
|
datetime.date(2022, 1, 31),
|
742 |
|
datetime.date(2022, 2, 7),
|
743 |
|
datetime.date(2022, 2, 14),
|
744 |
|
datetime.date(2022, 2, 21),
|
745 |
|
datetime.date(2022, 2, 28),
|
746 |
|
datetime.date(2022, 3, 7),
|
747 |
|
datetime.date(2022, 3, 14),
|
748 |
|
datetime.date(2022, 3, 21),
|
749 |
|
datetime.date(2022, 3, 28),
|
750 |
|
]
|
|
779 |
assert len(slots['dates']) == 1
|
|
780 |
assert [d[0] for d in slots['dates'][0]] == [
|
|
781 |
datetime.date(2022, 1, 3),
|
|
782 |
datetime.date(2022, 1, 10),
|
|
783 |
datetime.date(2022, 1, 17),
|
|
784 |
datetime.date(2022, 1, 24),
|
|
785 |
datetime.date(2022, 1, 31),
|
|
786 |
datetime.date(2022, 2, 7),
|
|
787 |
datetime.date(2022, 2, 14),
|
|
788 |
datetime.date(2022, 2, 21),
|
|
789 |
datetime.date(2022, 2, 28),
|
|
790 |
datetime.date(2022, 3, 7),
|
|
791 |
datetime.date(2022, 3, 14),
|
|
792 |
datetime.date(2022, 3, 21),
|
|
793 |
datetime.date(2022, 3, 28),
|
751 |
794 |
]
|
752 |
795 |
|
753 |
796 |
resp.form['date_display'] = 'month'
|
754 |
797 |
resp = resp.form.submit()
|
755 |
798 |
slots = resp.context['form'].get_slots()
|
756 |
799 |
|
757 |
|
assert slots['dates'] == [
|
758 |
|
[
|
759 |
|
datetime.date(2022, 1, 3),
|
760 |
|
datetime.date(2022, 1, 10),
|
761 |
|
datetime.date(2022, 1, 17),
|
762 |
|
datetime.date(2022, 1, 24),
|
763 |
|
datetime.date(2022, 1, 31),
|
764 |
|
],
|
765 |
|
[
|
766 |
|
datetime.date(2022, 2, 7),
|
767 |
|
datetime.date(2022, 2, 14),
|
768 |
|
datetime.date(2022, 2, 21),
|
769 |
|
datetime.date(2022, 2, 28),
|
770 |
|
],
|
771 |
|
[
|
772 |
|
datetime.date(2022, 3, 7),
|
773 |
|
datetime.date(2022, 3, 14),
|
774 |
|
datetime.date(2022, 3, 21),
|
775 |
|
datetime.date(2022, 3, 28),
|
776 |
|
],
|
|
800 |
assert len(slots['dates']) == 3
|
|
801 |
assert [d[0] for d in slots['dates'][0]] == [
|
|
802 |
datetime.date(2022, 1, 3),
|
|
803 |
datetime.date(2022, 1, 10),
|
|
804 |
datetime.date(2022, 1, 17),
|
|
805 |
datetime.date(2022, 1, 24),
|
|
806 |
datetime.date(2022, 1, 31),
|
|
807 |
]
|
|
808 |
assert [d[0] for d in slots['dates'][1]] == [
|
|
809 |
datetime.date(2022, 2, 7),
|
|
810 |
datetime.date(2022, 2, 14),
|
|
811 |
datetime.date(2022, 2, 21),
|
|
812 |
datetime.date(2022, 2, 28),
|
|
813 |
]
|
|
814 |
assert [d[0] for d in slots['dates'][2]] == [
|
|
815 |
datetime.date(2022, 3, 7),
|
|
816 |
datetime.date(2022, 3, 14),
|
|
817 |
datetime.date(2022, 3, 21),
|
|
818 |
datetime.date(2022, 3, 28),
|
777 |
819 |
]
|
778 |
820 |
|
779 |
821 |
resp.form['date_display'] = 'week'
|
... | ... | |
781 |
823 |
slots = resp.context['form'].get_slots()
|
782 |
824 |
assert resp.text.count('<div class="page_break">') == 12
|
783 |
825 |
|
784 |
|
assert slots['dates'] == [
|
785 |
|
[datetime.date(2022, 1, 3)],
|
786 |
|
[datetime.date(2022, 1, 10)],
|
787 |
|
[datetime.date(2022, 1, 17)],
|
788 |
|
[datetime.date(2022, 1, 24)],
|
789 |
|
[datetime.date(2022, 1, 31)],
|
790 |
|
[datetime.date(2022, 2, 7)],
|
791 |
|
[datetime.date(2022, 2, 14)],
|
792 |
|
[datetime.date(2022, 2, 21)],
|
793 |
|
[datetime.date(2022, 2, 28)],
|
794 |
|
[datetime.date(2022, 3, 7)],
|
795 |
|
[datetime.date(2022, 3, 14)],
|
796 |
|
[datetime.date(2022, 3, 21)],
|
797 |
|
[datetime.date(2022, 3, 28)],
|
|
826 |
assert len(slots['dates']) == 13
|
|
827 |
assert [d[0] for d in itertools.chain(*slots['dates'])] == [
|
|
828 |
datetime.date(2022, 1, 3),
|
|
829 |
datetime.date(2022, 1, 10),
|
|
830 |
datetime.date(2022, 1, 17),
|
|
831 |
datetime.date(2022, 1, 24),
|
|
832 |
datetime.date(2022, 1, 31),
|
|
833 |
datetime.date(2022, 2, 7),
|
|
834 |
datetime.date(2022, 2, 14),
|
|
835 |
datetime.date(2022, 2, 21),
|
|
836 |
datetime.date(2022, 2, 28),
|
|
837 |
datetime.date(2022, 3, 7),
|
|
838 |
datetime.date(2022, 3, 14),
|
|
839 |
datetime.date(2022, 3, 21),
|
|
840 |
datetime.date(2022, 3, 28),
|
798 |
841 |
]
|
799 |
842 |
|
800 |
843 |
resp.form['date_display'] = 'custom'
|
... | ... | |
805 |
848 |
resp = resp.form.submit()
|
806 |
849 |
slots = resp.context['form'].get_slots()
|
807 |
850 |
|
808 |
|
assert slots['dates'] == [
|
809 |
|
[
|
810 |
|
datetime.date(2022, 1, 3),
|
811 |
|
datetime.date(2022, 1, 10),
|
812 |
|
datetime.date(2022, 1, 17),
|
813 |
|
datetime.date(2022, 1, 24),
|
814 |
|
datetime.date(2022, 1, 31),
|
815 |
|
datetime.date(2022, 2, 7),
|
816 |
|
datetime.date(2022, 2, 14),
|
817 |
|
datetime.date(2022, 2, 21),
|
818 |
|
datetime.date(2022, 2, 28),
|
819 |
|
datetime.date(2022, 3, 7),
|
820 |
|
],
|
821 |
|
[
|
822 |
|
datetime.date(2022, 3, 14),
|
823 |
|
datetime.date(2022, 3, 21),
|
824 |
|
datetime.date(2022, 3, 28),
|
825 |
|
],
|
|
851 |
assert len(slots['dates']) == 2
|
|
852 |
assert [d[0] for d in slots['dates'][0]] == [
|
|
853 |
datetime.date(2022, 1, 3),
|
|
854 |
datetime.date(2022, 1, 10),
|
|
855 |
datetime.date(2022, 1, 17),
|
|
856 |
datetime.date(2022, 1, 24),
|
|
857 |
datetime.date(2022, 1, 31),
|
|
858 |
datetime.date(2022, 2, 7),
|
|
859 |
datetime.date(2022, 2, 14),
|
|
860 |
datetime.date(2022, 2, 21),
|
|
861 |
datetime.date(2022, 2, 28),
|
|
862 |
datetime.date(2022, 3, 7),
|
|
863 |
]
|
|
864 |
assert [d[0] for d in slots['dates'][1]] == [
|
|
865 |
datetime.date(2022, 3, 14),
|
|
866 |
datetime.date(2022, 3, 21),
|
|
867 |
datetime.date(2022, 3, 28),
|
826 |
868 |
]
|
827 |
869 |
|
828 |
870 |
resp.form['custom_nb_dates_per_page'] = 3
|
829 |
871 |
resp = resp.form.submit()
|
830 |
872 |
slots = resp.context['form'].get_slots()
|
831 |
873 |
|
832 |
|
assert slots['dates'] == [
|
833 |
|
[
|
834 |
|
datetime.date(2022, 1, 3),
|
835 |
|
datetime.date(2022, 1, 10),
|
836 |
|
datetime.date(2022, 1, 17),
|
837 |
|
],
|
838 |
|
[
|
839 |
|
datetime.date(2022, 1, 24),
|
840 |
|
datetime.date(2022, 1, 31),
|
841 |
|
datetime.date(2022, 2, 7),
|
842 |
|
],
|
843 |
|
[
|
844 |
|
datetime.date(2022, 2, 14),
|
845 |
|
datetime.date(2022, 2, 21),
|
846 |
|
datetime.date(2022, 2, 28),
|
847 |
|
],
|
848 |
|
[
|
849 |
|
datetime.date(2022, 3, 7),
|
850 |
|
datetime.date(2022, 3, 14),
|
851 |
|
datetime.date(2022, 3, 21),
|
852 |
|
],
|
853 |
|
[
|
854 |
|
datetime.date(2022, 3, 28),
|
855 |
|
],
|
|
874 |
assert len(slots['dates']) == 5
|
|
875 |
assert [d[0] for d in slots['dates'][0]] == [
|
|
876 |
datetime.date(2022, 1, 3),
|
|
877 |
datetime.date(2022, 1, 10),
|
|
878 |
datetime.date(2022, 1, 17),
|
|
879 |
]
|
|
880 |
assert [d[0] for d in slots['dates'][1]] == [
|
|
881 |
datetime.date(2022, 1, 24),
|
|
882 |
datetime.date(2022, 1, 31),
|
|
883 |
datetime.date(2022, 2, 7),
|
|
884 |
]
|
|
885 |
assert [d[0] for d in slots['dates'][2]] == [
|
|
886 |
datetime.date(2022, 2, 14),
|
|
887 |
datetime.date(2022, 2, 21),
|
|
888 |
datetime.date(2022, 2, 28),
|
|
889 |
]
|
|
890 |
assert [d[0] for d in slots['dates'][3]] == [
|
|
891 |
datetime.date(2022, 3, 7),
|
|
892 |
datetime.date(2022, 3, 14),
|
|
893 |
datetime.date(2022, 3, 21),
|
|
894 |
]
|
|
895 |
assert [d[0] for d in slots['dates'][4]] == [
|
|
896 |
datetime.date(2022, 3, 28),
|
856 |
897 |
]
|
857 |
898 |
|
858 |
899 |
Subscription.objects.create(
|
... | ... | |
881 |
922 |
|
882 |
923 |
login(app)
|
883 |
924 |
resp = app.get(
|
884 |
|
'/manage/agendas/%s/events/timesheet?pdf=&date_start=2022-02-01&date_end=2022-02-28&sort=lastname,firstname&date_display=all&orientation=portrait'
|
885 |
|
% agenda.pk
|
|
925 |
'/manage/agendas/%s/events/timesheet?pdf=&date_start=2022-02-01&date_end=2022-02-28&sort=lastname,firstname'
|
|
926 |
'&date_display=all&activity_display=row&orientation=portrait' % agenda.pk
|
886 |
927 |
)
|
887 |
928 |
assert resp.headers['Content-Type'] == 'application/pdf'
|
888 |
929 |
assert (
|
... | ... | |
892 |
933 |
|
893 |
934 |
# form invalid
|
894 |
935 |
resp = app.get(
|
895 |
|
'/manage/agendas/%s/events/timesheet?pdf=&date_start=2022-02-01&date_end=2022-02-28&sort=lastname,firstname&date_display=all'
|
|
936 |
'/manage/agendas/%s/events/timesheet?pdf=&date_start=2022-02-01&date_end=2022-02-28&sort=lastname,firstname&date_display=all&activity_display=row'
|
896 |
937 |
% agenda.pk
|
897 |
938 |
)
|
898 |
939 |
assert resp.context['form'].errors['orientation'] == ['This field is required.']
|
... | ... | |
946 |
987 |
resp = app.get('/manage/agendas/%s/events/%s/timesheet' % (agenda.pk, event.pk))
|
947 |
988 |
assert 'date_start' not in resp.context['form'].fields
|
948 |
989 |
assert 'date_end' not in resp.context['form'].fields
|
|
990 |
assert 'date_display' not in resp.context['form'].fields
|
|
991 |
assert 'custom_nb_dates_per_page' not in resp.context['form'].fields
|
|
992 |
assert 'activity_display' not in resp.context['form'].fields
|
949 |
993 |
assert resp.context['form'].errors == {}
|
950 |
994 |
|
951 |
995 |
|
... | ... | |
970 |
1014 |
assert len(ctx.captured_queries) == 7
|
971 |
1015 |
|
972 |
1016 |
slots = resp.context['form'].get_slots()
|
973 |
|
assert slots['dates'] == [
|
974 |
|
[
|
975 |
|
datetime.date(2022, 2, 15),
|
976 |
|
]
|
|
1017 |
assert len(slots['dates']) == 1
|
|
1018 |
assert [d[0] for d in slots['dates'][0]] == [
|
|
1019 |
datetime.date(2022, 2, 15),
|
977 |
1020 |
]
|
978 |
1021 |
assert slots['events'] == [event]
|
979 |
1022 |
assert slots['users'][0]['users'] == [
|
... | ... | |
1027 |
1070 |
resp = resp.form.submit()
|
1028 |
1071 |
|
1029 |
1072 |
slots = resp.context['form'].get_slots()
|
1030 |
|
assert slots['dates'] == [
|
1031 |
|
[
|
1032 |
|
datetime.date(2022, 2, 15),
|
1033 |
|
]
|
|
1073 |
assert len(slots['dates']) == 1
|
|
1074 |
assert [d[0] for d in slots['dates'][0]] == [
|
|
1075 |
datetime.date(2022, 2, 15),
|
1034 |
1076 |
]
|
1035 |
1077 |
|
1036 |
1078 |
assert slots['events'] == [
|
1037 |
|
-
|