Skip to content

Commit

Permalink
Merge pull request #10 from PazBazak/f-branch
Browse files Browse the repository at this point in the history
F branch
  • Loading branch information
PazBazak authored Dec 9, 2020
2 parents c8cbf01 + 63df72b commit 7b08316
Show file tree
Hide file tree
Showing 7 changed files with 144 additions and 5 deletions.
Binary file modified HeroloDjango/__pycache__/settings.cpython-38.pyc
Binary file not shown.
15 changes: 14 additions & 1 deletion api/consts.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@


DATE_FORMAT = "%a %B %d, %Y"
JSON = 'json'


# endregion
Expand Down Expand Up @@ -36,7 +37,7 @@
ALL_FIELDS = '__all__'
ID_FIELD = 'id'
USERNAME_FIELD = 'username'
MESSAGES_FIELD = 'messages'
MESSAGES_FIELD = 'message'
PASSWORD_FIELD = 'password'
SENDER_FIELD = 'sender'
RECEIVER_FIELD = 'receiver'
Expand All @@ -58,3 +59,15 @@


# endregion


# region tests


API_PATH = '/api/'

REGISTER_PATH = API_PATH + 'users/register/'


# endregion

3 changes: 3 additions & 0 deletions api/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ def __str__(self):

@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
"""
Django signal to create a token each time a user model is created.
"""
if created:
Token.objects.create(user=instance)

Expand Down
7 changes: 6 additions & 1 deletion api/serializers/message_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
from api.consts import *
from api.models import Message
from api.serializers.user_serializers import UserMessageDisplaySerializer
from api.user import CustomUser


class MessageCreateSerializer(serializers.ModelSerializer):
Expand All @@ -22,6 +21,9 @@ class Meta:
creation_data = serializers.SerializerMethodField()

def get_creation_data(self, obj):
"""
Used in order to format the date when displaying!
"""
return obj.creation_data.strftime(DATE_FORMAT)


Expand All @@ -36,5 +38,8 @@ class Meta:
creation_data = serializers.SerializerMethodField()

def get_creation_data(self, obj):
"""
Used in order to format the date when displaying!
"""
return obj.creation_data.strftime(DATE_FORMAT)

1 change: 0 additions & 1 deletion api/serializers/user_serializers.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from rest_framework import serializers
from api.consts import *
from api.models import Message
from api.user import CustomUser


Expand Down
116 changes: 115 additions & 1 deletion api/tests.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,117 @@
from django.test import TestCase
from rest_framework.test import APITestCase, APIClient
from .models import Message, CustomUser
from .consts import *
from api.serializers.message_serializers import MessageCreateSerializer, MessageFullDisplaySerializer
from rest_framework import status

# Create your tests here.
"""
Some basic tests
"""


# region model testing


class MessageModelTestCase(TestCase):

@classmethod
def setUpTestData(cls):
cls.sender = CustomUser.objects.create(username="SENDER")
cls.receiver = CustomUser.objects.create(username="RECEIVER")

cls.message = Message.objects.create(sender=cls.sender,
receiver=cls.receiver,
message='TEST MESSAGE',
subject='TEST SUBJECT')

def test_message_content(self):
self.assertEqual('TEST MESSAGE', self.message.message)

def test_subject(self):
self.assertEqual('TEST SUBJECT', self.message.subject)

def test_sender(self):
self.assertEqual(self.sender.pk, self.message.sender.pk)

def test_receiver(self):
self.assertEqual(self.receiver.pk, self.message.receiver.pk)

def test_is_read(self):
self.assertEqual(False, self.message.is_read)

def test_str(self):
self.assertEqual("SENDER to RECEIVER", str(self.message))


# endregion


# region serializer testing


class MessageSerializersTests(APITestCase):

@classmethod
def setUpTestData(cls):
cls.sender = CustomUser.objects.create(username="SENDER")
cls.receiver = CustomUser.objects.create(username="RECEIVER")

cls.message = Message.objects.create(sender=cls.sender,
receiver=cls.receiver,
message='TEST MESSAGE',
subject='TEST SUBJECT')

cls.message_data = {
SENDER_FIELD: str(cls.sender.pk),
RECEIVER_FIELD: str(cls.receiver.pk),
MESSAGES_FIELD: 'TEST MESSAGE',
SUBJECT_FIELD: 'TEST SUBJECT',
IS_READ_FIELD: False
}

def test_create_serializer(self):
create_serializer = MessageCreateSerializer(data=self.message_data)

self.assertTrue(create_serializer.is_valid())

def test_display_serializer(self):
display_serializer = MessageFullDisplaySerializer(self.message)

message_data = display_serializer.data

self.assertEqual('TEST MESSAGE', message_data[MESSAGES_FIELD])
self.assertEqual('TEST SUBJECT', message_data[SUBJECT_FIELD])
self.assertEqual(False, message_data[IS_READ_FIELD])
self.assertEqual('SENDER', message_data[SENDER_FIELD][USERNAME_FIELD])
self.assertEqual('RECEIVER', message_data[RECEIVER_FIELD][USERNAME_FIELD])


# endregion


# region view sets testing


class UserViewSetTests(APITestCase):

@classmethod
def setUpTestData(cls):
cls.client = APIClient()

def test_register(self):
user_data = {USERNAME_FIELD: 'NEW_USER', PASSWORD_FIELD: 'PASSWORD'}

response = self.client.post(REGISTER_PATH, user_data, format=JSON)

# Checks that got correct status
self.assertEqual(response.status_code, status.HTTP_201_CREATED)

# Checks the user created with the correct data
self.assertEqual(response.data[USERNAME_FIELD], 'NEW_USER')

# Checks that there's a token returned
self.assertTrue('token' in response.data)


# endregion
7 changes: 6 additions & 1 deletion api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
from rest_framework.permissions import AllowAny, IsAuthenticated
from rest_framework.authtoken.models import Token
from django.db.models import Q
from rest_framework.request import Request


# region utils
Expand Down Expand Up @@ -49,6 +48,9 @@ def get_serializer_class(self):
return MessageDisplaySerializer

def destroy(self, request, *args, **kwargs):
"""
When destroying a record, verifying the logged user is either the sender or receiver in order to do so!
"""
request_token = request.auth.key
sender = self.get_object().sender
receiver = self.get_object().receiver
Expand Down Expand Up @@ -132,6 +134,9 @@ def create(self, request, *args, **kwargs):

@action(detail=False, methods=[POST])
def register(self, request, *args, **kwargs):
"""
Creating a new user, overrides default create
"""
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
Expand Down

0 comments on commit 7b08316

Please sign in to comment.