17 |
17 |
TimePeriodException,
|
18 |
18 |
VirtualMember,
|
19 |
19 |
)
|
20 |
20 |
|
21 |
21 |
pytestmark = pytest.mark.django_db
|
22 |
22 |
|
23 |
23 |
|
24 |
24 |
def test_agendas_api(app):
|
|
25 |
edit_group = Group.objects.create(name='Edit')
|
|
26 |
view_group = Group.objects.create(name='View')
|
25 |
27 |
category_a = Category.objects.create(label='Category A')
|
26 |
28 |
category_b = Category.objects.create(label='Category B')
|
27 |
29 |
group = AbsenceReasonGroup.objects.create(label='Foo')
|
28 |
30 |
reason = AbsenceReason.objects.create(group=group, label='Foo bar')
|
29 |
31 |
reason2 = AbsenceReason.objects.create(group=group, label='Foo bar baz')
|
30 |
|
event_agenda = Agenda.objects.create(label='Foo bar', category=category_a, absence_reasons_group=group)
|
|
32 |
event_agenda = Agenda.objects.create(
|
|
33 |
label='Foo bar', category=category_a, absence_reasons_group=group, edit_role=edit_group
|
|
34 |
)
|
31 |
35 |
Desk.objects.create(agenda=event_agenda, slug='_exceptions_holder')
|
32 |
36 |
event_agenda2 = Agenda.objects.create(label='Foo bar 2', category=category_a)
|
33 |
37 |
Desk.objects.create(agenda=event_agenda2, slug='_exceptions_holder')
|
34 |
38 |
event_agenda3 = Agenda.objects.create(label='Foo bar 3', absence_reasons_group=group)
|
35 |
39 |
Desk.objects.create(agenda=event_agenda3, slug='_exceptions_holder')
|
36 |
|
meetings_agenda1 = Agenda.objects.create(label='Foo bar Meeting', kind='meetings', category=category_b)
|
|
40 |
meetings_agenda1 = Agenda.objects.create(
|
|
41 |
label='Foo bar Meeting', kind='meetings', category=category_b, view_role=view_group
|
|
42 |
)
|
37 |
43 |
Agenda.objects.create(label='Foo bar Meeting 2', kind='meetings')
|
38 |
44 |
resource1 = Resource.objects.create(label='Resource 1', description='Foo bar Resource 1')
|
39 |
45 |
resource2 = Resource.objects.create(label='Resource 2', description='Foo bar Resource 2')
|
40 |
46 |
Resource.objects.create(label='Resource 3')
|
41 |
47 |
meetings_agenda1.resources.add(resource1, resource2)
|
42 |
48 |
Agenda.objects.create(
|
43 |
|
label='Virtual Agenda', kind='virtual', minimal_booking_delay=1, maximal_booking_delay=56
|
|
49 |
label='Virtual Agenda',
|
|
50 |
kind='virtual',
|
|
51 |
minimal_booking_delay=1,
|
|
52 |
maximal_booking_delay=56,
|
|
53 |
edit_role=edit_group,
|
|
54 |
view_role=view_group,
|
44 |
55 |
)
|
45 |
56 |
resp = app.get('/api/agenda/')
|
46 |
57 |
assert resp.json == {
|
|
58 |
'err': 0,
|
47 |
59 |
'data': [
|
48 |
60 |
{
|
49 |
61 |
'text': 'Foo bar',
|
50 |
62 |
'id': 'foo-bar',
|
51 |
63 |
'slug': 'foo-bar',
|
52 |
64 |
'kind': 'events',
|
53 |
65 |
'minimal_booking_delay': 1,
|
54 |
66 |
'maximal_booking_delay': 56,
|
|
67 |
'edit_role': 'Edit',
|
|
68 |
'view_role': None,
|
55 |
69 |
'absence_reasons': [
|
56 |
70 |
{'id': reason.slug, 'slug': reason.slug, 'text': reason.label, 'label': reason.label},
|
57 |
71 |
{'id': reason2.slug, 'slug': reason2.slug, 'text': reason2.label, 'label': reason2.label},
|
58 |
72 |
],
|
59 |
73 |
'api': {
|
60 |
74 |
'datetimes_url': 'http://testserver/api/agenda/foo-bar/datetimes/',
|
61 |
75 |
'fillslots_url': 'http://testserver/api/agenda/foo-bar/fillslots/',
|
62 |
76 |
},
|
63 |
77 |
},
|
64 |
78 |
{
|
65 |
79 |
'text': 'Foo bar 2',
|
66 |
80 |
'id': 'foo-bar-2',
|
67 |
81 |
'kind': 'events',
|
68 |
82 |
'slug': 'foo-bar-2',
|
69 |
83 |
'minimal_booking_delay': 1,
|
70 |
84 |
'maximal_booking_delay': 56,
|
|
85 |
'edit_role': None,
|
|
86 |
'view_role': None,
|
71 |
87 |
'api': {
|
72 |
88 |
'datetimes_url': 'http://testserver/api/agenda/foo-bar-2/datetimes/',
|
73 |
89 |
'fillslots_url': 'http://testserver/api/agenda/foo-bar-2/fillslots/',
|
74 |
90 |
},
|
75 |
91 |
},
|
76 |
92 |
{
|
77 |
93 |
'text': 'Foo bar 3',
|
78 |
94 |
'id': 'foo-bar-3',
|
79 |
95 |
'kind': 'events',
|
80 |
96 |
'slug': 'foo-bar-3',
|
81 |
97 |
'minimal_booking_delay': 1,
|
82 |
98 |
'maximal_booking_delay': 56,
|
|
99 |
'edit_role': None,
|
|
100 |
'view_role': None,
|
83 |
101 |
'absence_reasons': [
|
84 |
102 |
{'id': reason.slug, 'slug': reason.slug, 'text': reason.label, 'label': reason.label},
|
85 |
103 |
{'id': reason2.slug, 'slug': reason2.slug, 'text': reason2.label, 'label': reason2.label},
|
86 |
104 |
],
|
87 |
105 |
'api': {
|
88 |
106 |
'datetimes_url': 'http://testserver/api/agenda/foo-bar-3/datetimes/',
|
89 |
107 |
'fillslots_url': 'http://testserver/api/agenda/foo-bar-3/fillslots/',
|
90 |
108 |
},
|
91 |
109 |
},
|
92 |
110 |
{
|
93 |
111 |
'text': 'Foo bar Meeting',
|
94 |
112 |
'id': 'foo-bar-meeting',
|
95 |
113 |
'slug': 'foo-bar-meeting',
|
96 |
114 |
'minimal_booking_delay': 1,
|
97 |
115 |
'maximal_booking_delay': 56,
|
|
116 |
'edit_role': None,
|
|
117 |
'view_role': 'View',
|
98 |
118 |
'kind': 'meetings',
|
99 |
119 |
'resources': [
|
100 |
120 |
{'id': 'resource-1', 'text': 'Resource 1', 'description': 'Foo bar Resource 1'},
|
101 |
121 |
{'id': 'resource-2', 'text': 'Resource 2', 'description': 'Foo bar Resource 2'},
|
102 |
122 |
],
|
103 |
123 |
'api': {
|
104 |
124 |
'meetings_url': 'http://testserver/api/agenda/foo-bar-meeting/meetings/',
|
105 |
125 |
'desks_url': 'http://testserver/api/agenda/foo-bar-meeting/desks/',
|
... | ... | |
108 |
128 |
},
|
109 |
129 |
},
|
110 |
130 |
{
|
111 |
131 |
'text': 'Foo bar Meeting 2',
|
112 |
132 |
'id': 'foo-bar-meeting-2',
|
113 |
133 |
'slug': 'foo-bar-meeting-2',
|
114 |
134 |
'minimal_booking_delay': 1,
|
115 |
135 |
'maximal_booking_delay': 56,
|
|
136 |
'edit_role': None,
|
|
137 |
'view_role': None,
|
116 |
138 |
'kind': 'meetings',
|
117 |
139 |
'resources': [],
|
118 |
140 |
'api': {
|
119 |
141 |
'meetings_url': 'http://testserver/api/agenda/foo-bar-meeting-2/meetings/',
|
120 |
142 |
'desks_url': 'http://testserver/api/agenda/foo-bar-meeting-2/desks/',
|
121 |
143 |
'resources_url': 'http://testserver/api/agenda/foo-bar-meeting-2/resources/',
|
122 |
144 |
'fillslots_url': 'http://testserver/api/agenda/foo-bar-meeting-2/fillslots/',
|
123 |
145 |
},
|
124 |
146 |
},
|
125 |
147 |
{
|
126 |
148 |
'text': 'Virtual Agenda',
|
127 |
149 |
'id': 'virtual-agenda',
|
128 |
150 |
'slug': 'virtual-agenda',
|
129 |
151 |
'minimal_booking_delay': 1,
|
130 |
152 |
'maximal_booking_delay': 56,
|
|
153 |
'edit_role': 'Edit',
|
|
154 |
'view_role': 'View',
|
131 |
155 |
'kind': 'virtual',
|
132 |
156 |
'api': {
|
133 |
157 |
'meetings_url': 'http://testserver/api/agenda/virtual-agenda/meetings/',
|
134 |
158 |
'desks_url': 'http://testserver/api/agenda/virtual-agenda/desks/',
|
135 |
159 |
'fillslots_url': 'http://testserver/api/agenda/virtual-agenda/fillslots/',
|
136 |
160 |
},
|
137 |
161 |
},
|
138 |
|
]
|
|
162 |
],
|
139 |
163 |
}
|
140 |
164 |
|
141 |
165 |
resp = app.get('/api/agenda/', params={'q': 'foo'})
|
142 |
166 |
assert len(resp.json['data']) == 5
|
143 |
167 |
resp = app.get('/api/agenda/', params={'q': 'MEET'})
|
144 |
168 |
assert len(resp.json['data']) == 2
|
145 |
169 |
resp = app.get('/api/agenda/', params={'q': ''})
|
146 |
170 |
assert len(resp.json['data']) == 0
|
147 |
171 |
|
148 |
172 |
with CaptureQueriesContext(connection) as ctx:
|
149 |
173 |
resp = app.get('/api/agenda/')
|
150 |
|
assert len(ctx.captured_queries) == 4
|
|
174 |
assert len(ctx.captured_queries) == 8
|
151 |
175 |
with CaptureQueriesContext(connection) as ctx:
|
152 |
176 |
resp = app.get('/api/agenda/', params={'q': 'MEET'})
|
153 |
|
assert len(ctx.captured_queries) == 2
|
|
177 |
assert len(ctx.captured_queries) == 3
|
154 |
178 |
|
155 |
179 |
resp = app.get('/api/agenda/', params={'with_open_events': '1'})
|
156 |
180 |
assert len(resp.json['data']) == 0
|
157 |
181 |
|
158 |
182 |
resp = app.get('/api/agenda/', params={'category': ''})
|
159 |
183 |
assert len(resp.json['data']) == 6
|
160 |
184 |
resp = app.get('/api/agenda/', params={'category': '__none__'})
|
161 |
185 |
assert len(resp.json['data']) == 3
|
... | ... | |
252 |
276 |
TimePeriodException.objects.create(
|
253 |
277 |
desk=event_agenda.desk_set.get(),
|
254 |
278 |
start_datetime=now(),
|
255 |
279 |
end_datetime=now() + datetime.timedelta(hours=1),
|
256 |
280 |
)
|
257 |
281 |
|
258 |
282 |
with CaptureQueriesContext(connection) as ctx:
|
259 |
283 |
resp = app.get('/api/agenda/', params={'with_open_events': '1'})
|
260 |
|
assert len(ctx.captured_queries) == 8
|
|
284 |
assert len(ctx.captured_queries) == 9
|
261 |
285 |
|
262 |
286 |
|
263 |
287 |
def test_agendas_meetingtypes_api(app, some_data, meetings_agenda):
|
264 |
288 |
resp = app.get('/api/agenda/%s/meetings/' % meetings_agenda.slug)
|
265 |
289 |
expected_resp = {
|
266 |
290 |
'data': [
|
267 |
291 |
{
|
268 |
292 |
'text': 'Blah',
|
... | ... | |
470 |
494 |
resp = app.get('/api/agenda/%s/' % virtual_meetings_agenda.slug)
|
471 |
495 |
assert resp.json == {
|
472 |
496 |
'data': {
|
473 |
497 |
'text': 'Virtual Agenda',
|
474 |
498 |
'id': 'virtual-agenda',
|
475 |
499 |
'slug': 'virtual-agenda',
|
476 |
500 |
'minimal_booking_delay': None,
|
477 |
501 |
'maximal_booking_delay': None,
|
|
502 |
'edit_role': None,
|
|
503 |
'view_role': None,
|
478 |
504 |
'kind': 'virtual',
|
479 |
505 |
'api': {
|
480 |
506 |
'meetings_url': 'http://testserver/api/agenda/%s/meetings/' % virtual_meetings_agenda.slug,
|
481 |
507 |
'desks_url': 'http://testserver/api/agenda/%s/desks/' % virtual_meetings_agenda.slug,
|
482 |
508 |
'fillslots_url': 'http://testserver/api/agenda/%s/fillslots/' % virtual_meetings_agenda.slug,
|
483 |
509 |
},
|
484 |
510 |
},
|
485 |
511 |
}
|
486 |
|
-
|