frlp-utn-ingsoft / orderingg

Aplicación utilizada en la cursada 2018 de Ingenieria de Software. UTN-FRLP
4 stars 20 forks source link

Consulta método PUT #50

Closed Zeriel closed 6 years ago

Zeriel commented 6 years ago

Buenas,

Tengo dudas respecto a mi ejercicio, me toco testear el funcionamiento del método PUT. No estaría entendiendo cómo indicar el valor de quantity a modificar por el mismo, y cuando ejecuto la prueba con el código actual, me arroja el siguiente error:

if request.method == 'PUT':

      new_quantity = request.get_json().get('quantity', False)

E AttributeError: 'NoneType' object has no attribute 'get'

Lo que yo tengo hasta el momento es:

def test_put_method(self):
    #Creo un producto y lo inseto a la db
    o = Order(id= 1)
    db.session.add(o)
    p = Product(id= 1, name= 'Tenedor', price= 50)
    db.session.add(p)
    orderProduct = OrderProduct(order_id= 1, product_id= 1, quantity= 1, product= p)
    db.session.add(orderProduct)
    db.session.commit()
    #Modifico la quantity del producto con un PUT

    resp = self.client.put('order/1/product/1')
    self.assert200(resp, "Fallo el PUT")

Saludos.

RodrigoJacznik commented 6 years ago

Le tenes que pasar el data

self.client.put(url, data=json.dumps(data), content_type='application/json')
Zeriel commented 6 years ago

Apliqué lo que sugeriste y me quedó el siguiente código:

def test_put_method(self):
    #Creo un producto y lo inseto a la db
    o = Order(id= 1)
    db.session.add(o)
    p = Product(id= 1, name= 'Tenedor', price= 50)
    db.session.add(p)
    orderProduct = OrderProduct(order_id= 1, product_id= 1, quantity= 1, product= p)
    db.session.add(orderProduct)
    db.session.commit()
    #Modifico la quantity del producto con un PUT
    data = {
        'name': 'Tenedor',
        'price': 50
    }
    resp = self.client.put('order/1/product/1', data=json.dumps(data), content_type='application/json')
    self.assert200(resp, "Fallo el PUT")

El cual, al ejecutar el pytest, me tira todo OK.

¿Estaría bien definido el test así? Me queda la duda de qué dato está metiendo el PUT ya que, hasta donde entiendo, el mismo sirve para modificar la quantity.

Gracias.

RodrigoJacznik commented 6 years ago

En el data tiene que ir la nueva quantity no los datos de un producto

Zeriel commented 6 years ago

Aaah ok, eso era lo que no me cerraba.

Entonces, el data para el PUT debería ser algo como esto:

data = { 'quantity': 5 }

RodrigoJacznik commented 6 years ago

Claro, así está bien

Zeriel commented 6 years ago

Joya, muchas gracias, cierro el issue entonces.