Skip to content
This repository has been archived by the owner on Aug 24, 2019. It is now read-only.

Commit

Permalink
Renamed issue
Browse files Browse the repository at this point in the history
  • Loading branch information
enisbt committed Aug 17, 2018
1 parent a06953d commit 98737a9
Show file tree
Hide file tree
Showing 8 changed files with 131 additions and 74 deletions.
3 changes: 0 additions & 3 deletions factlist/perspective/admin.py

This file was deleted.

42 changes: 42 additions & 0 deletions factlist/perspective/migrations/0003_renamed_issue.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Generated by Django 2.1 on 2018-08-17 19:54

from django.conf import settings
from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('claims', '0013_file_size_and_extension'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('perspective', '0002_related_name_of_tags'),
]

operations = [
migrations.RenameModel(
old_name='Issue',
new_name='Topic',
),
migrations.RenameModel(
old_name='IssueLinks',
new_name='TopicLink',
),
migrations.RenameField(
model_name='tag',
old_name='issue',
new_name='topic',
),
migrations.RenameField(
model_name='topiclink',
old_name='issue',
new_name='topic',
),
migrations.AlterModelTable(
name='topic',
table='topics',
),
migrations.AlterModelTable(
name='topiclink',
table='topic_links',
),
]
16 changes: 8 additions & 8 deletions factlist/perspective/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,23 @@
from factlist.claims.models import Link


class Issue(models.Model):
class Topic(models.Model):
title = models.CharField(max_length=255)
user = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(default=timezone.now)
updated_at = models.DateTimeField(null=True, blank=True)

class Meta:
db_table = 'issues'
db_table = 'topics'

def issue_links(self):
link_ids = list(IssueLinks.objects.filter(issue=self).values_list("link_id", flat=True))
def topic_links(self):
link_ids = list(TopicLink.objects.filter(topic=self).values_list("link_id", flat=True))
return Link.objects.filter(id__in=link_ids)


class Tag(models.Model):
title = models.CharField(max_length=255)
issue = models.ForeignKey(Issue, on_delete=models.CASCADE, related_name="tags")
topic = models.ForeignKey(Topic, on_delete=models.CASCADE, related_name="tags")
created_at = models.DateTimeField(default=timezone.now)
updated_at = models.DateTimeField(null=True, blank=True)

Expand All @@ -37,11 +37,11 @@ class Meta:
db_table = 'link_tags'


class IssueLinks(models.Model):
issue = models.ForeignKey(Issue, on_delete=models.CASCADE)
class TopicLink(models.Model):
topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
link = models.ForeignKey(Link, on_delete=models.CASCADE)
created_at = models.DateTimeField(default=timezone.now)
updated_at = models.DateTimeField(null=True, blank=True)

class Meta:
db_table = 'issue_links'
db_table = 'topic_links'
13 changes: 6 additions & 7 deletions factlist/perspective/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

from factlist.users.serializers import MinimalUserSerializer
from factlist.claims.serializers import LinkSerializer
from factlist.claims.models import Link
from .models import Issue, IssueLinks, Tag
from .models import Topic, TopicLink, Tag


class TagSerializer(serializers.ModelSerializer):
Expand All @@ -18,13 +17,13 @@ class Meta:
)


class IssueSerializer(serializers.ModelSerializer):
class TopicSerializer(serializers.ModelSerializer):
user = MinimalUserSerializer(read_only=True)
tags = TagSerializer(many=True)
links = LinkSerializer(many=True, source='issue_links')
links = LinkSerializer(many=True, source='topic_links')

class Meta:
model = Issue
model = Topic
fields = (
'id',
'title',
Expand All @@ -36,10 +35,10 @@ class Meta:
)


class CreateIssueSerializer(serializers.Serializer):
class CreateTopicSerializer(serializers.Serializer):
title = serializers.CharField(required=True)
link = serializers.CharField(required=True)


class UpdateIssueSerializer(serializers.Serializer):
class UpdateTopicSerializer(serializers.Serializer):
title = serializers.CharField(required=True)
67 changes: 33 additions & 34 deletions factlist/perspective/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,113 +6,112 @@

class PerspectiveTestCase(TestCase, UserTestMixin):

def test_create_issue(self):
def test_create_topic(self):
user, client = self.create_user_and_user_client()

data = {
'title': 'Test issue',
'title': 'Test topic',
'link': "https://github.com",
}
response = client.post('/api/v1/issues/', data=data)
response = client.post('/api/v1/topics/', data=data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(response.data["title"], "Test issue")
self.assertEqual(response.data["title"], "Test topic")

def test_get_list_of_issues(self):
def test_get_list_of_topics(self):
user, client = self.create_user_and_user_client()

data = {
'title': 'Test issue',
'title': 'Test topic',
'link': "https://github.com",
}
response = client.post('/api/v1/issues/', data=data)
response = client.post('/api/v1/topics/', data=data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)

response = client.get('/api/v1/issues/')
response = client.get('/api/v1/topics/')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['count'], 1)

data = {
'title': 'Test issue2',
'title': 'Test topic2',
'link': "https://github.com",
}
response = client.post('/api/v1/issues/', data=data)
response = client.post('/api/v1/topics/', data=data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)

response = client.get('/api/v1/issues/')
response = client.get('/api/v1/topics/')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['count'], 2)

def test_get_an_issue(self):
def test_get_an_topic(self):
user, client = self.create_user_and_user_client()

data = {
'title': 'Test issue',
'title': 'Test topic',
'link': "https://github.com",
}
response = client.post('/api/v1/issues/', data=data)
response = client.post('/api/v1/topics/', data=data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)

response = client.get("/api/v1/issues/%s/" % response.data["id"])
response = client.get("/api/v1/topics/%s/" % response.data["id"])
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data["title"], "Test issue")
self.assertEqual(response.data["title"], "Test topic")

def test_update_an_issue(self):
def test_update_an_topic(self):
enis, enis_client = self.create_user_and_user_client()
ali, ali_client = self.create_user_and_user_client()

data = {
'title': 'Test issue',
'title': 'Test topic',
'link': "https://github.com",
}
response = enis_client.post('/api/v1/issues/', data=data)
response = enis_client.post('/api/v1/topics/', data=data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)

data = {
"title": "Test issue edit"
"title": "Test topic edit"
}
response = enis_client.patch('/api/v1/issues/%s/' % response.data["id"], data=data)
response = enis_client.patch('/api/v1/topics/%s/' % response.data["id"], data=data)
self.assertEqual(response.status_code, status.HTTP_200_OK)

data = {
"title": "Test issue edit"
"title": "Test topic edit"
}
response = ali_client.patch('/api/v1/issues/%s/' % response.data["id"], data=data)
response = ali_client.patch('/api/v1/topics/%s/' % response.data["id"], data=data)
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)

def test_delete_an_issue(self):
def test_delete_an_topic(self):
enis, enis_client = self.create_user_and_user_client()
ali, ali_client = self.create_user_and_user_client()

data = {
'title': 'Test issue',
'title': 'Test topic',
'link': "https://github.com",
}
response = enis_client.post('/api/v1/issues/', data=data)
response = enis_client.post('/api/v1/topics/', data=data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)

issue_id = response.data["id"]
topic_id = response.data["id"]

response = ali_client.delete('/api/v1/issues/%s/' % issue_id)
response = ali_client.delete('/api/v1/topics/%s/' % topic_id)
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)

response = enis_client.delete('/api/v1/issues/%s/' % issue_id)
response = enis_client.delete('/api/v1/topics/%s/' % topic_id)
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

def test_create_a_link(self):
enis, enis_client = self.create_user_and_user_client()
ali, ali_client = self.create_user_and_user_client()

data = {
'title': 'Test issue',
'title': 'Test topic',
'link': "https://github.com",
}
response = enis_client.post('/api/v1/issues/', data=data)
response = enis_client.post('/api/v1/topics/', data=data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)

issue_id = response.data["id"]
topic_id = response.data["id"]

data = {
"link": "https://twitter.com"
}
response = enis_client.post("/api/v1/issues/%s/links/" % issue_id, data=data)
response = enis_client.post("/api/v1/topics/%s/links/" % topic_id, data=data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
8 changes: 4 additions & 4 deletions factlist/perspective/urls.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from django.urls import path

from .views import ListAndCreateIssueView, IssueView, CreateLinkView
from .views import ListAndCreateTopicView, TopicView, CreateLinkView

urlpatterns = [
path('issues/', ListAndCreateIssueView.as_view()),
path('issues/<int:pk>/', IssueView.as_view()),
path('issues/<int:pk>/links/', CreateLinkView.as_view()),
path('topics/', ListAndCreateTopicView.as_view()),
path('topics/<int:pk>/', TopicView.as_view()),
path('topics/<int:pk>/links/', CreateLinkView.as_view()),
]
36 changes: 18 additions & 18 deletions factlist/perspective/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@

from factlist.claims.models import Link
from factlist.claims.serializers import LinkSerializer
from .serializers import IssueSerializer, CreateIssueSerializer, UpdateIssueSerializer
from .models import Issue, IssueLinks, Tag
from .serializers import TopicSerializer, CreateTopicSerializer, UpdateTopicSerializer
from .models import Topic, TopicLink, Tag


class ListAndCreateIssueView(ListCreateAPIView):
class ListAndCreateTopicView(ListCreateAPIView):

def get_permissions(self):
if self.request.method == "GET":
Expand All @@ -18,32 +18,32 @@ def get_permissions(self):
return IsAuthenticated(),

def get_queryset(self):
return Issue.objects.filter().order_by('-id')
return Topic.objects.filter().order_by('-id')

def perform_create(self, serializer):
serializer.save(user=self.request.user)

def get_serializer_class(self):
if self.request.method == "GET":
return IssueSerializer
return TopicSerializer
else:
return CreateIssueSerializer
return CreateTopicSerializer

def post(self, request, *args, **kwargs):
serializer = CreateIssueSerializer(data=request.data)
serializer = CreateTopicSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
user = self.request.user
issue = Issue.objects.create(
topic = Topic.objects.create(
user=user,
title=serializer.data["title"],
)
if "link" in serializer.data:
link_object = Link.objects.create(link=serializer.data["link"])
IssueLinks.objects.create(link=link_object, issue=issue)
return Response(IssueSerializer(issue).data, status=status.HTTP_201_CREATED)
TopicLink.objects.create(link=link_object, topic=topic)
return Response(TopicSerializer(topic).data, status=status.HTTP_201_CREATED)


class IssueView(RetrieveUpdateDestroyAPIView):
class TopicView(RetrieveUpdateDestroyAPIView):
def get_permissions(self):
if self.request.method == "GET":
return AllowAny(),
Expand All @@ -52,23 +52,23 @@ def get_permissions(self):

def get_queryset(self):
if self.request.method == "GET":
return Issue.objects.filter(id=self.kwargs["pk"])
return Topic.objects.filter(id=self.kwargs["pk"])
else:
return Issue.objects.filter(id=self.kwargs["pk"], user=self.request.user)
return Topic.objects.filter(id=self.kwargs["pk"], user=self.request.user)

def get_serializer_class(self):
if self.request.method == "GET":
return IssueSerializer
return TopicSerializer
else:
return CreateIssueSerializer
return CreateTopicSerializer

def update(self, request, *args, **kwargs):
instance = self.get_object()
serializer = UpdateIssueSerializer(data=request.data)
serializer = UpdateTopicSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
if "title" in serializer.data:
instance.title = serializer.data["title"]
return Response(IssueSerializer(instance).data, status=status.HTTP_200_OK)
return Response(TopicSerializer(instance).data, status=status.HTTP_200_OK)


class CreateLinkView(CreateAPIView):
Expand All @@ -77,4 +77,4 @@ class CreateLinkView(CreateAPIView):

def perform_create(self, serializer):
serializer.save()
IssueLinks.objects.create(issue_id=self.kwargs["pk"], link_id=serializer.data["id"])
TopicLink.objects.create(topic_id=self.kwargs["pk"], link_id=serializer.data["id"])

0 comments on commit 98737a9

Please sign in to comment.