Skip to content

Instantly share code, notes, and snippets.

@dastanko
Created November 9, 2017 08:47
Show Gist options
  • Save dastanko/7cec95547a2ff5c6b9682eddaf7d9c3d to your computer and use it in GitHub Desktop.
Save dastanko/7cec95547a2ff5c6b9682eddaf7d9c3d to your computer and use it in GitHub Desktop.
tdd of bussiness logic
import unittest
class AlreadyRegisteredUserWithSuchEmailException(Exception):
pass
class RegisterUser(object):
def __init__(self, user_storage):
self.user_storage = user_storage
def register(self, data):
email = data['email']
self.user_storage.find_by_email(email)
class UserStorage(object):
def __init__(self):
self.user_list = []
def find_by_email(self, email):
iterator = filter(lambda x: x['email'] == email, self.user_list)
return list(iterator)
def save(self, user):
self.user_list.append(user)
class User(object):
def __init__(self):
self._password = None
self._email = None
self._name = None
self._username = None
@property
def username(self):
return self._username
@username.setter
def username(self, value):
self._username = value
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
@property
def email(self):
return self._email
@email.setter
def email(self, value):
self._email = value
@property
def password(self):
return self._password
@password.setter
def password(self, value):
self._password = value
class UserStorageTestCase(unittest.TestCase):
def setUp(self):
self.storage = UserStorage()
self.user = User()
self.user.username = 'dastanko'
self.user.name = 'Dastan Kozhomuratov'
self.user.email = 'dastan@ko.com'
self.user.password = 'password'
def test_save(self):
self.assertIsNone(self.storage.save(self.user))
class RegisterUserTestCase(unittest.TestCase):
def setUp(self):
self.data = {
'username': 'dastanko',
'name': 'Dastan Kozhomuratov',
'email': 'dastan@ko.com',
'password': 'password',
'password_confirmation': 'password'
}
self.storage = UserStorage()
self.usecase = RegisterUser(self.storage)
def test_register_user(self):
self.usecase.register(self.data)
def test_register_user_with_dublicate_email(self):
self.usecase.register(self.data)
with self.assertRaises(AlreadyRegisteredUserWithSuchEmailException) as ex:
self.usecase.register(self.data)
self.assertEqual(AlreadyRegisteredUserWithSuchEmailException, ex)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment