Продолжение работы над Crypto
This commit is contained in:
@@ -79,3 +79,41 @@ class CryptoTests(CoreTestCase):
|
|||||||
pin_code_1 = Crypto.gen_pin_code()
|
pin_code_1 = Crypto.gen_pin_code()
|
||||||
pin_code_2 = Crypto.gen_pin_code()
|
pin_code_2 = Crypto.gen_pin_code()
|
||||||
self.assertNotEqual(pin_code_1, pin_code_2)
|
self.assertNotEqual(pin_code_1, pin_code_2)
|
||||||
|
|
||||||
|
def test_gen_slug(self):
|
||||||
|
"""
|
||||||
|
Тест генерации slug
|
||||||
|
"""
|
||||||
|
|
||||||
|
pfx = 'test'
|
||||||
|
slug = Crypto.gen_slug(pfx)
|
||||||
|
self.assertEqual(len(slug), Crypto.DEFAULT_SLUG_LENGTH)
|
||||||
|
self.assertEqual(slug[:len(pfx)], pfx)
|
||||||
|
self.assertLowerHex(slug[len(pfx):])
|
||||||
|
|
||||||
|
def test_gen_slug_length(self):
|
||||||
|
"""
|
||||||
|
Тест генерации slug с указанием длины
|
||||||
|
"""
|
||||||
|
|
||||||
|
pfx = 'test'
|
||||||
|
slug = Crypto.gen_slug(pfx, length=16)
|
||||||
|
self.assertEqual(len(slug), 16)
|
||||||
|
|
||||||
|
def test_gen_slug_prefix(self):
|
||||||
|
"""
|
||||||
|
Тест генерации slug с длинным префиксом
|
||||||
|
"""
|
||||||
|
|
||||||
|
pfx = 'test_test_test'
|
||||||
|
slug = Crypto.gen_slug(pfx)
|
||||||
|
self.assertEqual(slug, pfx)
|
||||||
|
|
||||||
|
def test_slug_different(self):
|
||||||
|
"""
|
||||||
|
Тест генерации разных slug
|
||||||
|
"""
|
||||||
|
|
||||||
|
slug_1 = Crypto.gen_slug('test')
|
||||||
|
slug_2 = Crypto.gen_slug('test')
|
||||||
|
self.assertNotEqual(slug_1, slug_2)
|
||||||
|
|||||||
@@ -25,6 +25,9 @@ class Crypto:
|
|||||||
DEFAULT_PIN_CODE_ALPHABET = "0123456789"
|
DEFAULT_PIN_CODE_ALPHABET = "0123456789"
|
||||||
""" Алфавит PIN-кода по умолчанию """
|
""" Алфавит PIN-кода по умолчанию """
|
||||||
|
|
||||||
|
DEFAULT_SLUG_LENGTH = 8
|
||||||
|
""" Длина slug по умолчанию """
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def gen_token(cls, length: int = DEFAULT_TOKEN_LENGTH) -> str:
|
def gen_token(cls, length: int = DEFAULT_TOKEN_LENGTH) -> str:
|
||||||
"""
|
"""
|
||||||
@@ -49,3 +52,19 @@ class Crypto:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
return "".join(secrets.choice(alphabet) for _ in range(length))
|
return "".join(secrets.choice(alphabet) for _ in range(length))
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def gen_slug(cls, prefix: str, length: int = DEFAULT_SLUG_LENGTH):
|
||||||
|
"""
|
||||||
|
Генерирует случайный slug
|
||||||
|
|
||||||
|
:param prefix: Префикс slug
|
||||||
|
:param length: Длина slug
|
||||||
|
:return: Сгенерированный slug
|
||||||
|
"""
|
||||||
|
|
||||||
|
l = length - len(prefix)
|
||||||
|
if l <= 0:
|
||||||
|
return prefix
|
||||||
|
|
||||||
|
return prefix + cls.gen_token(l)
|
||||||
|
|||||||
Reference in New Issue
Block a user