Пример #1
0
    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
Пример #2
0
    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"])
Пример #3
0
    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)
Пример #4
0
    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))