You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
5.2 KiB
Python
149 lines
5.2 KiB
Python
2 years ago
|
from __future__ import unicode_literals
|
||
|
|
||
|
from unittest import TestCase as LightTestCase
|
||
|
from datetime import timedelta
|
||
|
|
||
|
from django.test import TestCase
|
||
|
from django.contrib.auth import get_user_model
|
||
|
from django.utils.timezone import now as tznow
|
||
|
|
||
|
from nano.activation.models import activate, Key, ActivationKeyError
|
||
|
from nano.activation import to_base, NUMERALS, generate_keys, baseNgenerator
|
||
|
|
||
|
class KeyTest(TestCase):
|
||
|
|
||
|
def setUp(self):
|
||
|
User = get_user_model()
|
||
|
self.user = User.objects.create(username='test')
|
||
|
|
||
|
def test_str(self):
|
||
|
item = Key.objects.create(key='test')
|
||
|
pub_date = item.pub_date
|
||
|
expected = "test (None) %s %s" % (pub_date, '')
|
||
|
self.assertEqual(str(item), expected)
|
||
|
|
||
|
def test_activate_method(self):
|
||
|
item = Key.objects.create(key='test')
|
||
|
item.activate(self.user)
|
||
|
self.assertIsNotNone(item.activated)
|
||
|
|
||
|
def test_activate_method_already_activated(self):
|
||
|
item = Key.objects.create(key='test')
|
||
|
item.activate(self.user)
|
||
|
with self.assertRaises(ActivationKeyError) as error:
|
||
|
item.activate(self.user)
|
||
|
self.assertEqual(error, 'Key has already been activated')
|
||
|
|
||
|
def test_activate_function(self):
|
||
|
with self.assertRaises(ActivationKeyError) as error:
|
||
|
activate('foo', self.user)
|
||
|
self.assertEqual(error, 'Key foo does not exist, typo?')
|
||
|
item = Key.objects.create(key='bar')
|
||
|
item = activate(item.key, self.user)
|
||
|
self.assertIsNotNone(item.activated)
|
||
|
|
||
|
def test_activate_expired_key(self):
|
||
|
now = tznow()
|
||
|
item = Key(key='test', expires=now)
|
||
|
with self.assertRaises(ActivationKeyError) as error:
|
||
|
item.activate(self.user)
|
||
|
self.assertEqual(error, 'Key expired on %s' % item.expires)
|
||
|
|
||
|
class KeyManagerTest(TestCase):
|
||
|
|
||
|
def setUp(self):
|
||
|
User = get_user_model()
|
||
|
self.user = User.objects.create(username='test')
|
||
|
self.keys = []
|
||
|
for i in range(10):
|
||
|
key = Key.objects.create(key=str(i))
|
||
|
self.keys.append(key)
|
||
|
|
||
|
def test_get_all_keys(self):
|
||
|
result1 = Key.objects.order_by('id')
|
||
|
self.assertEqual(self.keys, list(result1))
|
||
|
result2 = Key.objects.available().order_by('id')
|
||
|
self.assertEqual(self.keys, list(result2))
|
||
|
self.assertEqual(list(result1), list(result2))
|
||
|
|
||
|
def test_get_expired_keys(self):
|
||
|
now = tznow() - timedelta(days=1)
|
||
|
for key in self.keys[5:]:
|
||
|
key.expires = now
|
||
|
key.save()
|
||
|
self.assertEqual(
|
||
|
list(Key.objects.expired().order_by('id')),
|
||
|
self.keys[5:]
|
||
|
)
|
||
|
self.assertEqual(
|
||
|
list(Key.objects.available().order_by('id')),
|
||
|
self.keys[:5]
|
||
|
)
|
||
|
|
||
|
def test_get_activated_keys(self):
|
||
|
now = tznow()
|
||
|
for key in self.keys[5:]:
|
||
|
key.activated = now
|
||
|
key.save()
|
||
|
self.assertEqual(
|
||
|
list(Key.objects.activated().order_by('id')),
|
||
|
self.keys[5:]
|
||
|
)
|
||
|
self.assertEqual(
|
||
|
list(Key.objects.available().order_by('id')),
|
||
|
self.keys[:5]
|
||
|
)
|
||
|
|
||
|
def test_activate_keys(self):
|
||
|
now = tznow() - timedelta(days=1)
|
||
|
for i in range(5):
|
||
|
Key.objects.activate(str(i), self.user)
|
||
|
self.assertEqual(
|
||
|
list(Key.objects.activated().order_by('id')),
|
||
|
self.keys[:5]
|
||
|
)
|
||
|
self.assertEqual(
|
||
|
list(Key.objects.available().order_by('id')),
|
||
|
self.keys[5:]
|
||
|
)
|
||
|
# Expired key
|
||
|
self.keys[-1].expires = now
|
||
|
self.keys[-1].save()
|
||
|
with self.assertRaises(ActivationKeyError) as error:
|
||
|
Key.objects.activate(self.keys[-1].key, self.user)
|
||
|
self.assertEqual(error, 'Key expired on %s' % now)
|
||
|
# Activated key
|
||
|
with self.assertRaises(ActivationKeyError) as error:
|
||
|
Key.objects.activate(self.keys[0].key, self.user)
|
||
|
self.assertEqual(error, 'Key has already been activated')
|
||
|
|
||
|
class FunctionTest(LightTestCase):
|
||
|
|
||
|
def test_to_base(self):
|
||
|
# must succeed
|
||
|
result, expected = to_base(0, 20), '0'
|
||
|
self.assertEqual(result, expected)
|
||
|
result, expected = to_base(7, 1), '1'*7
|
||
|
self.assertEqual(result, expected)
|
||
|
result, expected = to_base(7, 5), '12'
|
||
|
self.assertEqual(result, expected)
|
||
|
result, expected = to_base(-7, 5), '-12'
|
||
|
self.assertEqual(result, expected)
|
||
|
|
||
|
# must fail
|
||
|
with self.assertRaises(ValueError) as error:
|
||
|
maxbase = len(NUMERALS)
|
||
|
result, expected = to_base(7, maxbase+1)
|
||
|
self.assertEqual(error, "<base> must be in the range [1, %i>" % maxbase)
|
||
|
with self.assertRaises(ValueError) as error:
|
||
|
result, expected = to_base('q', 10)
|
||
|
self.assertEqual(error, 'invalid literal for int() with base 10: \'q\'')
|
||
|
with self.assertRaises(ValueError) as error:
|
||
|
result, expected = to_base(1, 'q')
|
||
|
self.assertEqual(error, 'invalid literal for int() with base 10: \'q\'')
|
||
|
|
||
|
def test_generate_keys(self):
|
||
|
amount = 10
|
||
|
result = generate_keys(baseNgenerator(), amount=amount)
|
||
|
self.assertEqual(amount, len(set(result)))
|