Skip to content

Commit 5780fd1

Browse files
committed
Move tests for query object into dedicated file
1 parent 733822c commit 5780fd1

File tree

2 files changed

+67
-61
lines changed

2 files changed

+67
-61
lines changed

tests/test_hstore_field.py

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -15,64 +15,3 @@ def test_deconstruct():
1515

1616
for key, value in original_kwargs.items():
1717
assert new_kwargs[key] == value
18-
19-
20-
def test_values():
21-
"""Tests whether selecting only certain hstore keys using the
22-
query set's .values() method works properly."""
23-
24-
model_fk = get_fake_model({
25-
'first_name': models.CharField(max_length=255),
26-
'last_name': models.CharField(max_length=255)
27-
})
28-
29-
model = get_fake_model({
30-
'title': HStoreField(),
31-
'fk': models.ForeignKey(model_fk)
32-
})
33-
34-
fk = model_fk.objects.create(first_name='Swen', last_name='Kooij')
35-
obj = model.objects.create(title={'en': 'english', 'ar': 'arabic'}, fk=fk)
36-
37-
# ensure that selecting only certain keys from a hstore field works
38-
result = list(model.objects.values('title__en', 'fk__first_name', 'title__ar'))[0]
39-
assert result['title__en'] == obj.title['en']
40-
assert result['title__ar'] == obj.title['ar']
41-
42-
# make sure that selecting the whole hstore field works properly
43-
result = list(model.objects.values('fk__first_name', 'title'))[0]
44-
assert result['title'] == obj.title
45-
46-
# make sure .values_list() also works properly
47-
result = list(model.objects.values_list('title__en', 'title__ar'))[0]
48-
assert result[0] == obj.title['en']
49-
assert result[1] == obj.title['ar']
50-
51-
result = list(model.objects.values_list('title__en', 'title__ar'))[0]
52-
53-
54-
def test_annotate_ref():
55-
"""Tests whether annotating using a :see:HStoreRef expression
56-
works correctly.
57-
58-
This allows you to select an individual hstore key."""
59-
60-
model_fk = get_fake_model({
61-
'title': HStoreField(),
62-
})
63-
64-
model = get_fake_model({
65-
'fk': models.ForeignKey(model_fk)
66-
})
67-
68-
fk = model_fk.objects.create(title={'en': 'english', 'ar': 'arabic'})
69-
model.objects.create(fk=fk)
70-
71-
queryset = (
72-
model.objects
73-
.annotate(english_title=HStoreRef('fk__title', 'en'))
74-
.values('english_title')
75-
.first()
76-
)
77-
78-
assert queryset['english_title'] == 'english'

tests/test_query.py

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
from django.db import models
2+
3+
from psqlextra import HStoreField
4+
from psqlextra.expressions import HStoreRef
5+
6+
from .fake_model import get_fake_model
7+
8+
9+
def test_values_hstore_key():
10+
"""Tests whether selecting only certain hstore keys using the
11+
query set's .values() method works properly."""
12+
13+
model_fk = get_fake_model({
14+
'first_name': models.CharField(max_length=255),
15+
'last_name': models.CharField(max_length=255)
16+
})
17+
18+
model = get_fake_model({
19+
'title': HStoreField(),
20+
'fk': models.ForeignKey(model_fk)
21+
})
22+
23+
fk = model_fk.objects.create(first_name='Swen', last_name='Kooij')
24+
obj = model.objects.create(title={'en': 'english', 'ar': 'arabic'}, fk=fk)
25+
26+
# ensure that selecting only certain keys from a hstore field works
27+
result = list(model.objects.values('title__en', 'fk__first_name', 'title__ar'))[0]
28+
assert result['title__en'] == obj.title['en']
29+
assert result['title__ar'] == obj.title['ar']
30+
31+
# make sure that selecting the whole hstore field works properly
32+
result = list(model.objects.values('fk__first_name', 'title'))[0]
33+
assert result['title'] == obj.title
34+
35+
# make sure .values_list() also works properly
36+
result = list(model.objects.values_list('title__en', 'title__ar'))[0]
37+
assert result[0] == obj.title['en']
38+
assert result[1] == obj.title['ar']
39+
40+
result = list(model.objects.values_list('title__en', 'title__ar'))[0]
41+
42+
43+
def test_annotate_hstore_key_ref():
44+
"""Tests whether annotating using a :see:HStoreRef expression
45+
works correctly.
46+
47+
This allows you to select an individual hstore key."""
48+
49+
model_fk = get_fake_model({
50+
'title': HStoreField(),
51+
})
52+
53+
model = get_fake_model({
54+
'fk': models.ForeignKey(model_fk)
55+
})
56+
57+
fk = model_fk.objects.create(title={'en': 'english', 'ar': 'arabic'})
58+
model.objects.create(fk=fk)
59+
60+
queryset = (
61+
model.objects
62+
.annotate(english_title=HStoreRef('fk__title', 'en'))
63+
.values('english_title')
64+
.first()
65+
)
66+
67+
assert queryset['english_title'] == 'english'

0 commit comments

Comments
 (0)