1 |
1 |
# -*- coding: utf-8 -*-
|
2 |
2 |
|
3 |
3 |
import logging
|
|
4 |
from uuid import UUID
|
4 |
5 |
|
5 |
6 |
import pytest
|
6 |
7 |
from django.db import connection
|
... | ... | |
26 |
27 |
u'@type': 'role',
|
27 |
28 |
u'data': [
|
28 |
29 |
{
|
29 |
|
u'uuid': u'12345',
|
|
30 |
u'uuid': u'7b347080-0d38-4ffa-8407-63734610fc45',
|
30 |
31 |
u'name': u'Service petite enfance',
|
31 |
32 |
u'slug': u'service-petite-enfance',
|
32 |
33 |
u'description': u'Role du service petite enfance %s' % tenant.domain_url,
|
... | ... | |
48 |
49 |
u'@type': 'role',
|
49 |
50 |
u'data': [
|
50 |
51 |
{
|
51 |
|
u'uuid': u'12345',
|
|
52 |
u'uuid': u'7b347080-0d38-4ffa-8407-63734610fc45',
|
52 |
53 |
u'name': u'Service petite enfance',
|
53 |
54 |
u'slug': u'service-petite-enfance',
|
54 |
55 |
u'description': u'Role du service petite enfance %s' % tenant.domain_url,
|
... | ... | |
63 |
64 |
assert Group.objects.count() == 1
|
64 |
65 |
assert Role.objects.count() == 1
|
65 |
66 |
role = Role.objects.get()
|
66 |
|
assert role.uuid == u'12345'
|
|
67 |
assert role.uuid == UUID('7b347080-0d38-4ffa-8407-63734610fc45')
|
67 |
68 |
assert role.name == u'Service petite enfance'
|
68 |
69 |
assert role.description == u'Role du service petite enfance %s' % tenant.domain_url
|
69 |
70 |
assert role.details == u'Some details'
|
... | ... | |
81 |
82 |
u'@type': 'role',
|
82 |
83 |
u'data': [
|
83 |
84 |
{
|
84 |
|
u'uuid': u'xyz',
|
|
85 |
u'uuid': u'10d8ecbd-116a-464f-96c5-f8507daa5c2c',
|
85 |
86 |
u'name': u'Service état civil',
|
86 |
87 |
u'slug': u'service-etat-civil',
|
87 |
88 |
u'description': u'Role du service état civil %s' % tenant.domain_url,
|
... | ... | |
93 |
94 |
assert Group.objects.count() == 1
|
94 |
95 |
assert Role.objects.count() == 1
|
95 |
96 |
role = Role.objects.get()
|
96 |
|
assert role.uuid == u'xyz'
|
|
97 |
assert role.uuid == UUID('10d8ecbd-116a-464f-96c5-f8507daa5c2c')
|
97 |
98 |
assert role.name == u'Service état civil'
|
98 |
99 |
assert role.description == u'Role du service état civil %s' % tenant.domain_url
|
99 |
100 |
|
... | ... | |
107 |
108 |
u'@type': 'role',
|
108 |
109 |
u'data': [
|
109 |
110 |
{
|
110 |
|
u'uuid': u'xyz',
|
|
111 |
u'uuid': u'10d8ecbd-116a-464f-96c5-f8507daa5c2c',
|
111 |
112 |
u'name': u'Service état civil',
|
112 |
113 |
u'slug': u'service-etat-civil',
|
113 |
114 |
u'description': u'Role du service état civil %s' % tenant.domain_url,
|
... | ... | |
129 |
130 |
u'@type': 'role',
|
130 |
131 |
u'data': [
|
131 |
132 |
{
|
132 |
|
u'uuid': u'12345',
|
|
133 |
u'uuid': u'7b347080-0d38-4ffa-8407-63734610fc45',
|
133 |
134 |
u'name': u'Service petite enfance',
|
134 |
135 |
u'slug': u'service-petite-enfance',
|
135 |
136 |
u'description': u'Role du service petite enfance %s' % tenant.domain_url,
|
... | ... | |
148 |
149 |
u'@type': 'role',
|
149 |
150 |
u'data': [
|
150 |
151 |
{
|
151 |
|
u'uuid': u'12345',
|
|
152 |
u'uuid': u'7b347080-0d38-4ffa-8407-63734610fc45',
|
152 |
153 |
u'name': u'Service petite enfance2',
|
153 |
154 |
u'slug': u'service-petite-enfance2',
|
154 |
155 |
u'description': u'Role du service petite enfance %s' % tenant.domain_url,
|
... | ... | |
168 |
169 |
u'@type': 'role',
|
169 |
170 |
u'data': [
|
170 |
171 |
{
|
171 |
|
u'uuid': u'xyz',
|
|
172 |
u'uuid': u'7b347080-0d38-4ffa-8407-63734610fc45',
|
172 |
173 |
u'name': u'Service petite enfance2',
|
173 |
174 |
u'slug': u'service-petite-enfance2',
|
174 |
175 |
u'description': u'Role du service petite enfance %s' % tenant.domain_url,
|
... | ... | |
181 |
182 |
assert Role.objects.count() == 1
|
182 |
183 |
assert Role.objects.get().uuid == notification['objects']['data'][0]['uuid']
|
183 |
184 |
# test error on collision
|
184 |
|
Role.objects.create(uuid='12345', name='Foo', description='foo')
|
|
185 |
Role.objects.create(uuid='1f5beb43-5297-468e-ae79-e32ead8495b4', name='Foo', description='foo')
|
185 |
186 |
assert Role.objects.count() == 2
|
186 |
187 |
notification = {
|
187 |
188 |
u'@type': u'provision',
|
... | ... | |
190 |
191 |
u'@type': 'role',
|
191 |
192 |
u'data': [
|
192 |
193 |
{
|
193 |
|
u'uuid': u'12345',
|
|
194 |
u'uuid': u'1f5beb43-5297-468e-ae79-e32ead8495b4',
|
194 |
195 |
u'name': u'Service petite enfance2',
|
195 |
196 |
u'slug': u'service-petite-enfance2',
|
196 |
197 |
u'description': u'Role du service petite enfance %s' % tenant.domain_url,
|
... | ... | |
201 |
202 |
Command.process_notification(tenant, notification)
|
202 |
203 |
assert Group.objects.count() == 2
|
203 |
204 |
assert Role.objects.count() == 2
|
204 |
|
assert Role.objects.filter(uuid='12345', name=u'Service petite enfance').count() == 0
|
|
205 |
assert (
|
|
206 |
Role.objects.filter(
|
|
207 |
uuid='7b347080-0d38-4ffa-8407-63734610fc45', name=u'Service petite enfance'
|
|
208 |
).count()
|
|
209 |
== 0
|
|
210 |
)
|
205 |
211 |
assert caplog.records[-1].levelno == logging.ERROR
|
206 |
212 |
assert caplog.records[-1].msg.startswith('cannot provision')
|
207 |
|
assert caplog.records[-1].args == (u'Service petite enfance2', u'12345')
|
|
213 |
assert caplog.records[-1].args == (
|
|
214 |
u'Service petite enfance2',
|
|
215 |
UUID('1f5beb43-5297-468e-ae79-e32ead8495b4'),
|
|
216 |
)
|
208 |
217 |
|
209 |
218 |
|
210 |
219 |
def test_hobo_notify_roles_db_queries(caplog, tenants):
|
... | ... | |
224 |
233 |
'@type': 'role',
|
225 |
234 |
'data': [
|
226 |
235 |
{
|
227 |
|
'uuid': '12345',
|
|
236 |
'uuid': '2e3c6110-34ec-4466-b8da-15ad84e3a141',
|
228 |
237 |
'name': 'Service petite enfance',
|
229 |
238 |
'slug': 'service-petite-enfance',
|
230 |
239 |
'description': 'Role du service petite enfance %s' % tenant.domain_url,
|
... | ... | |
233 |
242 |
'emails_to_members': False,
|
234 |
243 |
},
|
235 |
244 |
{
|
236 |
|
'uuid': '6789',
|
|
245 |
'uuid': '60ba0310-12e9-461d-bb7c-ffabf6654a40',
|
237 |
246 |
'name': 'Autre service',
|
238 |
247 |
'slug': 'autre service',
|
239 |
248 |
'description': "Role d'un autre service petite enfance %s" % tenant.domain_url,
|
... | ... | |
258 |
267 |
'@type': 'role',
|
259 |
268 |
'data': [
|
260 |
269 |
{
|
261 |
|
'uuid': '12sed45',
|
|
270 |
'uuid': 'dbb108f3-7349-4345-9b59-3d372c035cc9',
|
262 |
271 |
'name': 'Le dernier service',
|
263 |
272 |
'slug': 'le-dernier-service',
|
264 |
273 |
'description': '',
|
... | ... | |
282 |
291 |
'@type': 'role',
|
283 |
292 |
'data': [
|
284 |
293 |
{
|
285 |
|
'uuid': '12345',
|
|
294 |
'uuid': '2e3c6110-34ec-4466-b8da-15ad84e3a141',
|
286 |
295 |
'name': 'Service petite enfance',
|
287 |
296 |
'slug': 'service-petite-enfance',
|
288 |
297 |
'description': 'Role du service petite enfance %s' % tenant.domain_url,
|
... | ... | |
291 |
300 |
'emails_to_members': False,
|
292 |
301 |
},
|
293 |
302 |
{
|
294 |
|
'uuid': '6789',
|
|
303 |
'uuid': '60ba0310-12e9-461d-bb7c-ffabf6654a40',
|
295 |
304 |
'name': 'Autre service',
|
296 |
305 |
'slug': 'autre service',
|
297 |
306 |
'description': "Role d'un autre service petite enfance %s" % tenant.domain_url,
|
... | ... | |
313 |
322 |
'@type': 'role',
|
314 |
323 |
'data': [
|
315 |
324 |
{
|
316 |
|
'uuid': '12sed45',
|
|
325 |
'uuid': 'dbb108f3-7349-4345-9b59-3d372c035cc9',
|
317 |
326 |
'name': 'Le dernier service',
|
318 |
327 |
'slug': 'le-dernier-service',
|
319 |
328 |
'description': '',
|
320 |
329 |
},
|
321 |
330 |
{
|
322 |
|
'uuid': '12345',
|
|
331 |
'uuid': '2e3c6110-34ec-4466-b8da-15ad84e3a141',
|
323 |
332 |
'name': 'Service petite enfance',
|
324 |
333 |
'slug': 'service-petite-enfance',
|
325 |
334 |
'description': 'Role du service petite enfance %s' % tenant.domain_url,
|
... | ... | |
328 |
337 |
'emails_to_members': False,
|
329 |
338 |
},
|
330 |
339 |
{
|
331 |
|
'uuid': '6789',
|
|
340 |
'uuid': '60ba0310-12e9-461d-bb7c-ffabf6654a40',
|
332 |
341 |
'name': 'Autre service',
|
333 |
342 |
'slug': 'autre service',
|
334 |
343 |
'description': "Role d'un autre service petite enfance %s" % tenant.domain_url,
|
... | ... | |
364 |
373 |
u'@type': 'role',
|
365 |
374 |
u'data': [
|
366 |
375 |
{
|
367 |
|
u'uuid': u'12345',
|
|
376 |
u'uuid': u'beb23af6-d7c9-4ce1-b232-d859b0565296',
|
368 |
377 |
u'name': u'Service petite enfance',
|
369 |
378 |
u'slug': u'service-petite-enfance',
|
370 |
379 |
u'description': u'Role du service petite enfance %s' % tenant.domain_url,
|
... | ... | |
376 |
385 |
assert Group.objects.count() == 1
|
377 |
386 |
assert Role.objects.count() == 1
|
378 |
387 |
role = Role.objects.get()
|
379 |
|
assert role.uuid == u'12345'
|
|
388 |
assert role.uuid == UUID('beb23af6-d7c9-4ce1-b232-d859b0565296')
|
380 |
389 |
assert role.name == u'Service petite enfance'
|
381 |
390 |
assert role.description == u'Role du service petite enfance %s' % tenant.domain_url
|
382 |
391 |
|
... | ... | |
391 |
400 |
u'@type': 'user',
|
392 |
401 |
u'data': [
|
393 |
402 |
{
|
394 |
|
u'uuid': u'a' * 32,
|
|
403 |
u'uuid': 'beb23af6-d7c9-4ce1-b232-d859b0565296',
|
395 |
404 |
u'first_name': u'John',
|
396 |
405 |
u'last_name': u'Doe',
|
397 |
406 |
u'email': u'john.doe@example.net',
|
398 |
407 |
u'is_superuser': False,
|
399 |
408 |
u'roles': [
|
400 |
409 |
{
|
401 |
|
u'uuid': u'12345',
|
|
410 |
u'uuid': u'beb23af6-d7c9-4ce1-b232-d859b0565296',
|
402 |
411 |
u'name': u'Service petite enfance',
|
403 |
412 |
u'description': u'etc.',
|
404 |
413 |
},
|
405 |
414 |
{
|
406 |
|
u'uuid': u'xyz',
|
|
415 |
u'uuid': u'c0647609-c68d-42ac-88fc-efc371163320',
|
407 |
416 |
u'name': u'Service état civil',
|
408 |
417 |
u'description': u'etc.',
|
409 |
418 |
},
|
... | ... | |
417 |
426 |
assert Role.objects.count() == 1
|
418 |
427 |
assert Group.objects.count() == 1
|
419 |
428 |
user = User.objects.get()
|
420 |
|
assert user.username == 'a' * 32
|
|
429 |
assert user.username == 'beb23af6-d7c9-4ce1-b232-d859b0565296'
|
421 |
430 |
assert user.first_name == 'John'
|
422 |
431 |
assert user.last_name == 'Doe'
|
423 |
432 |
assert user.email == 'john.doe@example.net'
|
... | ... | |
426 |
435 |
assert user.saml_identifiers.count() == 1
|
427 |
436 |
usi = user.saml_identifiers.get()
|
428 |
437 |
assert usi.issuer.entity_id == 'http://idp.example.net/idp/saml/metadata'
|
429 |
|
assert usi.name_id == 'a' * 32
|
|
438 |
assert usi.name_id == 'beb23af6-d7c9-4ce1-b232-d859b0565296'
|
430 |
439 |
assert user.groups.count() == 1
|
431 |
440 |
group = user.groups.get()
|
432 |
441 |
assert group.name == 'Service petite enfance'
|
433 |
442 |
role = Role.objects.get(group_ptr=group.pk)
|
434 |
|
assert role.uuid == '12345'
|
|
443 |
assert role.uuid == UUID('beb23af6-d7c9-4ce1-b232-d859b0565296')
|
435 |
444 |
|
436 |
445 |
# test nothing change if run a second time
|
437 |
446 |
for tenant in tenants:
|
... | ... | |
444 |
453 |
u'@type': 'user',
|
445 |
454 |
u'data': [
|
446 |
455 |
{
|
447 |
|
u'uuid': u'a' * 32,
|
|
456 |
u'uuid': 'beb23af6-d7c9-4ce1-b232-d859b0565296',
|
448 |
457 |
u'first_name': u'John',
|
449 |
458 |
u'last_name': u'Doe',
|
450 |
459 |
u'email': u'john.doe@example.net',
|
451 |
460 |
u'is_superuser': True,
|
452 |
461 |
u'roles': [
|
453 |
462 |
{
|
454 |
|
u'uuid': u'12345',
|
|
463 |
u'uuid': u'beb23af6-d7c9-4ce1-b232-d859b0565296',
|
455 |
464 |
u'name': u'Service petite enfance',
|
456 |
465 |
u'description': u'etc.',
|
457 |
466 |
},
|
458 |
467 |
{
|
459 |
|
u'uuid': u'xyz',
|
|
468 |
u'uuid': u'c0647609-c68d-42ac-88fc-efc371163320',
|
460 |
469 |
u'name': u'Service état civil',
|
461 |
470 |
u'description': u'etc.',
|
462 |
471 |
},
|
... | ... | |
470 |
479 |
assert Role.objects.count() == 1
|
471 |
480 |
assert Group.objects.count() == 1
|
472 |
481 |
user = User.objects.get()
|
473 |
|
assert user.username == 'a' * 32
|
|
482 |
assert user.username == 'beb23af6-d7c9-4ce1-b232-d859b0565296'
|
474 |
483 |
assert user.first_name == 'John'
|
475 |
484 |
assert user.last_name == 'Doe'
|
476 |
485 |
assert user.email == 'john.doe@example.net'
|
... | ... | |
479 |
488 |
assert user.saml_identifiers.count() == 1
|
480 |
489 |
usi = user.saml_identifiers.get()
|
481 |
490 |
assert usi.issuer.entity_id == 'http://idp.example.net/idp/saml/metadata'
|
482 |
|
assert usi.name_id == 'a' * 32
|
|
491 |
assert usi.name_id == 'beb23af6-d7c9-4ce1-b232-d859b0565296'
|
483 |
492 |
assert user.groups.count() == 1
|
484 |
493 |
group = user.groups.get()
|
485 |
494 |
assert group.name == 'Service petite enfance'
|
486 |
495 |
role = Role.objects.get(group_ptr=group.pk)
|
487 |
|
assert role.uuid == '12345'
|
|
496 |
assert role.uuid == UUID('beb23af6-d7c9-4ce1-b232-d859b0565296')
|
488 |
497 |
|
489 |
498 |
# test deprovision works
|
490 |
499 |
for tenant in tenants:
|
... | ... | |
497 |
506 |
u'@type': 'user',
|
498 |
507 |
u'data': [
|
499 |
508 |
{
|
500 |
|
u'uuid': u'a' * 32,
|
|
509 |
u'uuid': 'beb23af6-d7c9-4ce1-b232-d859b0565296',
|
501 |
510 |
}
|
502 |
511 |
],
|
503 |
512 |
},
|
504 |
|
-
|