Skip to content

Commit 8e84aee

Browse files
authored
Merge pull request #532 from countable-web/develop
Develop
2 parents 2a4c3d6 + 54591a7 commit 8e84aee

8 files changed

Lines changed: 394 additions & 153 deletions

File tree

web/grants/tests.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ def setUp(self):
2929
grant_category=self.test_category,
3030
)
3131

32-
# This grant will not appear since we filter out grants without points
3332
self.test_grant_no_point = Grant.objects.create(
3433
grant="Test Grant No Point",
3534
title="Test Grant No Point Title",
@@ -38,14 +37,21 @@ def setUp(self):
3837
)
3938

4039

41-
class GrantAPIRouteTests(APITestCase):
40+
class GrantAPIRouteTests(BaseTestCase):
4241
def test_grant_list_route_exists(self):
4342
"""
4443
Ensure Grant List API route exists
4544
"""
4645
response = self.client.get("/api/grants/", format="json")
4746
self.assertEqual(response.status_code, status.HTTP_200_OK)
4847

48+
def test_grant_detail_route_exists(self):
49+
"""
50+
Ensure Grant Detail API route exists
51+
"""
52+
response = self.client.get(f"/api/grants/{self.test_grant.id}/", format="json")
53+
self.assertEqual(response.status_code, status.HTTP_200_OK)
54+
4955
def test_grant_category_route_exists(self):
5056
"""
5157
Ensure Grant Categories List API route exists

web/language/tests/tests_community.py

Lines changed: 104 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,30 @@
33
from django.utils import timezone
44
from django.contrib.gis.geos import GEOSGeometry
55

6-
from language.models import Language, Community, CommunityMember, Recording
6+
from language.models import (
7+
Language,
8+
Community,
9+
CommunityMember,
10+
CommunityLanguageStats,
11+
Recording,
12+
)
713
from users.models import User, Administrator
814
from web.constants import VERIFIED, REJECTED
915

1016

1117
class BaseTestCase(APITestCase):
1218
def setUp(self):
13-
# Create an Admin Type User
19+
FAKE_GEOM = """
20+
{
21+
"type": "Point",
22+
"coordinates": [
23+
-126.3482666015625,
24+
54.74840576223716
25+
]
26+
}
27+
"""
28+
self.point = GEOSGeometry(FAKE_GEOM)
29+
1430
self.admin_user = User.objects.create(
1531
username="admin_user",
1632
first_name="Admin",
@@ -22,7 +38,6 @@ def setUp(self):
2238
self.admin_user.set_password("password")
2339
self.admin_user.save()
2440

25-
# Create a Regular User with no Privileges
2641
self.regular_user = User.objects.create(
2742
username="regular_user",
2843
first_name="Regular",
@@ -32,11 +47,11 @@ def setUp(self):
3247
self.regular_user.set_password("password")
3348
self.regular_user.save()
3449

35-
# Initial Values for Language and Community
3650
self.test_language = Language.objects.create(name="Global Test Language")
37-
self.test_community = Community.objects.create(name="Global Test Community")
51+
self.test_community = Community.objects.create(
52+
name="Global Test Community", point=FAKE_GEOM
53+
)
3854

39-
# Create a Community Admin for Testing Permissions
4055
self.community_admin = User.objects.create(
4156
username="community_admin_user",
4257
first_name="Community Admin",
@@ -45,33 +60,27 @@ def setUp(self):
4560
)
4661
self.community_admin.set_password("password")
4762
self.community_admin.save()
63+
4864
Administrator.objects.create(
4965
user=self.community_admin,
5066
language=self.test_language,
5167
community=self.test_community,
5268
)
5369

54-
FAKE_GEOM = """
55-
{
56-
"type": "Point",
57-
"coordinates": [
58-
-126.3482666015625,
59-
54.74840576223716
60-
]
61-
}
62-
"""
63-
self.point = GEOSGeometry(FAKE_GEOM)
64-
65-
66-
class CommunityGeoAPITests(BaseTestCase):
67-
def setUp(self):
68-
super().setUp()
70+
# Create a community without a point, which does not show in the list/search APIs
71+
self.invalid_community = Community.objects.create(name="Invalid Community")
6972

70-
self.valid_community = Community.objects.create(
71-
name="Valid Community", point=self.point
73+
# Create a test stats
74+
self.test_stats = CommunityLanguageStats.objects.create(
75+
community=self.test_community,
76+
language=self.test_language,
77+
fluent_speakers=1,
78+
semi_speakers=1,
79+
active_learners=1,
7280
)
73-
self.invalid_community = Community.objects.create(name="Invalid Community")
7481

82+
83+
class CommunityAPIRouteTests(BaseTestCase):
7584
def test_community_geo_route_exists(self):
7685
"""
7786
Ensure Community Geo API route exists
@@ -86,6 +95,73 @@ def test_community_search_route_exists(self):
8695
response = self.client.get("/api/community-search/", format="json")
8796
self.assertEqual(response.status_code, status.HTTP_200_OK)
8897

98+
def test_community_list_route_exists(self):
99+
"""
100+
Ensure Community List API route exists
101+
"""
102+
response = self.client.get("/api/community/", format="json")
103+
self.assertEqual(response.status_code, status.HTTP_200_OK)
104+
105+
def test_community_list_member_to_verify_route_exists(self):
106+
"""
107+
Ensure Community List Members to Verify API route exists
108+
"""
109+
response = self.client.get(
110+
"/api/community/list_member_to_verify/", format="json"
111+
)
112+
self.assertEqual(response.status_code, status.HTTP_200_OK)
113+
114+
def test_community_member_verify_route_exists(self):
115+
"""
116+
Ensure Community Member Verify API route exists
117+
"""
118+
response = self.client.get("/api/community/verify_member/", format="json")
119+
self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
120+
121+
def test_community_member_reject_route_exists(self):
122+
"""
123+
Ensure Community Member Reject API route exists
124+
"""
125+
response = self.client.get("/api/community/reject_member/", format="json")
126+
self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
127+
128+
def test_community_detail_route_exists(self):
129+
"""
130+
Ensure Community Detail API route exists
131+
"""
132+
response = self.client.get(
133+
f"/api/community/{self.test_community.id}/", format="json"
134+
)
135+
self.assertEqual(response.status_code, status.HTTP_200_OK)
136+
137+
def test_community_add_audio_route_exists(self):
138+
"""
139+
Ensure Community Add Audio API route exists
140+
"""
141+
self.assertTrue(
142+
self.client.login(username="community_admin_user", password="password")
143+
)
144+
response = self.client.get(
145+
f"/api/community/{self.test_community.id}/add_audio/", format="json"
146+
)
147+
self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
148+
149+
def test_stats_list_route_exists(self):
150+
"""
151+
Ensure Stats List API route exists
152+
"""
153+
response = self.client.get("/api/stats/", format="json")
154+
self.assertEqual(response.status_code, status.HTTP_200_OK)
155+
156+
def test_stats_detail_route_exists(self):
157+
"""
158+
Ensure Stats Detail API route exists
159+
"""
160+
response = self.client.get(f"/api/stats/{self.test_stats.id}/", format="json")
161+
self.assertEqual(response.status_code, status.HTTP_200_OK)
162+
163+
164+
class CommunityGeoAPITests(BaseTestCase):
89165
def test_community_geo(self):
90166
"""
91167
Ensure Community Geo API works
@@ -95,7 +171,7 @@ def test_community_geo(self):
95171
self.assertEqual(response.status_code, status.HTTP_200_OK)
96172

97173
# By fetching "features" specifically, we're committing
98-
# that this API si a GEO Feature API
174+
# that this API is a GEO Feature API
99175
data = response.json().get("features")
100176

101177
# Only count 1 because the 2nd community in setUp() is invalid
@@ -111,9 +187,9 @@ def test_community_search(self):
111187
data = response.json()
112188

113189
# By fetching the first record, we're committing
114-
# that the valid_community was added to the search list
115-
valid_community = data[0]
116-
self.assertEqual(valid_community.get("name"), "Valid Community")
190+
# that the test_community was added to the search list
191+
test_community = data[0]
192+
self.assertEqual(test_community.get("name"), "Global Test Community")
117193

118194

119195
class CommunityAPITests(BaseTestCase):
@@ -149,13 +225,6 @@ def test_community_detail(self):
149225
response.data["audio_obj"]["recorder"], self.recording.recorder
150226
)
151227

152-
def test_community_list_route_exists(self):
153-
"""
154-
Ensure community list API route exists
155-
"""
156-
response = self.client.get("/api/community/", format="json")
157-
self.assertEqual(response.status_code, status.HTTP_200_OK)
158-
159228
def test_community_add_audio_for_admin(self):
160229
"""
161230
Ensure we can add a community audio to a community object using an admin account.

web/language/tests/tests_favourite.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,41 @@ def setUp(self):
4444
self.point = GEOSGeometry(self.FAKE_GEOM)
4545

4646

47-
class FavouriteAPITests(BaseTestCase):
47+
class FavouriteAPIRouteTests(BaseTestCase):
4848
def test_favourite_list_route_exists(self):
4949
"""
5050
Ensure Favourite list API route exists
5151
"""
52-
# Must be logged in
53-
self.client.login(username="admin_user", password="password")
52+
self.assertTrue(self.client.login(username="admin_user", password="password"))
5453

5554
response = self.client.get("/api/favourite/", format="json")
5655
self.assertEqual(response.status_code, status.HTTP_200_OK)
5756

57+
def test_favourite_detail_route_exists(self):
58+
"""
59+
Ensure Favourite Detail API route exists
60+
"""
61+
62+
self.assertTrue(self.client.login(username="admin_user", password="password"))
63+
64+
favourite_placename = Favourite.objects.create(
65+
name="Test Favourite Placename",
66+
user=self.admin_user,
67+
place=self.place,
68+
favourite_type="favourite",
69+
description="I like this Placename",
70+
point=self.point,
71+
zoom=10,
72+
)
73+
74+
response = self.client.get(
75+
f"/api/favourite/{favourite_placename.id}/", format="json"
76+
)
77+
self.assertEqual(response.status_code, status.HTTP_200_OK)
78+
79+
80+
class FavouriteAPITests(BaseTestCase):
81+
5882
def test_get_favourite_placename(self):
5983
"""
6084
Ensure we can retrieve a newly created Favourite object.

web/language/tests/tests_language.py

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@
99

1010
class BaseTestCase(APITestCase):
1111
def setUp(self):
12-
self.user = User.objects.create(
13-
username="testuser001",
14-
first_name="Test",
15-
last_name="user 001",
16-
email="test@countable.ca",
12+
self.admin_user = User.objects.create(
13+
username="admin_user",
14+
first_name="Admin",
15+
last_name="User",
16+
email="admin@countable.ca",
1717
is_staff=True,
1818
is_superuser=True,
1919
)
20-
self.user.set_password("password")
21-
self.user.save()
20+
self.admin_user.set_password("password")
21+
self.admin_user.save()
2222

2323
self.FAKE_GEOM = """
2424
{
@@ -45,21 +45,48 @@ def setUp(self):
4545
]
4646
}"""
4747

48-
49-
class CommunityGeoAPITests(BaseTestCase):
50-
def setUp(self):
51-
super().setUp()
52-
5348
poly = GEOSGeometry(self.FAKE_GEOM)
54-
# Only include if it has a geometry
55-
self.language1 = Language.objects.create( # Included (1)
49+
50+
self.language1 = Language.objects.create( # With geom
5651
name="test language1", geom=poly
5752
)
58-
self.language2 = Language.objects.create( # Exclude
53+
self.language2 = Language.objects.create( # Without geom
5954
name="test language2",
6055
)
6156

62-
# ONE TEST TESTS ONLY ONE SCENARIO ######
57+
58+
class LanguageAPIRouteTests(BaseTestCase):
59+
def test_language_list_route_exists(self):
60+
"""
61+
Ensure Language List API route exists
62+
"""
63+
response = self.client.get("/api/language/", format="json")
64+
self.assertEqual(response.status_code, status.HTTP_200_OK)
65+
66+
def test_language_detail_route_exists(self):
67+
"""
68+
Ensure Language Detail API route exists
69+
"""
70+
response = self.client.get(f"/api/language/{self.language1.id}/", format="json")
71+
self.assertEqual(response.status_code, status.HTTP_200_OK)
72+
73+
def test_language_add_greeting_audio_route_exists(self):
74+
"""
75+
Ensure Language Add Greeting Audio API route exists
76+
"""
77+
response = self.client.get(
78+
f"/api/language/{self.language1.id}/add_greeting_audio/", format="json"
79+
)
80+
self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
81+
82+
def test_language_add_language_audio_route_exists(self):
83+
"""
84+
Ensure Language Add Language Audio API route exists
85+
"""
86+
response = self.client.get(
87+
f"/api/language/{self.language1.id}/add_language_audio/", format="json"
88+
)
89+
self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
6390

6491
def test_language_geo_route_exists(self):
6592
"""
@@ -75,6 +102,10 @@ def test_language_search_route_exists(self):
75102
response = self.client.get("/api/language-search/", format="json")
76103
self.assertEqual(response.status_code, status.HTTP_200_OK)
77104

105+
106+
class LanguageGeoAPITests(BaseTestCase):
107+
# ONE TEST TESTS ONLY ONE SCENARIO ######
108+
78109
def test_language_geo(self):
79110
"""
80111
Ensure Language Geo API works
@@ -150,7 +181,7 @@ def test_language_add_language_audio(self):
150181
Ensure we can add a language audio to a language object.
151182
"""
152183
# Must be logged in
153-
self.assertTrue(self.client.login(username="testuser001", password="password"))
184+
self.assertTrue(self.client.login(username="admin_user", password="password"))
154185

155186
# Check we're logged in
156187
response = self.client.get("/api/user/auth/")
@@ -187,7 +218,7 @@ def test_language_add_greeting_audio(self):
187218
Ensure we can add a greeting audio to a language object.
188219
"""
189220
# Must be logged in
190-
self.assertTrue(self.client.login(username="testuser001", password="password"))
221+
self.assertTrue(self.client.login(username="admin_user", password="password"))
191222

192223
# Check we're logged in
193224
response = self.client.get("/api/user/auth/")

0 commit comments

Comments
 (0)