Skip to content

Instantly share code, notes, and snippets.

@dp-quant
Created April 4, 2019 10:30
Show Gist options
  • Save dp-quant/278b1af273d0ef0b9066f01d095d57e3 to your computer and use it in GitHub Desktop.
Save dp-quant/278b1af273d0ef0b9066f01d095d57e3 to your computer and use it in GitHub Desktop.
import datetime
from django.conf import settings
from django.apps import apps
from django.test import TestCase, mock
from django.core.urlresolvers import reverse
import random
from rest_framework.test import APIRequestFactory
from ..serializers import AccountStatusesSerializer, CreateAccountSerializer, UpdateAccountSerializer,\
RetrieveAccountSerializer
from ..constants import STATUS_CHOICES
class AccountSerilizerTestCase(TestCase):
TEST_NOW = datetime.datetime(2018, 9, 3, 11, 15, 0)
@mock.patch('django.utils.timezone.now', return_value=TEST_NOW)
def setUp(self, mock_now):
self.old_password = '4$sdf!2412dSDf123DF'
self.account_cls = apps.get_model(settings.AUTH_USER_MODEL)
self.account = self.account_cls.objects.create_user('test', '[email protected]', self.old_password)
def test_statuses(self):
serializer = AccountStatusesSerializer()
self.assertEqual(len(serializer.data), len(STATUS_CHOICES))
self.assertEqual(set(serializer.data.keys()), set(dict(STATUS_CHOICES).keys()))
@mock.patch('accounts.models.AccountVerificationRecord.send_verification', return_value=None)
def test_account_create_serializer(self, mock_send_verification):
new_account_data = {
'email': '[email protected]',
'username': 'tester',
'password': '@3245SDF24xsf#f'
}
serializer = CreateAccountSerializer(data=new_account_data)
self.assertTrue(serializer.is_valid())
serializer.save()
self.assertNotEqual(serializer.instance, self.account)
latest_account = self.account_cls.objects.all().last()
self.assertEqual(serializer.instance, latest_account)
@mock.patch('accounts.models.AccountVerificationRecord.send_verification', return_value=None)
def test_account_create_with_pwned_password_serializer(self, mock_send_verification):
new_account_data = {
'email': '[email protected]',
'username': 'tester',
'password': '123456789'
}
serializer = CreateAccountSerializer(data=new_account_data)
self.assertFalse(serializer.is_valid())
@mock.patch('accounts.serializers.CreateAccountSerializer.create')
def test_account_creation_called(self, mock_serializer_create):
new_account_data = {
'email': '[email protected]',
'username': 'tester',
'password': 'Sdf123$%sdfd^sdsdfD'
}
serializer = CreateAccountSerializer(data=new_account_data)
self.assertTrue(serializer.is_valid())
serializer.save()
self.assertTrue(mock_serializer_create.called)
@mock.patch('accounts.serializers.UpdateAccountSerializer.update')
def test_account_update_serializer(self, mock_serializer_update):
changed_data = {
'password': 'SDF2134DSfSdSFs%%',
'username': self.account.username + str(random.random())[:5]
}
serializer = UpdateAccountSerializer(self.account, data=changed_data)
self.assertFalse(serializer.is_valid())
self.assertEqual(set(serializer.errors), {'old_password'})
changed_data['old_password'] = self.old_password
serializer = UpdateAccountSerializer(self.account, data=changed_data)
self.assertTrue(serializer.is_valid())
serializer.save()
self.assertTrue(mock_serializer_update.called)
@mock.patch('django.utils.timezone.now', return_value=TEST_NOW)
def test_account_retrieve_serializer(self, mock_now):
request = APIRequestFactory().get('./accounts')
serializer = RetrieveAccountSerializer(self.account, context={'request': request})
expected_data = {
'id': self.account.pk,
'url': 'http://testserver/accounts/account/{}/'.format(self.account.pk),
'created_at': mock_now.return_value.isoformat(),
'status': STATUS_CHOICES.active,
'profile_creation_url': 'http://testserver{}'.format(reverse('profile-list')),
'profile': None,
'is_verified': False,
'is_admin': False,
'email': '[email protected]',
'username': 'test'
}
self.assertIsNotNone(serializer.data)
self.assertEqual(dict(serializer.data), expected_data)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment