Skip to content

Commit

Permalink
Merge 7ae638c into d09c0f8
Browse files Browse the repository at this point in the history
  • Loading branch information
evamaina committed Nov 13, 2018
2 parents d09c0f8 + 7ae638c commit 0bc9d5e
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 2 deletions.
5 changes: 5 additions & 0 deletions authors/apps/article/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from django.utils.translation import pgettext_lazy as _
from django.contrib.auth import get_user_model
from django.core.validators import MaxValueValidator, MinValueValidator
from rest_framework.reverse import reverse as api_reverse

'''Django-autoslug is a reusable Django library
that provides an improved slug field which can automatically:
Expand Down Expand Up @@ -78,6 +79,10 @@ class Meta:
def __str__(self):
return self.title

def api_url(self, request=None):
return api_reverse("article:detail",
kwargs={'slug': self.slug}, request=request)


class RateArticle(models.Model):
"""
Expand Down
46 changes: 45 additions & 1 deletion authors/apps/article/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,60 @@


class ArticleSerializer(serializers.ModelSerializer):
# add the return fields
url = serializers.SerializerMethodField(read_only=True)
facebook = serializers.SerializerMethodField(read_only=True)
Linkedin = serializers.SerializerMethodField(read_only=True)
twitter = serializers.SerializerMethodField(read_only=True)
mail = serializers.SerializerMethodField(read_only=True)

update_url = serializers.HyperlinkedIdentityField(
view_name=NAMESPACE + ':update', lookup_field='slug')
delete_url = serializers.HyperlinkedIdentityField(
view_name=NAMESPACE + ':delete', lookup_field='slug')
author = serializers.SerializerMethodField(read_only=True)

def get_url(self, obj):
request = self.context.get("request")
return obj.api_url(request=request)

def link_get(self, obj, link, args=None):
"""get url and append the link to url that you want to share"""
request = self.context.get("request")
if args is None:
return link + obj.api_url(request=request)
if args:
return link + obj.api_url(request=request) + args

def get_facebook(self, obj):
"""append facebook link."""
link = 'http://www.facebook.com/sharer.php?u='
return self.link_get(obj, link)

def get_Linkedin(self, obj):
"""append linkedin link"""
link = 'http://www.linkedin.com/shareArticle?mini=true&url='
return self.link_get(obj, link)

def get_twitter(self, obj):
"""append twitter link"""
link = 'https://twitter.com/share?url='
args = '&text=Amazing Read'
return self.link_get(obj, link, args=args)

def get_mail(self, obj):
request = self.context.get("request")
return 'mailto:?subject=New Article Alert&body={}'.format(
obj.api_url(request=request))

class Meta:
model = TABLE

fields = fields + ('author', 'update_url', 'delete_url')
fields = fields + ('author', 'update_url', 'delete_url', 'facebook',
'Linkedin',
'twitter',
'mail',
'url')

def get_author(self, obj):
try:
Expand Down
27 changes: 26 additions & 1 deletion authors/apps/article/tests/test_article.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import json
from django.apps import apps
from django.test import TestCase
from django.urls import reverse
Expand Down Expand Up @@ -62,7 +63,6 @@ def setUp(self):
kwargs={
'slug': self.article.slug})


def test_create_article_api(self):
response = self.client.post(self.create_url, self.body, format='json')
self.assertEqual(201, response.status_code)
Expand Down Expand Up @@ -128,3 +128,28 @@ def test_number_of_articles_in_page(self):
self.create_many_articles()
response = self.client.get(self.list_url)
assert len(response.data["results"]) == 10

def test_if_article_returns_facebook_url(self):
"""This method tests whether the API returns facebook url"""
response = self.client.get(self.list_url)
self.assertIn("facebook", json.dumps(response.data))

def test_if_article_returns_linkedin_url(self):
"""This method tests whether the API returns linkedin url"""
response = self.client.get(self.list_url)
self.assertIn("Linkedin", json.dumps(response.data))

def test_if_article_returns_twitter_url(self):
"""This method tests whether the API returns twitter url"""
response = self.client.get(self.list_url)
self.assertIn("twitter", json.dumps(response.data))

def test_if_article_returns_mail_url(self):
"""This method tests whether the API returns mail url"""
response = self.client.get(self.list_url)
self.assertIn("mail", json.dumps(response.data))

def test_article_returns_url(self):
"""This method tests whether the API returns url"""
response = self.client.get(self.list_url)
self.assertIn("url", json.dumps(response.data))
3 changes: 3 additions & 0 deletions authors/apps/article/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ class ArticleDetailAPIView(RetrieveAPIView):
serializer_class = ArticleSerializer
lookup_field = LOOKUP_FIELD

def get_serializer_context(self, *args, **kwargs):
return {"request": self.request}


class ArticleDeleteAPIView(DestroyAPIView):
queryset = TABLE.objects.all()
Expand Down

0 comments on commit 0bc9d5e

Please sign in to comment.