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_post_recovery(self): with self.app.app_context(), mail.record_messages() as outbox: user = UsersModel("test", "*****@*****.**") user.hash_password("test") user.save_to_db() res = self.client.post(f"/api/recovery", data={"email": user.email}) self.assertEqual(201, res.status_code) self.assertEqual(1, len(outbox)) self.assertEqual(user.json(), json.loads(res.data)["user"])
def test_get_user(self): with self.app.app_context(): user = UsersModel("test", "*****@*****.**") user.hash_password("test") user.save_to_db() res = self.client.get("/api/user/[email protected]") self.assertEqual(200, res.status_code) self.assertEqual(user.json(), json.loads(res.data)["user"]) res = self.client.get("/api/user/doesntexist") self.assertEqual(404, res.status_code)
def test_put_recovery(self): with self.app.app_context(): user = UsersModel("test", "test") user.hash_password("test") user.save_to_db() recovery = PasswordRecoveryModel(user.id) recovery.save_to_db() new_password = "******" res = self.client.put(f"/api/recovery/{recovery.key}", data={"new_password": new_password}) self.assertEqual(200, res.status_code) self.assertEqual(user.json(), json.loads(res.data)["user"]) self.assertTrue(user.check_password(new_password))