예제 #1
0
 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)
예제 #2
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
예제 #3
0
    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)
예제 #4
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"]))
예제 #5
0
    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']))
예제 #6
0
    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)
예제 #7
0
    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