Skip to content

Instantly share code, notes, and snippets.

@dp-quant
Created April 4, 2019 10:30
Show Gist options
  • Select an option

  • Save dp-quant/278b1af273d0ef0b9066f01d095d57e3 to your computer and use it in GitHub Desktop.

Select an option

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', 'test@itoucan.com', 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': 'test_new@itoucan.com',
'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': 'test_new@itoucan.com',
'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': 'test_new@itoucan.com',
'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': 'test@itoucan.com',
'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