Skip to content

Commit ee9cb1a

Browse files
committed
add view to list comments of a changeset
1 parent 6032358 commit ee9cb1a

File tree

5 files changed

+70
-2
lines changed

5 files changed

+70
-2
lines changed

README.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ DJANGO_NON_STAFF_USER_THROTTLE_RATE NON_STAFF_USER_THROTTLE_RATE 3/min
6060
OAUTH_REDIRECT_URI OAUTH_REDIRECT_URI http://localhost:8000/oauth-landing.html http://localhost:8000/oauth-landing.html
6161
OSMCHA_FRONTEND_VERSION OSMCHA_FRONTEND_VERSION oh-pages oh-pages
6262
DJANGO_ENABLE_CHANGESET_COMMENTS ENABLE_POST_CHANGESET_COMMENTS False False
63+
DJANGO_OSM_COMMENTS_API_KEY OSM_COMMENTS_API_KEY '' ''
6364
======================================= ================================= ========================================= ===========================================
6465

6566
You can set each of these variables with:

config/settings/common.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,9 @@
324324
# are reviewed
325325
ENABLE_POST_CHANGESET_COMMENTS = env('DJANGO_ENABLE_CHANGESET_COMMENTS', default=False)
326326

327+
# Authorization token to access the OSM-COMMENTS-API
328+
OSM_COMMENTS_API_KEY = env('DJANGO_OSM_COMMENTS_API_KEY', default='')
329+
327330
# Your common stuff: Below this line define 3rd party library settings
328331
REST_FRAMEWORK = {
329332
'DEFAULT_AUTHENTICATION_CLASSES': (

osmchadjango/changeset/tests/test_changeset_views.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1263,3 +1263,52 @@ def test_set_harmful_by_staff_user(self):
12631263
)
12641264
self.assertEqual(response.status_code, 200)
12651265
self.assertEqual(Changeset.objects.filter(checked=True).count(), 5)
1266+
1267+
class TestChangesetCommentsView(APITestCase):
1268+
def setUp(self):
1269+
self.changeset = HarmfulChangesetFactory(
1270+
id=55736682,
1271+
)
1272+
HarmfulChangesetFactory(id=1343)
1273+
self.user = User.objects.create_user(
1274+
username='test',
1275+
password='password',
1276+
1277+
)
1278+
UserSocialAuth.objects.create(
1279+
user=self.user,
1280+
provider='openstreetmap',
1281+
uid='123123',
1282+
)
1283+
1284+
def test_unauthenticated_changeset_detail_response(self):
1285+
response = self.client.get(
1286+
reverse('changeset:comment-list', args=[self.changeset.id])
1287+
)
1288+
self.assertEqual(response.status_code, 401)
1289+
1290+
def test_authenticated_changeset_detail_response(self):
1291+
self.client.login(username=self.user.username, password='password')
1292+
response = self.client.get(
1293+
reverse('changeset:comment', args=[self.changeset.id])
1294+
)
1295+
1296+
self.assertEqual(response.status_code, 200)
1297+
self.assertTrue(len(response.data) > 0)
1298+
1299+
def test_changeset_does_not_exist(self):
1300+
self.client.login(username=self.user.username, password='password')
1301+
response = self.client.get(
1302+
reverse('changeset:comment', args=[1234])
1303+
)
1304+
1305+
self.assertEqual(response.status_code, 404)
1306+
1307+
def test_changeset_without_comments(self):
1308+
self.client.login(username=self.user.username, password='password')
1309+
response = self.client.get(
1310+
reverse('changeset:comment', args=[1343])
1311+
)
1312+
1313+
self.assertEqual(response.status_code, 200)
1314+
self.assertTrue(response.data, [])

osmchadjango/changeset/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
re_path(
7373
r'^changesets/(?P<pk>\w+)/comment/$',
7474
view=views.ChangesetCommentAPIView.as_view(
75-
{'post': 'post_comment'}
75+
{'post': 'post_comment', 'get': 'get_comments'}
7676
),
7777
name='comment'
7878
),

osmchadjango/changeset/views.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from rest_framework_gis.pagination import GeoJsonPagination
2525
from rest_framework_csv.renderers import CSVRenderer
2626
from rest_framework.exceptions import APIException
27+
import requests
2728

2829
from .models import Changeset, UserWhitelist, SuspicionReasons, Tag
2930
from .filters import ChangesetFilter
@@ -465,13 +466,27 @@ def get_queryset(self):
465466

466467

467468
class ChangesetCommentAPIView(ModelViewSet):
468-
"""Post a comment to a changeset in the OpenStreetMap website."""
469469
queryset = Changeset.objects.all()
470470
permission_classes = (IsAuthenticated,)
471471
serializer_class = ChangesetCommentSerializer
472472

473+
@detail_route(methods=['get'])
474+
def get_comments(self, request, pk):
475+
"List comments received by a changeset on the OpenStreetMap website."
476+
self.changeset = self.get_object()
477+
headers = {
478+
'apiKey': settings.OSM_COMMENTS_API_KEY,
479+
'Content-Type': 'application/json'
480+
}
481+
data = requests.get(
482+
'https://osm-comments-api.mapbox.com/api/v1/changesets/{}'.format(pk),
483+
headers=headers
484+
)
485+
return data.get('properties').get('comments')
486+
473487
@detail_route(methods=['post'])
474488
def post_comment(self, request, pk):
489+
"Post a comment to a changeset in the OpenStreetMap website."
475490
self.changeset = self.get_object()
476491
serializer = self.get_serializer(data=request.data)
477492
if serializer.is_valid():

0 commit comments

Comments
 (0)