Skip to content

Commit

Permalink
Merge c86d080 into 118b827
Browse files Browse the repository at this point in the history
  • Loading branch information
RutaleIvanPaul committed Aug 14, 2018
2 parents 118b827 + c86d080 commit ae0406b
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 129 deletions.
2 changes: 1 addition & 1 deletion authors/apps/articles/renderers.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,4 @@ def render(self, data, media_type=None, renderer_context=None):
return json.dumps({
'comment': data,
})

1 change: 0 additions & 1 deletion authors/apps/articles/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,3 @@ class Meta:
model = Comment
fields = '__all__'


103 changes: 0 additions & 103 deletions authors/apps/articles/tests/test_articles_listview_pagination.py

This file was deleted.

72 changes: 72 additions & 0 deletions authors/apps/articles/tests/test_search_article.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
from django.test import TestCase, RequestFactory
from authors.apps.articles.views import (
ArticleCreateAPIView,
SearchArticlesAPIView,
)
from authors.apps.authentication.views import LoginAPIView
from rest_framework.test import force_authenticate
from authors.apps.authentication.models import User
import json

class SearchArticleTestCase(TestCase):
def setUp(self):
self.factory = RequestFactory()

self.user = {
"user" : {
"email":"test@gmail.com",
"username":"tester",
"password":"testpass@word"
}
}

user = User.objects.create_user(self.user["user"]["username"], self.user["user"]["email"], self.user["user"]["password"])
user.is_verified = True
user.save()

self.article_data = {
"title":"How to Survive",
"description":"How?",
"body":"This is how to survive",
"tags":["test"]
}

self.request = self.factory.post('/api/users/login/', data = json.dumps(self.user), content_type='application/json')
self.response = LoginAPIView.as_view()(self.request)
self.headers = {
'HTTP_AUTHORIZATION': 'Token ' + self.response.data["token"]
}


request = self.factory.post('api/articles', data = json.dumps(self.article_data), **self.headers, content_type = 'application/json')
response = ArticleCreateAPIView.as_view()(request)

def test_search_by_author_normal(self):
request = self.factory.get('api/articles/search?author=tester')
response = SearchArticlesAPIView.as_view()(request)
self.assertEqual(response.status_code, 200)

def test_search_by_author_non_existent(self):
request = self.factory.get('api/articles/search?author=non-existent')
response = SearchArticlesAPIView.as_view()(request)
self.assertEqual(response.status_code, 404)

def test_search_by_title_normal(self):
request = self.factory.get('api/articles/search?title=How')
response = SearchArticlesAPIView.as_view()(request)
self.assertEqual(response.status_code, 200)

def test_search_by_title_non_existent(self):
request = self.factory.get('api/articles/search?title=XYZ')
response = SearchArticlesAPIView.as_view()(request)
self.assertEqual(response.data["count"], 0)

def test_search_by_tag_normal(self):
request = self.factory.get('api/articles/search?tag=test')
response = SearchArticlesAPIView.as_view()(request)
self.assertGreater(response.data["count"], 0)

def test_search_by_tag_non_existent(self):
request = self.factory.get('api/articles/search?tag=XYZ')
response = SearchArticlesAPIView.as_view()(request)
self.assertEqual(response.data["count"], 0)
7 changes: 2 additions & 5 deletions authors/apps/articles/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@
LikeArticleAPIView,
DislikeArticleAPIView,
FavoriteArticleAPIView,
ListAuthorArticlesAPIView,
ListFollowingArticlesAPIView,
SearchArticlesAPIView,
)

app_name = "articles"
Expand All @@ -20,7 +19,5 @@
path('articles/<slug>/like',LikeArticleAPIView.as_view()),
path('articles/<slug>/dislike',DislikeArticleAPIView.as_view()),
path('articles/<slug>/favorite',FavoriteArticleAPIView.as_view()),
path('my/articles/', ListAuthorArticlesAPIView.as_view()),
path('<username>/articles/', ListFollowingArticlesAPIView.as_view() ),
path('articles/search', SearchArticlesAPIView.as_view() ),
]

39 changes: 20 additions & 19 deletions authors/apps/articles/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,28 +155,29 @@ def delete(self,*args,**kwargs):
else:
return Response(data = {"errors":{"error":"Not yet Favorited"}},status=status.HTTP_409_CONFLICT)

class ListAuthorArticlesAPIView(ListAPIView):
permission_classes = (IsAuthenticated, )
serializer_class = CreateArticleSerializer
renderer_classes = (ListArticlesJSONRenderer,)
pagination_class = PageNumberPagination

def get_queryset(self):
jwt = JWTAuthentication()
user_data = jwt.authenticate(self.request)
articles = Article.objects.filter(author = user_data[0])
return articles

class ListFollowingArticlesAPIView(ListAPIView):
permission_classes = (IsAuthenticated, )
class SearchArticlesAPIView(ListAPIView):
serializer_class = CreateArticleSerializer
renderer_classes = (ListArticlesJSONRenderer,)
pagination_class = PageNumberPagination
look_url_kwarg = "username"

def get_queryset(self):
username = self.kwargs.get(self.look_url_kwarg)
author = get_object_or_404(User, username = username)
articles = Article.objects.filter(author = author)
return articles

queryset = Article.objects.all()
if "title" in self.request.query_params:
filter_field = self.request.query_params.get('title')
filtered_queryset = queryset.filter(title__icontains = filter_field)

if "author" in self.request.query_params:
filter_field = self.request.query_params.get('author')
user = get_object_or_404(User,username__icontains = filter_field)
filtered_queryset = queryset.filter(author = user.id)
if "tag" in self.request.query_params:
filter_field = self.request.query_params.get('tag')
filtered_queryset =[]
if filter_field is not None:
for article in queryset:
for tag in article.tags.all():
if filter_field ==tag.name:
filtered_queryset.append(article)
return filtered_queryset

0 comments on commit ae0406b

Please sign in to comment.