nanterre: ne pas bloquer la création d'un non-parent quand il y a déjà 2 parents (fixes #15780)

This commit is contained in:
Benjamin Dauvergne 2017-04-06 11:28:28 +02:00
parent 2d52c993b4
commit 4f0198c31f
2 changed files with 90 additions and 29 deletions

View File

@ -159,6 +159,37 @@ def test_create_individu(app, rsu_schema):
assert Relation.objects.filter(schema__slug='habite').count() == 2
second_id = response.json['data']['id']
# création d'un troisième adulte
response = app.post_json(create_url, params={
'prenoms': 'John',
'nom_de_naissance': 'Doe',
'nom_d_usage': '',
'date_de_naissance': '1981-05-05',
'genre': 'homme',
'email': 'john.doe@gmail.com',
'telephones': [
],
'adresse': {
'at': '',
'streetnumber': '12',
'streetnumberext': '',
'streetname': 'RUE DU PAPE',
'ext1': '',
'ext2': '',
'streetmatriculation': '00055',
'zipcode': '92000',
'inseecode': '92000',
'city': 'NANTERRE',
'country': 'FRANCE',
}
})
assert Entity.objects.count() == 6
assert Entity.objects.filter(schema__slug='individu').count() == 3
assert Entity.objects.filter(schema__slug='adresse').count() == 3
assert Relation.objects.count() == 3
assert Relation.objects.filter(schema__slug='habite').count() == 3
third_id = response.json['data']['id']
# rattachement du premier enfant au premier adulte
enfant_url = reverse('rsu-api-declaration-responsabilite-legale',
kwargs={'identifier': first_id})
@ -233,13 +264,42 @@ def test_create_individu(app, rsu_schema):
enfant_id_2 = response.json['data']['id']
assert Entity.objects.count() == 6
assert Entity.objects.filter(schema__slug='individu').count() == 4
assert Entity.objects.filter(schema__slug='adresse').count() == 2
assert Relation.objects.count() == 8
assert Relation.objects.filter(schema__slug='habite').count() == 5
assert Entity.objects.count() == 8
assert Entity.objects.filter(schema__slug='individu').count() == 5
assert Entity.objects.filter(schema__slug='adresse').count() == 3
assert Relation.objects.count() == 9
assert Relation.objects.filter(schema__slug='habite').count() == 6
assert Relation.objects.filter(schema__slug='responsabilite-legale').count() == 3
# rattachement du premier enfant à un troisième responsable légal
enfant_url = reverse('rsu-api-declaration-responsabilite-legale',
kwargs={'identifier': third_id})
# comme parent cela doit échouer
response = app.post_json(enfant_url, params={
'statut': 'parent',
'enfant_id': enfant_id,
}, status=400)
assert response.json['err'] == 1
# comme tiers de confiance cela marche
response = app.post_json(enfant_url, params={
'statut': 'tiers_de_confiance',
'enfant_id': enfant_id,
})
assert response.json['err'] == 0
assert 'id' in response.json['data']
# on détache l'efnant du tiers
suppression_responsabilite_url = reverse(
'rsu-api-suppression-lien-de-responsabilite',
kwargs={
'identifier': third_id,
'identifier_enfant': enfant_id
})
response = app.post_json(suppression_responsabilite_url)
assert response.json['err'] == 0
# déclaration d'union entre les deux adultes
union_url = reverse('rsu-api-declaration-union')
@ -252,11 +312,11 @@ def test_create_individu(app, rsu_schema):
assert response.json['err'] == 0
assert Entity.objects.count() == 5
assert Entity.objects.filter(schema__slug='individu').count() == 4
assert Entity.objects.filter(schema__slug='adresse').count() == 1
assert Relation.objects.count() == 8
assert Relation.objects.filter(schema__slug='habite').count() == 4
assert Entity.objects.count() == 7
assert Entity.objects.filter(schema__slug='individu').count() == 5
assert Entity.objects.filter(schema__slug='adresse').count() == 2
assert Relation.objects.count() == 9
assert Relation.objects.filter(schema__slug='habite').count() == 5
assert Relation.objects.filter(schema__slug='responsabilite-legale').count() == 3
assert Relation.objects.filter(schema__slug='union').count() == 1
@ -360,12 +420,12 @@ def test_create_individu(app, rsu_schema):
'adresse_principale_1': [enfant_id],
})
assert Entity.objects.count() == 6
assert Entity.objects.filter(schema__slug='individu').count() == 4
assert Entity.objects.filter(schema__slug='adresse').count() == 2
assert Relation.objects.count() == 8
assert Entity.objects.count() == 8
assert Entity.objects.filter(schema__slug='individu').count() == 5
assert Entity.objects.filter(schema__slug='adresse').count() == 3
assert Relation.objects.count() == 9
# tout le monde habite quelque part, un enfant a deux logements
assert Relation.objects.filter(schema__slug='habite').count() == 5
assert Relation.objects.filter(schema__slug='habite').count() == 6
# le premier adulte et le premier enfant partagent un logement
assert Relation.objects.filter(
left=first_id, right__right_relations__left=enfant_id).count() == 1
@ -394,10 +454,10 @@ def test_create_individu(app, rsu_schema):
assert response.json['err'] == 0
assert Entity.objects.filter(schema__slug='individu').count() == 4
assert Entity.objects.filter(schema__slug='adresse').count() == 2
assert Entity.objects.count() == 6
assert Relation.objects.filter(schema__slug='habite').count() == 3
assert Entity.objects.filter(schema__slug='individu').count() == 5
assert Entity.objects.filter(schema__slug='adresse').count() == 3
assert Entity.objects.count() == 8
assert Relation.objects.filter(schema__slug='habite').count() == 4
# le deuxième enfant n'a plus de logement
assert Relation.objects.filter(
left=enfant_id_2, schema__slug='habite').count() == 0
@ -417,4 +477,4 @@ def test_create_individu(app, rsu_schema):
right__right_relations__left=second_id).count() == 0
assert Relation.objects.filter(schema__slug='responsabilite-legale').count() == 1
assert Relation.objects.filter(schema__slug='union').count() == 0
assert Relation.objects.count() == 4
assert Relation.objects.count() == 5

View File

@ -398,13 +398,16 @@ class DeclarationResponsabiliteLegale(APIView):
'cles_de_federation': {},
})
# verify child has not already two parents
if enfant.right_relations.filter(schema__slug=utils.RESPONSABILITE_LEGALE_REL).count() > 1:
return Response({
'err': 1,
'errors': {
'enfant_id': ['this child has already two parents'],
}
}, status=400)
if v['statut'] == 'parent':
if enfant.right_relations.filter(
content__statut='parent',
schema__slug=utils.RESPONSABILITE_LEGALE_REL).count() > 1:
return Response({
'err': 1,
'errors': {
'enfant_id': ['this child has already two parents'],
}
}, status=400)
# verify child is not already linked to this parent
if enfant.right_relations.filter(schema__slug=utils.RESPONSABILITE_LEGALE_REL,
@ -918,8 +921,6 @@ class SuppressionLienDeResponsabiliteView(APIView):
}
}, status=400)
assert c == 2, 'only two links should exist'
Relation.objects.filter(left=individu, right=enfant,
schema__slug=utils.RESPONSABILITE_LEGALE_REL).delete()