def test_add(self): with self.app.app_context(): to_add = UsersModel('test', '*****@*****.**') to_add.hash_password('password') UsersModel.save_to_db(to_add) self.assertEqual( UsersModel.find_by_username('test').username, to_add.username)
def post(self): data = parse_user() check_constraints_user(data) with lock: user = UsersModel.find_by_username(data["username"]) if user: return { "message": f"An user with same username {data['username']} already exists" }, 409 user = UsersModel.find_by_email(data["email"]) if user: return { "message": f"An user with same email {data['email']} already exists" }, 409 password = data.pop("password") try: user = UsersModel(**data) user.hash_password(password) user.save_to_db() verify = VerifyModel(user.id) verify.save_to_db() verify.send_email(user.email, request.url_root) except Exception as e: return {"message": str(e)}, 500 return user.json(), 201
def test_delete_but_keep(self): with self.app.app_context(): to_add = UsersModel('test', '*****@*****.**') to_add.hash_password('password') UsersModel.save_to_db(to_add) UsersModel.delete_from_db(UsersModel.find_by_username('test')) keeps = len( UsersModel.query.filter_by(username='******', state=False).all()) self.assertNotEqual(keeps, 0)
def test_post_user_invalid_syntax(self): # Same checks will be done in the put of users with self.app.app_context(): # Username length less than 4 data = {"username": "******", "email": "*****@*****.**", "password": "******"} res = self.client.post("/api/user", data=data) self.assertEqual(400, res.status_code) self.assertIsNone(UsersModel.find_by_username(data["username"])) # email without @ data = {"username": "******", "email": "testemail.com", "password": "******"} res = self.client.post("/api/user", data=data) self.assertEqual(400, res.status_code) self.assertIsNone(UsersModel.find_by_username(data["username"])) # email without . data = {"username": "******", "email": "test@emailcom", "password": "******"} res = self.client.post("/api/user", data=data) self.assertEqual(400, res.status_code) self.assertIsNone(UsersModel.find_by_username(data["username"])) # email with invalid characters data = {"username": "******", "email": "test/()@email.com", "password": "******"} res = self.client.post("/api/user", data=data) self.assertEqual(400, res.status_code) self.assertIsNone(UsersModel.find_by_username(data["username"])) # email with ending to short data = {"username": "******", "email": "[email protected]", "password": "******"} res = self.client.post("/api/user", data=data) self.assertEqual(400, res.status_code) self.assertIsNone(UsersModel.find_by_username(data["username"])) # Password too short data = {"username": "******", "email": "test2@emailcom", "password": "******"} res = self.client.post("/api/user", data=data) self.assertEqual(400, res.status_code) self.assertIsNone(UsersModel.find_by_username(data["username"])) # Password without uppercase data = {"username": "******", "email": "test2@emailcom", "password": "******"} res = self.client.post("/api/user", data=data) self.assertEqual(400, res.status_code) self.assertIsNone(UsersModel.find_by_username(data["username"])) # Password without numbers data = {"username": "******", "email": "test2@emailcom", "password": "******"} res = self.client.post("/api/user", data=data) self.assertEqual(400, res.status_code) self.assertIsNone(UsersModel.find_by_username(data["username"]))
def test_modify_password(self): with self.app.app_context(): self.basic_setup() data_new = {'new_password': '******', 'password': '******'} res = self.client.put( f"/api/user/{self.user.email}", data=data_new, headers={ "Authorization": 'Basic ' + base64.b64encode( (self.token + ":").encode('ascii')).decode('ascii') }) self.assertEqual(200, res.status_code) self.assertTrue( UsersModel.find_by_username('test123').check_password( data_new['new_password']))
def test_post_user(self): with self.app.app_context(): res = self.client.post("/api/user", data={ "username": "******", "email": "*****@*****.**", "password": "******" }) self.assertEqual(201, res.status_code) self.assertEqual( UsersModel.find_by_username("test2").json(), json.loads(res.data)) res = self.client.post("/api/user", data={ "username": "******", "email": "*****@*****.**", "password": "******" }) self.assertEqual(409, res.status_code)
def put(self, email): data = parse_modify_user() check_constraints_user(data) with lock: user = UsersModel.find_by_email(email) if not user: return { "message": f"User with ['email':{email}] not found" }, 404 password = data.pop('password') if not user.check_password(password): return { 'message': "Contrasenya incorrecta, torna a provar" }, 401 if UsersModel.find_by_email(data['email']) is not None: return { "message": f"An user with same email {data['email']} already exists" }, 409 if UsersModel.find_by_username(data['username']) is not None: return { "message": f"An user with same username {data['username']} already exists" }, 409 new_password = data.pop('new_password') try: if new_password is not None: user.hash_password(new_password) user.update_from_db(data) except Exception as e: return {"message": str(e)}, 500 return { "user": user.json(), "token": user.generate_auth_token().decode('ascii') }, 200