Skip to content

Commit 5ef0bf6

Browse files
committed
Merge pull request #45 from rpkilby/test-restructure
Restructure tests
2 parents 2abc577 + 058cfbe commit 5ef0bf6

File tree

6 files changed

+358
-372
lines changed

6 files changed

+358
-372
lines changed

manage.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import sys
44

55
if __name__ == "__main__":
6-
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testsettings")
6+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tests.settings")
77

88
from django.core.management import execute_from_command_line
99

tests/__init__.py

Whitespace-only changes.

tests/filters.py

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
2+
from rest_framework_filters import filters
3+
from rest_framework_filters.filters import RelatedFilter, AllLookupsFilter
4+
from rest_framework_filters.filterset import FilterSet
5+
6+
7+
from .models import (
8+
User, Note, Post, Cover, Page, A, B, C, Person, Tag, BlogPost,
9+
)
10+
11+
12+
class NoteFilterWithAll(FilterSet):
13+
title = AllLookupsFilter(name='title')
14+
15+
class Meta:
16+
model = Note
17+
18+
19+
class UserFilter(FilterSet):
20+
username = filters.CharFilter(name='username')
21+
email = filters.CharFilter(name='email')
22+
23+
class Meta:
24+
model = User
25+
26+
27+
class UserFilterWithAll(FilterSet):
28+
username = AllLookupsFilter(name='username')
29+
email = filters.CharFilter(name='email')
30+
31+
class Meta:
32+
model = User
33+
34+
35+
class NoteFilterWithRelated(FilterSet):
36+
title = filters.CharFilter(name='title')
37+
author = RelatedFilter(UserFilter, name='author')
38+
39+
class Meta:
40+
model = Note
41+
42+
43+
class NoteFilterWithRelatedAll(FilterSet):
44+
title = filters.CharFilter(name='title')
45+
author = RelatedFilter(UserFilterWithAll, name='author')
46+
47+
class Meta:
48+
model = Note
49+
50+
51+
class NoteFilterWithRelatedAllDifferentFilterName(FilterSet):
52+
title = filters.CharFilter(name='title')
53+
writer = RelatedFilter(UserFilterWithAll, name='author')
54+
55+
class Meta:
56+
model = Note
57+
58+
59+
class PostFilterWithRelated(FilterSet):
60+
note = RelatedFilter(NoteFilterWithRelatedAll, name='note')
61+
62+
class Meta:
63+
model = Post
64+
65+
66+
class CoverFilterWithRelated(FilterSet):
67+
comment = filters.CharFilter(name='comment')
68+
post = RelatedFilter(PostFilterWithRelated, name='post')
69+
70+
class Meta:
71+
model = Cover
72+
73+
74+
class PageFilterWithRelated(FilterSet):
75+
title = filters.CharFilter(name='title')
76+
previous_page = RelatedFilter(PostFilterWithRelated, name='previous_page')
77+
78+
class Meta:
79+
model = Page
80+
81+
82+
class TagFilter(FilterSet):
83+
name = AllLookupsFilter(name='name')
84+
85+
class Meta:
86+
model = Tag
87+
88+
89+
class BlogPostFilter(FilterSet):
90+
title = filters.CharFilter(name='title')
91+
tags = RelatedFilter(TagFilter, name='tags')
92+
93+
class Meta:
94+
model = BlogPost
95+
96+
97+
class UserFilterWithDifferentName(FilterSet):
98+
name = filters.CharFilter(name='username')
99+
100+
class Meta:
101+
model = User
102+
103+
104+
class NoteFilterWithRelatedDifferentName(FilterSet):
105+
author = RelatedFilter(UserFilterWithDifferentName, name='author')
106+
107+
class Meta:
108+
model = Note
109+
110+
111+
#############################################################
112+
# Recursive filtersets
113+
#############################################################
114+
class AFilter(FilterSet):
115+
title = filters.CharFilter(name='title')
116+
b = RelatedFilter('tests.filters.BFilter', name='b')
117+
118+
class Meta:
119+
model = A
120+
121+
122+
class CFilter(FilterSet):
123+
title = filters.CharFilter(name='title')
124+
a = RelatedFilter(AFilter, name='a')
125+
126+
class Meta:
127+
model = C
128+
129+
130+
class BFilter(FilterSet):
131+
name = AllLookupsFilter(name='name')
132+
c = RelatedFilter(CFilter, name='c')
133+
134+
class Meta:
135+
model = B
136+
137+
138+
class PersonFilter(FilterSet):
139+
name = AllLookupsFilter(name='name')
140+
best_friend = RelatedFilter('tests.filters.PersonFilter', name='best_friend')
141+
142+
class Meta:
143+
model = Person
144+
145+
146+
#############################################################
147+
# Extensions to django_filter fields for DRF.
148+
#############################################################
149+
class AllLookupsPersonDateFilter(FilterSet):
150+
date_joined = AllLookupsFilter(name='date_joined')
151+
time_joined = AllLookupsFilter(name='time_joined')
152+
datetime_joined = AllLookupsFilter(name='datetime_joined')
153+
154+
class Meta:
155+
model = Person
156+
157+
158+
class ExplicitLookupsPersonDateFilter(FilterSet):
159+
date_joined = AllLookupsFilter(name='date_joined')
160+
time_joined = AllLookupsFilter(name='time_joined')
161+
datetime_joined = AllLookupsFilter(name='datetime_joined')
162+
163+
class Meta:
164+
model = Person
165+
166+
167+
class InSetLookupPersonIDFilter(FilterSet):
168+
pk = AllLookupsFilter('id')
169+
170+
class Meta:
171+
model = Person
172+
173+
174+
class InSetLookupPersonNameFilter(FilterSet):
175+
name = AllLookupsFilter('name')
176+
177+
class Meta:
178+
model = Person

tests/models.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
2+
from django.db import models
3+
from django.contrib.auth.models import User
4+
5+
6+
class Note(models.Model):
7+
title = models.CharField(max_length=100)
8+
content = models.TextField()
9+
author = models.ForeignKey(User)
10+
11+
12+
class Post(models.Model):
13+
note = models.ForeignKey(Note)
14+
content = models.TextField()
15+
16+
17+
class Cover(models.Model):
18+
comment = models.CharField(max_length=100)
19+
post = models.ForeignKey(Post)
20+
21+
22+
class Page(models.Model):
23+
title = models.CharField(max_length=100)
24+
content = models.TextField()
25+
previous_page = models.ForeignKey('self', null=True)
26+
27+
28+
class A(models.Model):
29+
title = models.CharField(max_length=100)
30+
b = models.ForeignKey('B', null=True)
31+
32+
33+
class C(models.Model):
34+
title = models.CharField(max_length=100)
35+
a = models.ForeignKey(A, null=True)
36+
37+
38+
class B(models.Model):
39+
name = models.CharField(max_length=100)
40+
c = models.ForeignKey(C, null=True)
41+
42+
43+
class Person(models.Model):
44+
name = models.CharField(max_length=100)
45+
best_friend = models.ForeignKey('self', null=True)
46+
47+
date_joined = models.DateField(auto_now_add=True)
48+
time_joined = models.TimeField(auto_now_add=True)
49+
datetime_joined = models.DateTimeField(auto_now_add=True)
50+
51+
52+
class Tag(models.Model):
53+
name = models.CharField(max_length=100)
54+
55+
56+
class BlogPost(models.Model):
57+
title = models.CharField(max_length=100)
58+
content = models.TextField()
59+
tags = models.ManyToManyField(Tag, null=True)

testsettings.py renamed to tests/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
'django.contrib.auth',
1010
'django.contrib.contenttypes',
1111
'rest_framework',
12-
'rest_framework_filters',
12+
'tests',
1313
)
1414

1515
SECRET_KEY = 'testsecretkey'

0 commit comments

Comments
 (0)