From 2a9edd990f102b292ef4fb59c0688f6ed5ab56f5 Mon Sep 17 00:00:00 2001 From: Chung Kang Wang Date: Thu, 7 May 2015 00:56:11 -0400 Subject: [PATCH] Flashcard detail view --- flashcards/serializers.py | 10 +++++++++- flashcards/tests.py | 3 --- flashcards/tests/test_api.py | 24 +++++++++++++++++++++++- flashcards/views.py | 13 +++++++++++-- flashy/urls.py | 6 ++++-- 5 files changed, 47 insertions(+), 9 deletions(-) delete mode 100644 flashcards/tests.py diff --git a/flashcards/serializers.py b/flashcards/serializers.py index c729f03..b843583 100644 --- a/flashcards/serializers.py +++ b/flashcards/serializers.py @@ -1,4 +1,4 @@ -from flashcards.models import Section, LecturePeriod, User +from flashcards.models import Section, LecturePeriod, User, Flashcard from rest_framework import serializers from rest_framework.fields import EmailField, BooleanField, CharField, IntegerField from rest_framework.relations import HyperlinkedRelatedField @@ -78,3 +78,11 @@ class UserSerializer(HyperlinkedModelSerializer): class Meta: model = User fields = ("sections", "email", "is_confirmed", "last_login", "date_joined") + +class FlashcardSerializer(HyperlinkedModelSerializer): + + class Meta: + model = Flashcard + exclude = 'author', 'mask', + + diff --git a/flashcards/tests.py b/flashcards/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/flashcards/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/flashcards/tests/test_api.py b/flashcards/tests/test_api.py index fbf925d..eff6708 100644 --- a/flashcards/tests/test_api.py +++ b/flashcards/tests/test_api.py @@ -1,8 +1,9 @@ from django.core import mail -from flashcards.models import User +from flashcards.models import User, Section, Flashcard from rest_framework.status import HTTP_204_NO_CONTENT, HTTP_201_CREATED, HTTP_200_OK, HTTP_401_UNAUTHORIZED from rest_framework.test import APITestCase from re import search +from django.utils.timezone import now class LoginTests(APITestCase): @@ -186,3 +187,24 @@ class DeleteUserTest(APITestCase): self.client.delete(url) self.assertFalse(User.objects.filter(email='none@none.com').exists()) + +class FlashcardDetailTest(APITestCase): + def setUp(self): + section = Section( department="cse", course_num="5", \ + course_title="cool course", \ + instructor="gary", quarter="fa15") + section.save() + + user = User.objects.create_user( email="jacob@aaa.com", \ + password="top_secret" ) + user.save() + + self.flashcard = Flashcard( text="jason", section=section, \ + material_date=now(), author=user ) + self.flashcard.save() + + def test_get_flashcard(self): + + response = self.client.get("/api/flashcards/%d"%self.flashcard.id, format="json") + self.assertEqual(response.status_code, HTTP_200_OK) + self.assertEqual(response.data["text"], "jason") diff --git a/flashcards/views.py b/flashcards/views.py index 255161d..c23c487 100644 --- a/flashcards/views.py +++ b/flashcards/views.py @@ -1,7 +1,7 @@ from flashcards.api import StandardResultsSetPagination -from flashcards.models import Section, User +from flashcards.models import Section, User, Flashcard from flashcards.serializers import SectionSerializer, UserUpdateSerializer, RegistrationSerializer, UserSerializer, \ - PasswordResetSerializer, PasswordResetRequestSerializer, EmailPasswordSerializer + PasswordResetSerializer, PasswordResetRequestSerializer, EmailPasswordSerializer, FlashcardSerializer from rest_framework.permissions import IsAuthenticated from rest_framework.viewsets import ReadOnlyModelViewSet, ModelViewSet from django.core.mail import send_mail @@ -10,6 +10,7 @@ from django.contrib.auth.tokens import default_token_generator from rest_framework.status import HTTP_204_NO_CONTENT, HTTP_401_UNAUTHORIZED, HTTP_201_CREATED from rest_framework.views import APIView from rest_framework.response import Response +from rest_framework.generics import RetrieveAPIView from rest_framework.exceptions import AuthenticationFailed, NotAuthenticated, ValidationError from simple_email_confirmation import EmailAddress from rest_framework import filters @@ -182,3 +183,11 @@ class PasswordReset(APIView): else: raise ValidationError('Could not verify reset token') return Response(status=HTTP_204_NO_CONTENT) + +class FlashcardDetail(RetrieveAPIView): + queryset = Flashcard.objects.all() + serializer_class = FlashcardSerializer +## def get(self, request): + + + diff --git a/flashy/urls.py b/flashy/urls.py index 6b42a4b..ccebb82 100644 --- a/flashy/urls.py +++ b/flashy/urls.py @@ -1,6 +1,6 @@ from django.conf.urls import include, url from django.contrib import admin -from flashcards.views import SectionViewSet, UserDetail, UserLogin, UserLogout, PasswordReset, UserSectionViewSet +from flashcards.views import SectionViewSet, UserDetail, UserLogin, UserLogout, PasswordReset, UserSectionViewSet, FlashcardDetail from rest_framework.routers import DefaultRouter from flashcards.api import * @@ -19,7 +19,9 @@ urlpatterns = [ url(r'^admin/doc/', include('django.contrib.admindocs.urls')), url(r'^admin/', include(admin.site.urls)), url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework' -)) +)), + url(r'^api/flashcards/(?P[0-9]+)$', FlashcardDetail.as_view(), name \ + ="flashcard-detail"), ] urlpatterns += (url(r'^admin/django-ses/', include('django_ses.urls')),) -- 1.9.1