예제 #1
0
 def setUpClass(cls):
     """ This runs once before the entire test suite """
     app.config['TESTING'] = True
     app.config['DEBUG'] = False
     app.config["SQLALCHEMY_DATABASE_URI"] = DATABASE_URI
     app.logger.setLevel(logging.CRITICAL) # pylint: disable=maybe-no-member
     Order.init_db(app)
 def test_update_an_order_not_exists(self):
     """ Update a non-existing Order """
     order_item1 = OrderItem(product_id=1, quantity=1, price=5, status="PLACED")
     order_items = [order_item1]
     order = Order(id=1234567, customer_id=111, order_items=order_items)
     order.update()
     self.assertRaises(DataValidationError)
예제 #3
0
    def test_update_order_product(self):
        """" Update an orders product """
        orders = Order.all()
        self.assertEqual(orders, [])

        product = self._create_product()
        order = self._create_order(products=[product])
        order.create()
        # Assert that it was assigned an id and shows up in the database
        self.assertEqual(order.id, 1)
        orders = Order.all()
        self.assertEqual(len(orders), 1)

        # Fetch it back
        order = Order.find(order.id)
        old_product = order.products[0]
        self.assertEqual(old_product.price, product.price)

        old_product.price = 1
        order.save()

        # Fetch it back again
        order = Order.find(order.id)
        product = order.products[0]
        self.assertEqual(product.price, 1)
예제 #4
0
 def test_add_a_order(self):
     """ Create an order and add it to the database """
     orders = Order.all()
     self.assertEqual(orders, [])
     order = self._create_order()
     order.create()
     # Assert that it was assigned an id and shows up in the database
     self.assertEqual(order.id, 1)
     orders = Order.all()
     self.assertEqual(len(orders), 1)
예제 #5
0
 def test_deserialize_an_order(self):
     """ Deserialize an order """
     product = self._create_product()
     order = self._create_order(products=[product])
     serial_order = order.serialize()
     new_order = Order()
     new_order.deserialize(serial_order)
     self.assertEqual(new_order.id, order.id)
     self.assertEqual(new_order.name, order.name)
     self.assertEqual(new_order.status, order.status)
 def test_find_order(self):
     """ Find an Order by ID """
     order_items1 = [OrderItem(product_id=1, quantity=1, price=5, status="PLACED")]
     order1 = Order(customer_id=111, order_items=order_items1)
     order1.create()
     order = Order.find(order1.id)
     self.assertIsNot(order, None)
     self.assertEqual(order.id, order1.id)
     self.assertEqual(order.customer_id, 111)
     self.assertEqual(len(order.order_items), 1)
     self.assertEqual(order.order_items[0].product_id, 1)
예제 #7
0
def list_orders():
    """ Returns all of the Orders """
    app.logger.info("Request for orders list")  # pylint: disable=maybe-no-member
    orders = []
    name = request.args.get("name")
    if name:
        orders = Order.find_by_name(name)
    else:
        orders = Order.all()

    results = [order.serialize() for order in orders]
    return make_response(jsonify(results), status.HTTP_200_OK)
예제 #8
0
def delete_all_orders():
    """ Returns IDs of the Orders """
    app.logger.info("Request for Order list")
    orders = []
    id = request.args.get("id")
    if id:
        orders = Order.find(id)
    else:
        orders = Order.all()

    results = [order.delete() for order in orders]
    return make_response("", status.HTTP_204_NO_CONTENT)
예제 #9
0
 def test_update_order(self):
     """ Update an order """
     order = self._create_order()
     order.create()
     # Assert that it was assigned an id and shows up in the database
     self.assertEqual(order.id, 1)
     # Fetch it back
     order = Order.find(order.id)
     order.status = "Cancelled"
     order.save()
     # Fetch it back again
     order = Order.find(order.id)
     self.assertEqual(order.status, "Cancelled")
예제 #10
0
 def test_delete_an_order(self):
     """ Delete an order from the database """
     orders = Order.all()
     self.assertEqual(orders, [])
     order = self._create_order()
     order.create()
     # Assert that it was assigned an id and shows up in the database
     self.assertEqual(order.id, 1)
     orders = Order.all()
     self.assertEqual(len(orders), 1)
     order = orders[0]
     order.delete()
     orders = Order.all()
     self.assertEqual(len(orders), 0)
 def test_create_order(self):
     """ Create an order with a single item in the database """
     order_item = OrderItem(product_id=1, quantity=1, price=5, status="PLACED")
     order_items = [order_item]
     order = Order(customer_id=123, order_items=order_items)
     self.assertTrue(order is not None)
     self.assertEqual(order.id, None)
     self.assertEqual(len(order.order_items), 1)
     self.assertEqual(order.order_items[0].item_id, None)
     order.create()
     self.assertEqual(order.id, 1)
     self.assertEqual(order.customer_id, 123)
     self.assertEqual(len(order.order_items), 1)
     self.assertEqual(order.order_items[0].item_id, 1)
     self.assertEqual(order.order_items[0].order_id, 1)
예제 #12
0
def list_all_orders():
    """ Returns all of the Orders """
    app.logger.info('Request for order list')
    orders = Order.all()

    results = [order.serialize() for order in orders]
    return make_response(jsonify(results), status.HTTP_200_OK)
 def test_create_order_with_multiple_items(self):
     """ Create an order with multiple order items """
     order_item1 = OrderItem(product_id=1, quantity=1, price=5, status="PLACED")
     order_item2 = OrderItem(product_id=2, quantity=1, price=5, status="PLACED")
     order_items = [order_item1, order_item2]
     order = Order(customer_id=123, order_items=order_items)
     order.create()
     self.assertTrue(order.id is not None)
     order_id = order.id
     self.assertEqual(order.customer_id, 123)
     self.assertEqual(len(order.order_items), 2)
     i = order.order_items[0].item_id
     for j in range(0, len(order.order_items)):
         self.assertEqual(order.order_items[j].item_id, i)
         self.assertEqual(order.order_items[j].order_id, order_id)
         i += 1
 def test_delete_an_order(self):
     """ Delete an Order """
     order_items1 = [OrderItem(product_id=1, quantity=1, price=5.0, status="PLACED")]
     order = Order(customer_id=111, order_items=order_items1)
     order.create()
     self.assertEqual(len(Order.all()), 1)
     # delete the order and make sure it isn't in the database
     order.delete()
     self.assertEqual(len(Order.all()), 0)
 def test_serialize_an_order(self):
     """ Serialization of an Order """
     date = datetime.now
     order_item = OrderItem(product_id=1, quantity=1, price=5, status="PLACED")
     order_item2 = OrderItem(product_id=2, quantity=1, price=5, status="PLACED")
     order_items = [order_item, order_item2]
     order = Order(customer_id=123, created_date=date, order_items=order_items)
     data = order.serialize()
     self.assertNotEqual(data, None)
     self.assertIn("id", data)
     self.assertEqual(data["id"], None)
     self.assertIn("customer_id", data)
     self.assertEqual(data["customer_id"], 123)
     self.assertIn("created_date", data)
     self.assertEqual(data["created_date"], date)
     self.assertIn("order_items", data)
     self.assertEqual(data["order_items"], [order_item.serialize(), order_item2.serialize()])
예제 #16
0
def get_orders(order_id):
    """
    Retrieve a single Order
    This endpoint will return an Order based on it's id
    """
    app.logger.info("Request for Order with id: %s", order_id)
    order = Order.find_or_404(order_id)
    return make_response(jsonify(order.serialize()), status.HTTP_200_OK)
예제 #17
0
 def test_create_an_order(self):
     """ Create a Order and assert that it exists """
     fake_order = OrderFactory()
     order = Order(name=fake_order.name, status=fake_order.status)
     self.assertTrue(order is not None)
     self.assertEqual(order.id, None)
     self.assertEqual(order.name, fake_order.name)
     self.assertEqual(order.status, fake_order.status)
 def test_init_order(self):
     """ Initialize an order and assert that it exists """
     order_items = [OrderItem(product_id=1, quantity=1, price=5, status="PLACED")]
     order = Order(customer_id=123, order_items=order_items)
     self.assertTrue(order is not None)
     self.assertEqual(order.id, None)
     self.assertEqual(order.customer_id, 123)
     self.assertEqual(len(order.order_items), 1)
예제 #19
0
def list_orders(product_id):
    """ Returns all of the Orders """
    app.logger.info('Request for order list')
    orders = []
    if product_id:
        orders = Order.find_by_product(product_id)

    results = [order.serialize() for order in orders]
    return make_response(jsonify(results), status.HTTP_200_OK)
예제 #20
0
    def test_find_by_name(self):
        """ Find by name """
        order = self._create_order()
        order.create()

        # Fetch it back by name
        same_order = Order.find_by_name(order.name)[0]
        self.assertEqual(same_order.id, order.id)
        self.assertEqual(same_order.name, order.name)
예제 #21
0
 def _create_order(self, products=[]):
     """ Creates an order from a Factory """
     fake_order = OrderFactory()
     order = Order(
         name=fake_order.name, status=fake_order.status, products=products
     )
     self.assertTrue(order is not None)
     self.assertEqual(order.id, None)
     return order
 def test_deserialize_an_order(self):
     """ Deserialization of an Order """
     data = {"customer_id": 123,
             "order_items": [
                 {"product_id": 1,
                  "quantity": 1,
                  "price": 5,
                  "status": "PLACED"}
             ]}
     order = Order()
     order.deserialize(data)
     self.assertNotEqual(order, None)
     self.assertEqual(order.id, None)
     self.assertEqual(order.customer_id, 123)
     self.assertEqual(order.created_date, None)
     self.assertEqual(len(order.order_items), 1)
     self.assertEqual(order.order_items[0].item_id, None)
     self.assertEqual(order.order_items[0].product_id, 1)
예제 #23
0
def delete_orders(order_id):
    """
    Delete an Order
    This endpoint will delete an Order based the id specified in the path
    """
    app.logger.info("Request to delete order with id: %s", order_id)  # pylint: disable=maybe-no-member
    order = Order.find(order_id)
    if order:
        order.delete()
    return make_response("", status.HTTP_204_NO_CONTENT)
예제 #24
0
    def test_find_or_404(self):
        """ Find or throw 404 error """
        order = self._create_order()
        order.create()
        # Assert that it was assigned an id and shows up in the database
        self.assertEqual(order.id, 1)

        # Fetch it back
        order = Order.find_or_404(order.id)
        self.assertEqual(order.id, 1)
예제 #25
0
 def delete(self, order_id):
     """
     Delete an Order
     This endpoint will delete an Order based the body that is posted
     """
     app.logger.info('Request to delete an order with id: %s', order_id)
     order = Order.find(order_id)
     if order:
         order.delete()
     return make_response('', status.HTTP_204_NO_CONTENT)
 def test_deserialize_bad_data_with_keys_missing(self):
     """ Deserialization of bad order data with few keys missing """
     data = {"order_items": [{
         "product_id": 1,
         "quantity": 1,
         "price": 5,
         "status": "PLACED"
     }]}
     order = Order()
     self.assertRaises(DataValidationError, order.deserialize, data)
예제 #27
0
 def test_deserialize_a_order(self):
     """ Test deserialization of an Order """
     data = {
         "uuid": "2edf8761-0c1f-4039-9f5c-907a5a03f39c",
         "product_id": 1,
         "customer_id": 1,
         "price": 10,
         "quantity": 1,
         "status": "In Progress"
     }
     order = Order()
     order.deserialize(data)
     self.assertNotEqual(order, None)
     self.assertEqual(order.id, None)
     self.assertEqual(order.uuid, "2edf8761-0c1f-4039-9f5c-907a5a03f39c"),
     self.assertEqual(order.product_id, 1),
     self.assertEqual(order.customer_id, 1),
     self.assertEqual(order.price, 10),
     self.assertEqual(order.quantity, 1)
예제 #28
0
 def test_delete_a_order(self):
     """ Delete an Order """
     uuid_str = str(uuid.uuid4())
     order = Order(uuid=uuid_str,
                   product_id=1,
                   customer_id=1,
                   price=10,
                   quantity=1)
     order.save()
     self.assertEqual(len(Order.all()), 1)
     # delete the order and make sure it isn't in the database
     order.delete()
     self.assertEqual(len(Order.all()), 0)
예제 #29
0
def get_orders(order_id):
    """
    Retrieve an order

    This endpoint will return an order based on it's id
    """
    app.logger.info('Request for an order with id: %s', order_id)
    order = Order.find(order_id)
    if not order:
        raise NotFound("Order with id '{}' was not found.".format(order_id))
    return make_response(jsonify(order.serialize()), status.HTTP_200_OK)
예제 #30
0
def delete_orders(order_id):
    """
    Delete an Order

    This endpoint will delete an Order based the id specified in the path
    """
    app.logger.info('Request to delete an order with id: %s', order_id)
    order = Order.find(order_id)
    if order:
        order.delete()
    return make_response('', status.HTTP_204_NO_CONTENT)