Skip to content

Email generator fix and tests #38

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Aug 6, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/scripts/convert/email_generator/module.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ def run(self, *args, **kwargs) -> ScriptResponse.success or ScriptResponse.error
tm = time()
email_gen = EmailGenerator()
username = kwargs.get("username")
if username is None:
if not username:
raise KeyError("EmailGenerator can't work without username!")
result = email_gen.generate(username)
except Exception as err:
Expand Down
68 changes: 68 additions & 0 deletions src/scripts/convert/email_generator/test_module.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/usr/bin/env python3

from .module import Runner
from pathlib import Path
from re import match as re_match
from unittest import TestCase


def syntax_check(email: str) -> bool:
"""
function brought from verify-email library
:param email: email for check
:return: True if email is possible else false
"""
if re_match(r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)", email):
return True
return False


class TestEmailGenerator(TestCase):
def setUp(self) -> None:
"""
Setup Runner before each test function
:return: None
"""
self.runner = Runner()
with open(Path(__file__).parent.joinpath("settings/domain_base.txt"), "r") as f:
self.len_domain_base = len(f.read().splitlines())

def test_create_runner(self):
"""
Test creation of the class instance
:return: None
"""
self.assertIsNotNone(self.runner)
self.assertIsInstance(self.runner, Runner)

def test_invalid_usernames(self):
"""
Test failing on invalid usernames
:return: False
"""
self.assertEqual(self.runner.run(username="").get("status"), "error")
self.assertEqual(self.runner.run(username=None).get("status"), "error")

def test_divided_username(self):
"""
Test passing on valid username with dividers
:return: True
"""
result = self.runner.run(username="john.doe")
self.assertEqual(result.get("status"), "success")
self.assertIsNotNone(result.get("result"))
self.assertEqual(len(result.get("result")), 4 * 2 * self.len_domain_base)
# 4 - DefaultValues.binders ** (number-of-parts - 1)
# 2 - because we can divide and reverse login
self.assertTrue(all(map(syntax_check, result.get("result"))))

def test_inseparable_username(self):
"""
Test passing on valid username without dividers
:return: True
"""
result = self.runner.run(username="johndoe")
self.assertEqual(result.get("status"), "success")
self.assertIsNotNone(result.get("result"))
self.assertEqual(len(result.get("result")), self.len_domain_base)
self.assertTrue(all(map(syntax_check, result.get("result"))))