Beispiel #1
0
 def test_finish_order_with_unfinished_products(self):
     gen_id = f'{__name__}-{int(datetime.now().timestamp())}'
     self.try_add_entities([
         Product(id='0001', name='Product 1', price=10, weight=10),
         Product(id='0002', name='Product 2', price=10, weight=10),
         Product(id='0003', name='Product 3', price=10, weight=10),
         Order(id=gen_id)
     ])
     self.try_add_entities([
         Suborder(id=gen_id, order_id=gen_id),
         OrderProduct(suborder_id=gen_id,
                      product_id='0001',
                      quantity=1,
                      status=OrderProductStatus.pending),
         OrderProduct(suborder_id=gen_id,
                      product_id='0002',
                      quantity=1,
                      status=OrderProductStatus.pending),
         OrderProduct(suborder_id=gen_id,
                      product_id='0003',
                      quantity=1,
                      status=OrderProductStatus.pending)
     ])
     res = self.try_admin_operation(lambda: self.client.post(
         f'/api/v1/admin/order/{gen_id}', json={'status': 'shipped'}))
     self.assertEqual(res.status_code, 409)
 def test_set_order_product_unavailable(self):
     gen_id = f'{__name__}-{int(datetime.now().timestamp())}'
     op_id = datetime.now().microsecond
     order = Order(id=gen_id, user=self.user)
     self.try_add_entities([
         Product(id='0000', name='Test product', price=10, weight=10),
         Product(id='0001', name='Test product 1', price=10, weight=10)
     ])
     self.try_add_entities([
         order,
         Suborder(id=op_id, order=order),
         OrderProduct(id=op_id,
                      suborder_id=op_id,
                      product_id='0000',
                      price=10,
                      quantity=10),
         OrderProduct(id=op_id + 1,
                      suborder_id=op_id,
                      product_id='0001',
                      price=10,
                      quantity=1)
     ])
     self.try_admin_operation(lambda: self.client.post(
         f'/api/v1/admin/order/product/{op_id + 1}/status/unavailable'))
     order = Order.query.get(gen_id)
     self.assertEqual(order.subtotal_krw, 2600)
Beispiel #3
0
 def test_get_order_product_status_history(self):
     gen_id = f'{__name__}-{int(datetime.now().timestamp())}'
     subcustomer = Subcustomer()
     order = Order(id=gen_id,
                   user_id=self.user.id,
                   status='pending',
                   country_id='c1',
                   tracking_id='T00',
                   tracking_url='https://tracking.fake/T00')
     suborder = Suborder(order=order, subcustomer=subcustomer)
     self.try_add_entities([
         order, subcustomer, suborder,
         OrderProduct(id=10,
                      suborder=suborder,
                      product_id='0000',
                      price=10,
                      quantity=10),
         OrderProductStatusEntry(order_product_id=10,
                                 user_id=self.admin.id,
                                 when_created=datetime(2020, 1, 1, 1, 0, 0),
                                 status=OrderProductStatus.pending)
     ])
     res = self.try_user_operation(
         lambda: self.client.get('/api/v1/order/product/10/status/history'))
     res = self.client.get('/api/v1/order/product/10/status/history')
     self.assertEqual(res.json, [{
         'when_created': '2020-01-01 01:00:00',
         'set_by': 'root_test_orders_api',
         'status': 'pending'
     }])
     res = self.client.get('/api/v1/order/product/30/status/history')
     self.assertEqual(res.status_code, 404)
Beispiel #4
0
 def test_create_purchase_order(self):
     gen_id = f'{__name__}-{int(datetime.now().timestamp())}'
     gen_int_id = int(datetime.now().timestamp())
     self.try_add_entities([
         Order(id=gen_id, user=self.user, status=OrderStatus.can_be_paid),
         Subcustomer(id=gen_int_id),
         Subcustomer(id=gen_int_id + 1),
         Suborder(id=gen_id, order_id=gen_id, subcustomer_id=gen_int_id),
         Suborder(id=gen_id + '1',
                  order_id=gen_id,
                  subcustomer_id=gen_int_id + 1),
         OrderProduct(suborder_id=gen_id, product_id='0000'),
         OrderProduct(suborder_id=gen_id + '1', product_id='0000'),
         Address(id=gen_int_id, zip='00000'),
         Company(id=gen_int_id, address_id=gen_int_id)
     ])
 def test_postpone_order_product(self):
     op_id = datetime.now().microsecond
     self.try_add_entities([
         Product(id='0000', name='Test product', price=10, weight=10),
         Product(id='0001', name='Test product 1', price=10, weight=10),
         Country(id='c1', name='country1'),
         Shipping(id=1, name='Shipping1'),
         PostponeShipping(),
         ShippingRate(shipping_method_id=1,
                      destination='c1',
                      weight=1000,
                      rate=100),
         ShippingRate(shipping_method_id=1,
                      destination='c1',
                      weight=10000,
                      rate=200),
     ])
     order1 = Order(user=self.user, shipping_method_id=1, country_id='c1')
     self.try_add_entity(order1)
     order2 = Order(user=self.user, shipping_method_id=1, country_id='c1')
     self.try_add_entity(order2)
     suborder = Suborder(order=order1, subcustomer=Subcustomer())
     suborder1 = Suborder(order=order2, subcustomer=Subcustomer())
     self.try_add_entities([
         OrderProduct(suborder=suborder, product_id='0000', quantity=1),
         OrderProduct(id=op_id,
                      suborder=suborder,
                      product_id='0001',
                      quantity=1),
         OrderProduct(id=op_id + 1,
                      suborder=suborder1,
                      product_id='0001',
                      quantity=1)
     ])
     res = self.try_user_operation(lambda: self.client.post(
         f'/api/v1/order/product/{op_id}/postpone'))
     self.assertEqual(res.status_code, 200)
     orders = Order.query.all()
     self.assertEqual(len(orders), 3)
     self.assertEqual(orders[0].total_krw, 2610)
     self.assertEqual(orders[2].total_krw, 2510)
     self.client.post(f'/api/v1/order/product/{op_id + 1}/postpone')
     orders = Order.query.all()
     self.assertEqual(len(orders), 3)
     self.assertEqual(orders[0].total_krw, 2610)
     self.assertEqual(orders[2].total_krw, 5020)
Beispiel #6
0
 def test_finish_order_with_unavailable_products(self):
     gen_id = f'{__name__}-{int(datetime.now().timestamp())}'
     self.try_add_entities([
         Product(id='0001',
                 name='Product 1',
                 price=10,
                 weight=10,
                 points=10),
         Product(id='0002',
                 name='Product 2',
                 price=10,
                 weight=10,
                 points=10),
         Product(id='0003',
                 name='Product 3',
                 price=10,
                 weight=10,
                 points=10),
         Order(id=gen_id,
               country_id='c1',
               shipping_method_id=1,
               user=self.user)
     ])
     self.try_add_entities([
         Suborder(id=gen_id, order_id=gen_id),
         OrderProduct(suborder_id=gen_id,
                      product_id='0001',
                      quantity=1,
                      status=OrderProductStatus.purchased),
         OrderProduct(suborder_id=gen_id,
                      product_id='0002',
                      quantity=1,
                      status=OrderProductStatus.purchased),
         OrderProduct(suborder_id=gen_id,
                      product_id='0003',
                      quantity=1,
                      status=OrderProductStatus.unavailable)
     ])
     res = self.try_admin_operation(lambda: self.client.post(
         f'/api/v1/admin/order/{gen_id}', json={'status': 'shipped'}))
     self.assertEqual(res.status_code, 200)
     order = Order.query.get(gen_id)
     self.assertEqual(order.total_krw, 2620)
     self.assertEqual(order.get_total_points(), 20)
Beispiel #7
0
    def test_delete_last_order_item_in_suborder(self):
        gen_id = f'{__name__}-{int(datetime.now().timestamp())}'
        self.try_add_entities([
            Product(id='0001',
                    name='Product 1',
                    price=10,
                    weight=10,
                    points=10),
            Order(id=gen_id,
                  country_id='c1',
                  shipping_method_id=1,
                  user=self.user)
        ])
        self.try_add_entities([
            Suborder(id=gen_id, order_id=gen_id),
            OrderProduct(suborder_id=gen_id,
                         product_id='0001',
                         quantity=1,
                         status=OrderProductStatus.pending),
            Suborder(id=gen_id + "2", order_id=gen_id),
            OrderProduct(suborder_id=gen_id + "2",
                         product_id='0001',
                         quantity=1,
                         status=OrderProductStatus.pending)
        ])

        res = self.try_admin_operation(
            admin_only=True,
            operation=lambda: self.client.post(
                f'/api/v1/order/{gen_id}',
                json={
                    "suborders": [{
                        'subcustomer':
                        'A001, Subcustomer1, P@ssw0rd',
                        "items": [{
                            'item_code': '0001',
                            'quantity': 1
                        }]
                    }]
                }))
        self.assertEqual(res.status_code, 200)
        order = Order.query.get(gen_id)
        self.assertEqual(order.suborders.count(), 1)
 def test_cancel_order_product(self):
     self.try_add_entities([
         Product(id='0000', name='Test product', price=10, weight=10),
         Product(id='0001', name='Test product 1', price=10, weight=10),
         Country(id='c1', name='country1'),
         Shipping(id=1, name='Shipping1'),
         PostponeShipping(),
         ShippingRate(shipping_method_id=1,
                      destination='c1',
                      weight=1000,
                      rate=100),
         ShippingRate(shipping_method_id=1,
                      destination='c1',
                      weight=10000,
                      rate=200),
     ])
     op_id = datetime.now().microsecond
     order = Order(user=self.user, shipping_method_id=1, country_id='c1')
     suborder = Suborder(order=order)
     op1 = OrderProduct(suborder=suborder,
                        product_id='0000',
                        quantity=75,
                        price=10,
                        status=OrderProductStatus.pending)
     op2 = OrderProduct(id=op_id,
                        suborder=suborder,
                        product_id='0001',
                        quantity=10,
                        price=10,
                        status=OrderProductStatus.pending)
     self.try_add_entities(
         [Product(id='0001', name='Test product 1', price=10, weight=100)])
     self.try_add_entities([order, suborder, op1, op2])
     res = self.try_user_operation(
         lambda: self.client.delete(f'/api/v1/order/product/{op_id}'))
     self.assertEqual(res.status_code, 200)
     op = OrderProduct.query.get(op_id)
     self.assertEqual(op, None)
Beispiel #9
0
 def test_delete_order(self):
     gen_id = f'{__name__}-{int(datetime.now().timestamp())}'
     order = Order(id=gen_id, user=self.user, status=OrderStatus.pending)
     order1 = Order(id=gen_id + '1',
                    user=self.user,
                    status=OrderStatus.shipped)
     order2 = Order(id=gen_id + '2', user=self.user)
     suborder = Suborder(order=order)
     self.try_add_entities([
         Order(user=self.user), order, order1, order2, suborder,
         OrderProduct(suborder=suborder, product_id='0000'),
         OrderProduct(suborder=suborder, product_id='0000')
     ])
     res = self.try_admin_operation(
         lambda: self.client.delete(f'/api/v1/admin/order/{gen_id}'))
     self.assertEqual(res.status_code, 200)
     self.assertEqual(Order.query.count(), 3)
     res = self.client.delete(f'/api/v1/admin/order/{order1.id}')
     self.assertEqual(res.status_code, 409)
     self.assertEqual(Order.query.count(), 3)
     res = self.client.delete(f'/api/v1/admin/order/{order2.id}')
     self.assertEqual(res.status_code, 200)
     self.assertEqual(Order.query.count(), 2)
Beispiel #10
0
 def test_pay_order(self):
     self.user.balance = 2600
     order = Order(user=self.user, status=OrderStatus.pending)
     suborder = Suborder(order=order)
     self.try_add_entities([
         order, suborder,
         OrderProduct(suborder=suborder,
                      product_id='0000',
                      price=10,
                      quantity=10,
                      status='purchased')
     ])
     res = self.try_admin_operation(lambda: self.client.post(
         f'/api/v1/admin/order/{order.id}', json={'status': 'shipped'}))
     self.assertEqual(res.status_code, 200)
     self.assertEqual(self.user.balance, 0)
 def test_set_order_product_status(self):
     gen_id = f'{__name__}-{int(datetime.now().timestamp())}'
     op_id = datetime.now().microsecond
     order = Order(id=gen_id, user=self.user)
     self.try_add_entities(
         [Product(id='0000', name='Test product', price=10, weight=10)])
     self.try_add_entities([
         order,
         Suborder(id=op_id, order=order),
         OrderProduct(id=op_id,
                      suborder_id=op_id,
                      product_id='0000',
                      price=10,
                      quantity=10)
     ])
     self.try_user_operation(lambda: self.client.post(
         f'/api/v1/admin/order/product/{op_id}/status/pending'))
Beispiel #12
0
 def test_get_order_excel(self):
     order = Order(user=self.user,
                   status=OrderStatus.shipped,
                   when_created=datetime.now(),
                   country_id='c1')
     suborder = Suborder(order=order,
                         subcustomer=Subcustomer(username='******'))
     self.try_add_entities([
         order, suborder,
         OrderProduct(suborder=suborder,
                      product_id='0000',
                      price=10,
                      quantity=10)
     ])
     res = self.try_user_operation(
         lambda: self.client.get(f'/api/v1/order/{order.id}/excel'))
     self.assertEqual(res.status_code, 200)
Beispiel #13
0
 def test_create_invoice_item(self):
     gen_id = f'{__name__}-{int(datetime.now().timestamp())}'
     order = Order(id=gen_id)
     self.try_add_entities([
         Product(id=gen_id, name='Product 1')
     ])
     self.try_add_entities([
         order,
         Suborder(id=gen_id, order=order),
         OrderProduct(suborder_id=gen_id, product_id=gen_id, price=10, quantity=10),
         Invoice(id=gen_id, order_id=gen_id)
     ])
     self.try_admin_operation(
         lambda: self.client.post(f'/api/v1/admin/invoice/{gen_id}/item/new')
     )
     res = self.client.post(f'/api/v1/admin/invoice/{gen_id}/item/new',
         json={'invoice_id': gen_id, 'product_id': gen_id, 'price': 10, 'quantity': 10})
     self.assertTrue(res.status_code, 200)
Beispiel #14
0
    def test_get_orders(self):
        gen_id = f'{__name__}-{int(datetime.now().timestamp())}'
        order = Order(id=gen_id,
                      user=self.user,
                      country_id='c1',
                      shipping_method_id=1)
        suborder = Suborder(order=order)
        self.try_add_entities([
            order, suborder,
            OrderProduct(id=10,
                         suborder=suborder,
                         product_id='0000',
                         price=10,
                         quantity=10)
        ])

        res = self.try_user_operation(lambda: self.client.get('/api/v1/order'))
        self.assertEqual(res.json[0]['total'], 2700)
Beispiel #15
0
 def test_get_old_invoice(self):
     gen_id = f'{__name__}-{int(datetime.now().timestamp())}'
     self.try_add_entities([
         Product(id=gen_id, name='Product 1', weight=10),
         Invoice(id=gen_id,
                 country_id='c1',
                 when_created=datetime(2020, 1, 1, 1, 0, 0),
                 when_changed=datetime(2020, 1, 1, 1, 0, 0)),
         Order(id=gen_id, invoice_id=gen_id, country_id='c1')
     ])
     suborder = Suborder(order_id=gen_id)
     self.try_add_entities([
         suborder,
         OrderProduct(suborder=suborder, product_id=gen_id, price=10, quantity=1)
     ])
     res = self.try_admin_operation(
         lambda: self.client.get(f'/api/v1/admin/invoice/{gen_id}'))
     self.assertEqual(res.status_code, 200)
     self.assertEqual(len(res.json), 1)
     self.assertEqual(res.json[0], {
         'address': None,
         'country': 'country1',
         'customer': None,
         'payee': None,
         'id': gen_id,
         'invoice_items': [{
             'id': 1,
             'invoice_id': gen_id,
             'product_id': gen_id,
             'product': 'Product 1',
             'price': 5.0,
             'weight': 10,
             'quantity': 1,
             'subtotal': 5.0,
             'when_created': None,
             'when_changed': None
         }],
         'orders': [gen_id],
         'phone': None,
         'total': 5.0,
         'weight': 10,
         'when_changed': '2020-01-01 01:00:00',
         'when_created': '2020-01-01 01:00:00'
     })
Beispiel #16
0
def add_order_product(suborder, item, errors):
    # with db.session.no_autoflush:
    try:
        product = Product.get_product_by_id(item['item_code'])
        if product:
            order_product = OrderProduct(suborder=suborder,
                                         product=product,
                                         price=product.price,
                                         quantity=int(item['quantity']),
                                         status=OrderProductStatus.pending)
            # db.session.add(order_product)
            suborder.order_products.append(order_product)
            suborder.order.total_weight += product.weight * order_product.quantity
            suborder.order.subtotal_krw += product.price * order_product.quantity
            return order_product
        raise ProductNotFoundError(item['item_code'])
    except Exception as ex:
        errors.append(ex.args)
        raise ex
Beispiel #17
0
 def test_delete_invoice_item(self):
     gen_id = f'{__name__}-{int(datetime.now().timestamp())}'
     order = Order(id=gen_id)
     self.try_add_entities([
         Product(id=gen_id, name='Product 1')
     ])
     self.try_add_entities([
         order,
         Suborder(id=gen_id, order=order),
         OrderProduct(suborder_id=gen_id, product_id=gen_id, price=10, quantity=10),
         Invoice(id=gen_id, order_id=gen_id),
         InvoiceItem(id=10, invoice_id=gen_id, product_id=gen_id, price=10, 
             quantity=10)
     ])
     res = self.try_admin_operation(
         lambda: self.client.delete(f'/api/v1/admin/invoice/{gen_id}/item/10')
     )
     self.assertEqual(res.status_code, 200)
     invoice_item = InvoiceItem.query.get(10)
     self.assertEqual(invoice_item, None)
Beispiel #18
0
 def test_increase_order_amount_over_free_shipping_threshold(self):
     order = Order(user=self.user)
     subcustomer = Subcustomer(name='A000', username='******')
     suborder = Suborder(order=order, subcustomer=subcustomer)
     self.try_add_entities([
         order, suborder, subcustomer,
         OrderProduct(suborder=suborder,
                      product_id='0000',
                      price=10,
                      quantity=10)
     ])
     res = self.try_admin_operation(
         admin_only=True,
         operation=lambda: self.client.post(
             f'/api/v1/order/{order.id}',
             json={
                 'address':
                 'Address1',
                 'country':
                 'c1',
                 'customer_name':
                 "Customer1",
                 'phone':
                 '1',
                 'zip':
                 '1',
                 'shipping':
                 '999',
                 'suborders':
                 [{
                     'subcustomer': 'A000',
                     'seq_num': 1,
                     'items': [{
                         'item_code': '0000',
                         'quantity': 3000
                     }]
                 }]
             }))
     self.assertEqual(res.status_code, 200)
     order = Order.query.get(order.id)
     self.assertEqual(order.total_krw, 30000)
Beispiel #19
0
    def test_save_order_product(self):
        gen_id = f'{__name__}-{int(datetime.now().timestamp())}'
        op_id = datetime.now().microsecond
        order = Order(id=gen_id, user=self.user)
        suborder = Suborder(id=op_id, order=order)
        self.try_add_entities([
            order, suborder,
            OrderProduct(id=op_id,
                         suborder_id=op_id,
                         product_id='0000',
                         price=10,
                         quantity=10,
                         status='pending')
        ])
        res = self.try_admin_operation(lambda: self.client.post(
            f'/api/v1/admin/order/product/{op_id}', json={'quantity': 100}))
        self.assertEqual(res.status_code, 200)
        self.assertEqual(res.json['quantity'], 100)

        res = self.client.get(f'/api/v1/admin/order/{gen_id}')
        self.assertTrue(res.json['total_krw'], 1010)
Beispiel #20
0
 def test_create_invoice(self):
     gen_id = f'{__name__}-{int(datetime.now().timestamp())}'
     id_prefix = datetime.now().strftime('INV-%Y-%m-')
     self.try_add_entities([
         Product(id=gen_id, name='Product 1', price=1)
     ])
     order = Order(id=gen_id)
     suborder = Suborder(order=order)
     self.try_add_entities([
         order, suborder,
         OrderProduct(suborder=suborder, product_id=gen_id, quantity=1, price=1)
     ])
     res = self.try_admin_operation(
         lambda: self.client.post('/api/v1/admin/invoice/new/0.5',
         json={
             'order_ids': [gen_id]
         })
     )
     self.assertEqual(res.json['invoice_id'], f'{id_prefix}0001')
     invoice = Invoice.query.get(res.json['invoice_id'])
     self.assertEqual(len(invoice.orders), 1)
     self.assertEqual(invoice.invoice_items_count, 2)
Beispiel #21
0
 def test_get_order(self):
     gen_id = f'{__name__}-{int(datetime.now().timestamp())}'
     order = Order(id=gen_id, user=self.user)
     suborder = Suborder(order=order)
     self.try_add_entities([Product(id=gen_id, price=10, weight=10)])
     self.try_add_entities([
         order, suborder,
         OrderProduct(suborder=suborder,
                      product_id=gen_id,
                      price=10,
                      quantity=10),
         Order(id=gen_id + '1', user=self.user, status=OrderStatus.pending)
     ])
     res = self.try_user_operation(
         lambda: self.client.get(f'/api/v1/order/{gen_id}'))
     self.assertEqual(res.json['total'], 2600)
     self.assertEqual(res.json['total_rur'], 1300.0)
     self.assertEqual(res.json['total_usd'], 1300.0)
     self.assertEqual(res.json['user'], self.user.username)
     self.assertEqual(len(res.json['order_products']), 1)
     res = self.client.get('/api/v1/order')
     self.assertEqual(len(res.json), 2)
     res = self.client.get('/api/v1/order?status=pending')
     self.assertEqual(res.json[0]['status'], 'pending')
Beispiel #22
0
 def test_postponed_orders(self):
     postpone_shipping = PostponeShipping()
     postponed_order = Order(shipping=postpone_shipping,
                             user=self.user,
                             status=OrderStatus.pending)
     suborder = Suborder(order=postponed_order)
     self.try_add_entities([
         postpone_shipping, postponed_order, suborder,
         OrderProduct(suborder=suborder,
                      product_id='0000',
                      price=10,
                      quantity=10)
     ])
     postponed_order1 = Order(shipping=postpone_shipping,
                              user=self.user,
                              status=OrderStatus.pending)
     suborder1 = Suborder(order=postponed_order1)
     self.try_add_entities([
         postponed_order1, suborder1,
         OrderProduct(suborder=suborder1,
                      product_id='0000',
                      price=10,
                      quantity=10)
     ])
     postponed_order.update_total()
     postponed_order1.update_total()
     res = self.try_admin_operation(
         admin_only=True,
         operation=lambda: self.client.post(
             '/api/v1/order',
             json={
                 "customer_name":
                 "User1",
                 "address":
                 "Address1",
                 "country":
                 "c1",
                 'zip':
                 '0000',
                 "shipping":
                 "1",
                 "phone":
                 "1",
                 "comment":
                 "",
                 "suborders": [{
                     "subcustomer":
                     "A000, Subcustomer1, P@ssw0rd",
                     "items": [{
                         "item_code": "0000",
                         "quantity": "100"
                     }]
                 }],
                 "attached_orders": [postponed_order.id]
             }))
     self.assertEqual(res.status_code, 200)
     order = Order.query.get(res.json['order_id'])
     self.assertEqual(order.attached_orders.count(), 1)
     self.assertEqual(order.shipping_krw, 200)
     self.assertEqual(order.total_krw, 3700)
     res = self.client.post(f'/api/v1/order/{order.id}',
                            json={
                                'address':
                                'Address1',
                                'country':
                                'c1',
                                'customer_name':
                                "User1",
                                'phone':
                                '1',
                                'zip':
                                '0000',
                                'shipping':
                                '1',
                                "attached_orders":
                                [postponed_order.id, postponed_order1.id],
                                "suborders": [{
                                    "subcustomer":
                                    "A000, Subcustomer1, P@ssw0rd",
                                    "items": [{
                                        "item_code": "0000",
                                        "quantity": "100"
                                    }]
                                }]
                            })
     self.assertEqual(order.attached_orders.count(), 2)
     self.assertEqual(order.shipping_krw, 200)
     self.assertEqual(order.total_krw, 3700)