From 6dac0ed44bb1b85e211f50aacf8029849263fe96 Mon Sep 17 00:00:00 2001 From: Swen Kooij Date: Wed, 24 Feb 2021 11:18:55 +0200 Subject: [PATCH] Test that a conditional upsert doesn't return anything if no rows were affected --- tests/test_upsert.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/tests/test_upsert.py b/tests/test_upsert.py index b04e09ea..36573b9a 100644 --- a/tests/test_upsert.py +++ b/tests/test_upsert.py @@ -90,7 +90,8 @@ def test_upsert_with_update_condition(): obj1 = model.objects.create(name="joe", priority=1, active=False) - model.objects.upsert( + # should not return anything because no rows were affected + assert not model.objects.upsert( conflict_target=["name"], update_condition=CombinedExpression( model._meta.get_field("active").get_col(model._meta.db_table), @@ -101,10 +102,25 @@ def test_upsert_with_update_condition(): ) obj1.refresh_from_db() - assert obj1.priority == 1 assert not obj1.active + # should return something because one row was affected + obj1_pk = model.objects.upsert( + conflict_target=["name"], + update_condition=CombinedExpression( + model._meta.get_field("active").get_col(model._meta.db_table), + "=", + Value(False), + ), + fields=dict(name="joe", priority=2, active=True), + ) + + obj1.refresh_from_db() + assert obj1.pk == obj1_pk + assert obj1.priority == 2 + assert obj1.active + def test_upsert_and_get_applies_converters(): """Tests that converters are properly applied when using upsert_and_get."""