def test_set_password(self): user = User("testowy") user.set_password("test1") self.assertEqual( user.password, "$pbkdf2-sha256$29000$YWRtISM0MzI1NDI1RSBXZGFzOSBpLTBBUzBkb2FzIGozbmZqams7bGFrZHNhZA$Jf0E5RZyWhminjvla8XRPHuiD1XRuukd3dB.tCE58K0", )
def test_user_retrieved_passes_password_validation(self): user = User("testowy", "*****@*****.**") user.set_password("ocietrudnehaslo") repo = RedisUserRepository() user = run_sync(repo.save_user(user)) retrieved_user = run_sync(repo.get_user_by_username(user.username)) self.assertTrue(retrieved_user.check_password("ocietrudnehaslo"))
def test_user_retrieved_by_username(self): user = User("testowy", "*****@*****.**") repo = RedisUserRepository() user = run_sync(repo.save_user(user)) retrieved_user = run_sync(repo.get_user_by_username(user.username)) self.assertEqual(user.id, retrieved_user.id) self.assertEqual(user.username, retrieved_user.username) self.assertEqual(user.email, retrieved_user.email)
async def save_user(self, user: User) -> User: if not user.id: user.id = await self.redis.incr(self.user_id_key) await self.redis.set(self.user_storage.format(id=user.id), json.dumps(asdict(user))) await self.redis.hset(self.user_name_hash, user.username, user.id) # todo integrity post modification! return user
async def create_user(self, username: str, password: str, email: str): user = User(username=username, email=email) user.set_password(password) user = await self.user_repository.save_user(user) return user
def test_check_password(self): user = User("testowy") user.set_password("test1") self.assertTrue(user.check_password("test1"))
def test_user_saved_with_id(self): user = User("testowy", "*****@*****.**") repo = RedisUserRepository() user = run_sync(repo.save_user(user)) self.assertIsNotNone(user.id)
def test_user_not_found_by_username(self): user = User("testowy", "*****@*****.**") repo = RedisUserRepository() run_sync(repo.save_user(user)) retrieved_user = run_sync(repo.get_user_by_username("xd")) self.assertIsNone(retrieved_user)
async def get_user_by_id(self, user_id: int) -> Optional[User]: user_raw_data = await self.redis.get( self.user_storage.format(id=user_id)) if not user_raw_data: return None return User(**json.loads(user_raw_data))