Skip to content

Commit f24a0b3

Browse files
committed
192: Cover all edge cases of using values_list
1 parent 825011b commit f24a0b3

File tree

3 files changed

+24
-22
lines changed

3 files changed

+24
-22
lines changed

django_mock_queries/utils.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -305,11 +305,10 @@ def truncate(obj, kind):
305305

306306

307307
def hash_dict(obj, *fields):
308-
if not isinstance(obj, models.Model):
309-
return hash(obj)
310-
311308
field_names = fields or find_field_names(obj, concrete_only=True)[1]
312309
obj_values = {f: get_field_value(obj, f) for f in field_names}
310+
if not obj_values and not fields:
311+
obj_values = {"field": obj}
313312

314313
return hash(tuple(sorted((k, v) for k, v in obj_values.items() if not fields or k in fields)))
315314

tests/test_mocks.py

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -587,22 +587,3 @@ def test_model_mocker_does_not_interfere_with_non_mocked_models(self):
587587

588588
with self.assertRaises(NotSupportedError):
589589
CarVariation.objects.all().delete()
590-
591-
def test_distinct_for_flat_values(self):
592-
with ModelMocker(Manufacturer):
593-
toyota = Manufacturer.objects.create(name="Toyota")
594-
ford = Manufacturer.objects.create(name="Ford")
595-
distinct_names = Manufacturer.objects.values_list("name", flat=True).distinct()
596-
assert list(distinct_names) == [toyota.name, ford.name]
597-
598-
def test_distinct_for_objects(self):
599-
with ModelMocker(Manufacturer):
600-
toyota = Manufacturer.objects.create(name="Toyota")
601-
ford = Manufacturer.objects.create(name="Ford")
602-
ford_2 = Manufacturer.objects.create(name="Ford")
603-
distinct_objects = Manufacturer.objects.distinct()
604-
assert list(distinct_objects) == [toyota, ford, ford_2]
605-
distinct_objects = Manufacturer.objects.distinct("name")
606-
assert list(distinct_objects) == [toyota, ford]
607-
distinct_objects = Manufacturer.objects.distinct("id")
608-
assert list(distinct_objects) == [toyota, ford, ford_2]

tests/test_query.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -626,6 +626,28 @@ def test_query_distinct_values(self):
626626
]
627627
assert results == expected, results
628628

629+
def test_query_distinct_values_list(self):
630+
item_1 = MockModel(foo=1, mock_name='item_1')
631+
item_2 = MockModel(foo=2, mock_name='item_2')
632+
item_3 = MockModel(foo=3, mock_name='item_3')
633+
634+
self.mock_set.add(item_2, item_3, item_1, item_3)
635+
results = list(self.mock_set.values_list('foo').distinct().order_by('foo'))
636+
637+
expected = [(item_2.foo,), (item_3.foo,), (item_1.foo,)]
638+
assert results == expected, results
639+
640+
def test_query_distinct_values_list_flatten(self):
641+
item_1 = MockModel(foo=1, mock_name='item_1')
642+
item_2 = MockModel(foo=2, mock_name='item_2')
643+
item_3 = MockModel(foo=3, mock_name='item_3')
644+
645+
self.mock_set.add(item_2, item_3, item_1, item_3)
646+
results = list(self.mock_set.values_list('foo', flat=True).distinct().order_by('foo'))
647+
648+
expected = [item_2.foo, item_3.foo, item_1.foo]
649+
assert results == expected, results
650+
629651
def test_query_distinct_with_fields(self):
630652
item_1 = MockModel(foo=1, bar='c', foo_bar='x', mock_name='item_1')
631653
item_2 = MockModel(foo=2, bar='a', foo_bar='y', mock_name='item_2')

0 commit comments

Comments
 (0)