From 0915e4dd93532537146543e5ecc9c72ad4ad1528 Mon Sep 17 00:00:00 2001
From: Yoann Schneider <yschneider@teklia.com>
Date: Mon, 2 Oct 2023 18:44:47 +0200
Subject: [PATCH] Confidence may be null

---
 arkindex_worker/worker/element.py           |  5 ++--
 tests/test_elements_worker/test_elements.py | 31 ++++++++++++---------
 2 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/arkindex_worker/worker/element.py b/arkindex_worker/worker/element.py
index fb42902f..64c69ea8 100644
--- a/arkindex_worker/worker/element.py
+++ b/arkindex_worker/worker/element.py
@@ -316,8 +316,9 @@ class ElementMixin(object):
                 isinstance(coord, (int, float)) for point in polygon for coord in point
             ), "polygon points should be lists of two numbers"
 
-        if (confidence := kwargs.get("confidence")) is not None:
-            assert (
+        if "confidence" in kwargs:
+            confidence = kwargs["confidence"]
+            assert confidence is None or (
                 isinstance(confidence, float) and 0 <= confidence <= 1
             ), "confidence should be None or a float in [0..1] range"
 
diff --git a/tests/test_elements_worker/test_elements.py b/tests/test_elements_worker/test_elements.py
index 28aa6454..ec61d238 100644
--- a/tests/test_elements_worker/test_elements.py
+++ b/tests/test_elements_worker/test_elements.py
@@ -1222,9 +1222,11 @@ def test_create_elements_integrity_error(
             {"element": "not element type"},
             "element shouldn't be null and should be an Element or CachedElement",
         ),
-
-    ))
-def test_partial_update_element_wrong_param_element(mock_elements_worker, payload, error):
+    ),
+)
+def test_partial_update_element_wrong_param_element(
+    mock_elements_worker, payload, error
+):
     api_payload = {
         "element": Element({"zone": None}),
         **payload,
@@ -1256,12 +1258,13 @@ def test_partial_update_element_wrong_param_type(mock_elements_worker, payload,
         )
     assert str(e.value) == error
 
+
 @pytest.mark.parametrize(
     "payload, error",
     (
         # Name
         ({"name": 1234}, "name should be a str"),
-    )
+    ),
 )
 def test_partial_update_element_wrong_param_name(mock_elements_worker, payload, error):
     api_payload = {
@@ -1294,9 +1297,11 @@ def test_partial_update_element_wrong_param_name(mock_elements_worker, payload,
             {"polygon": [["not a coord", 1], [2, 2], [2, 1], [1, 2]]},
             "polygon points should be lists of two numbers",
         ),
-    )
+    ),
 )
-def test_partial_update_element_wrong_param_polygon(mock_elements_worker, payload, error):
+def test_partial_update_element_wrong_param_polygon(
+    mock_elements_worker, payload, error
+):
     api_payload = {
         "element": Element({"zone": None}),
         **payload,
@@ -1321,7 +1326,7 @@ def test_partial_update_element_wrong_param_polygon(mock_elements_worker, payloa
             {"confidence": float("inf")},
             "confidence should be None or a float in [0..1] range",
         ),
-    )
+    ),
 )
 def test_partial_update_element_wrong_param_conf(mock_elements_worker, payload, error):
     api_payload = {
@@ -1343,7 +1348,7 @@ def test_partial_update_element_wrong_param_conf(mock_elements_worker, payload,
         ({"rotation_angle": "lol"}, "rotation_angle should be a positive integer"),
         ({"rotation_angle": -1}, "rotation_angle should be a positive integer"),
         ({"rotation_angle": 0.5}, "rotation_angle should be a positive integer"),
-    )
+    ),
 )
 def test_partial_update_element_wrong_param_rota(mock_elements_worker, payload, error):
     api_payload = {
@@ -1364,7 +1369,7 @@ def test_partial_update_element_wrong_param_rota(mock_elements_worker, payload,
         # Mirrored
         ({"mirrored": "lol"}, "mirrored should be a boolean"),
         ({"mirrored": 1234}, "mirrored should be a boolean"),
-    )
+    ),
 )
 def test_partial_update_element_wrong_param_mir(mock_elements_worker, payload, error):
     api_payload = {
@@ -1379,7 +1384,6 @@ def test_partial_update_element_wrong_param_mir(mock_elements_worker, payload, e
     assert str(e.value) == error
 
 
-
 @pytest.mark.parametrize(
     "payload, error",
     (
@@ -1506,13 +1510,14 @@ def test_partial_update_element(
         assert getattr(cached_element, param) == elt_response[param]
 
 
+@pytest.mark.parametrize("confidence", (None, 0.42))
 def test_partial_update_element_confidence(
-    responses, mock_elements_worker_with_cache, mock_cached_elements
+    responses, mock_elements_worker_with_cache, mock_cached_elements, confidence
 ):
     elt = CachedElement.select().first()
     elt_response = {
         "polygon": [[10, 10], [20, 20], [20, 10], [10, 20]],
-        "confidence": 0.42,
+        "confidence": confidence,
     }
     responses.add(
         responses.PATCH,
@@ -1540,7 +1545,7 @@ def test_partial_update_element_confidence(
 
     cached_element = CachedElement.get(CachedElement.id == elt.id)
     assert cached_element.polygon == str(elt_response["polygon"])
-    assert cached_element.confidence == elt_response["confidence"]
+    assert cached_element.confidence == confidence
 
 
 def test_list_element_children_wrong_element(mock_elements_worker):
-- 
GitLab