def put(self, product_id: int): """ Actualiza los detalles de un producto si pertenece al vendedor. """ product = ProductModel.find_by_id(product_id) if not product: return {"message": f"El producto con ID {product_id!r} no ha sido encontrado."}, 404 if product.user_id != current_identity.id or current_identity.user_type != user_types['vendor']: return {"message": "No tiene permitido modificar este producto."}, 401 data = Product.parser.parse_args() if imgurlRegex.match(data['image']) is None: return {"message": "La imagen debe ser una URL."}, 400 product.category_id = data['category_id'] product.name = data['name'] product.description = data['description'] product.price = data['price'] product.image = data['image'] product.visible = data['visible'] product.save_to_db() return product.json()
def post(self): """ Agregar un nuevo producto a la base de datos. Permitir solo para vendedores. """ if current_identity.user_type != user_types['vendor']: return {"message": "Se requiere ser vendedor para agregar productos."}, 401 data = ProductList.parser.parse_args() if not CategoryModel.find_by_id(data['category_id']): return {"message": f"La categoría con ID {data['category_id']!r} no ha sido encontrada."}, 404 if imgurlRegex.match(data['image']) is None: return {"message": "La imagen debe ser un enlace de una imagen."}, 400 new_product = ProductModel(current_identity.id, **data) new_product.save_to_db() return new_product.json(), 201
def put(self, user_id: int): """ Actualiza la imagen del perfil (debe ser una URL). """ if current_identity.id != user_id: return { "message": "No tiene permitido modificar la imagen de perfil de la cuenta." }, 401 data = UserPicture.parser.parse_args() user = UserModel.find_by_id(user_id) if data['picture'] is not None and imgurlRegex.match( data['picture']) is None: return { "message": "Se debe proporcionar un enlace de una imagen o null." }, 400 user.picture = data['picture'] user.save_to_db() return user.json()
def test_dominio_con_espacios(self): """El dominio de la imagen tiene espacios.""" self.assertIsNone( imgurlRegex.match('https://sitio no valido.com/imagen.png'))
def test_no_imagen(self): """El archivo no es de tipo imagen.""" self.assertIsNone(imgurlRegex.match('https://sitio.com/archivo.txt'))
def test_imagen_folder2(self): """Imagen dentro de varios directorios.""" self.assertIsNotNone( imgurlRegex.match('https://sitio.com/dir1/dir2/imagen.jpg'))
def test_imagen_folder(self): """Imagen dentro de un directorio en sitio web.""" self.assertIsNotNone( imgurlRegex.match('https://sitio.com/dir1/imagen.jpg'))
def test_imagen_raiz(self): """Imagen en la raíz de un sitio web.""" self.assertIsNotNone(imgurlRegex.match('https://sitio.com/imagen.jpg'))
def test_nombre_imagen_invalido(self): """El nombre de la imagen tiene caracteres inválidos.""" self.assertIsNone(imgurlRegex.match('https://sitio.com/"imagen.png"'))