def test_twice_same_bdg_one_guess(self):
data = {
"file_number": "ADS-TEST-GUESS-NEW-BDG",
"decided_at": "2023-07-19",
"buildings_operations": [
{
"operation": "build",
"building": {
"rnb_id": "guess",
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[5.727481544742659, 45.18703215564693],
[5.726913971918663, 45.18682335805852],
[5.727180892471154, 45.186454342625154],
[5.727817395327776, 45.18666934350475],
[5.727836461081949, 45.18671068973464],
[5.727481544742659, 45.18703215564693],
]
]
],
},
},
},
{
"operation": "build",
"building": {
"rnb_id": "GUESSGUESSG2",
},
},
],
}
r = self.client.post(
"/api/alpha/ads/", data=json.dumps(data), content_type="application/json"
)
data = r.json()
self.assertEqual(r.status_code, 400)
self.assertEqual(
data["buildings_operations"],
["A building can only be present once in an ADS."],
)
Le bâtiment qui doit être guessed, celui défini par le MultiPolygon est le même que le second bâtiment (rnb_id GUESSGUESSG2). Du fait de la structure du serializer (la validation a lieu avant les appels en base de BuildingSearch), ce doublon n'est pas detecté. C'est la base de donnée qui renvoie une erreur:
Le résultat attendu est que la requête ne produise aucun enregistrement en base et que la réponse ait un code 400 et un message "A building can only be present once in an ADS."
Exemple de test qui déclenche une erreur en base:
Le bâtiment qui doit être guessed, celui défini par le MultiPolygon est le même que le second bâtiment (rnb_id GUESSGUESSG2). Du fait de la structure du serializer (la validation a lieu avant les appels en base de BuildingSearch), ce doublon n'est pas detecté. C'est la base de donnée qui renvoie une erreur:
django.db.utils.IntegrityError: duplicate key value violates unique constraint "batid_buildingads_building_id_ads_id_af3f8461_uniq" DETAIL: Key (building_id, ads_id)=(5, 9) already exists.
Le résultat attendu est que la requête ne produise aucun enregistrement en base et que la réponse ait un code 400 et un message "A building can only be present once in an ADS."