def test_abandoned_baskets(admin_user, settings): configure(settings) shop = factories.get_default_shop() factories.get_default_payment_method() factories.get_default_shipping_method() basket1 = factories.get_basket() shop_product = factories.get_default_shop_product() shop_product.default_price = TaxfulPrice(1, shop.currency) shop_product.save() client = _get_client(admin_user) # add shop product payload = {'shop_product': shop_product.id} response = client.post( '/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket1.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 assert response_data["items"][0]["shop_product"] == shop_product.pk assert not response_data["validation_errors"] assert float(response_data["total_price"]) == 1 assert Basket.objects.count() == 1 response = client.get( "/api/shuup/basket/abandoned/?shop={}&days_ago=0¬_updated_in_hours=0" .format(shop.pk)) response_data = json.loads(response.content.decode("utf-8")) assert len(response_data) == 1 basket_data = response_data[0] assert basket_data["id"] == basket1.id basket2 = factories.get_basket() response = client.post( '/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket2.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 assert response_data["items"][0]["shop_product"] == shop_product.pk assert not response_data["validation_errors"] assert float(response_data["total_price"]) == 1 assert Basket.objects.count() == 2 response = client.get( "/api/shuup/basket/abandoned/?shop={}&days_ago=0¬_updated_in_hours=0" .format(shop.pk)) response_data = json.loads(response.content.decode("utf-8")) assert len(response_data) == 2 basket_data = response_data[1] assert basket_data["id"] == basket2.id # there is no shop with this id thus it should return 404 response = client.get( "/api/shuup/basket/abandoned/?shop=2&days_ago=0¬_updated_in_hours=0" ) assert response.status_code == status.HTTP_404_NOT_FOUND
def test_abandoned_baskets(admin_user, settings): configure(settings) shop = factories.get_default_shop() factories.get_default_payment_method() factories.get_default_shipping_method() basket1 = factories.get_basket() shop_product = factories.get_default_shop_product() shop_product.default_price = TaxfulPrice(1, shop.currency) shop_product.save() client = _get_client(admin_user) # add shop product payload = {'shop_product': shop_product.id} response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket1.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 assert response_data["items"][0]["shop_product"] == shop_product.pk assert not response_data["validation_errors"] assert float(response_data["total_price"]) == 1 assert Basket.objects.count() == 1 response = client.get("/api/shuup/basket/abandoned/?shop={}&days_ago=0¬_updated_in_hours=0".format(shop.pk)) response_data = json.loads(response.content.decode("utf-8")) assert len(response_data) == 1 basket_data = response_data[0] assert basket_data["id"] == basket1.id basket2 = factories.get_basket() response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket2.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 assert response_data["items"][0]["shop_product"] == shop_product.pk assert not response_data["validation_errors"] assert float(response_data["total_price"]) == 1 assert Basket.objects.count() == 2 response = client.get("/api/shuup/basket/abandoned/?shop={}&days_ago=0¬_updated_in_hours=0".format(shop.pk)) response_data = json.loads(response.content.decode("utf-8")) assert len(response_data) == 2 basket_data = response_data[1] assert basket_data["id"] == basket2.id # there is no shop with this id thus it should return 404 response = client.get("/api/shuup/basket/abandoned/?shop=2&days_ago=0¬_updated_in_hours=0") assert response.status_code == status.HTTP_404_NOT_FOUND
def test_quantity_has_to_be_in_stock(admin_user, settings): configure(settings) from shuup_tests.simple_supplier.utils import get_simple_supplier from shuup.core.models import StockBehavior shop = factories.get_default_shop() basket = factories.get_basket() supplier = get_simple_supplier() product = factories.create_product("simple-test-product", shop, supplier) quantity = 256 supplier.adjust_stock(product.pk, quantity) product.stock_behavior = StockBehavior.STOCKED product.save() shop_product = product.shop_products.first() shop_product.suppliers.add(supplier) shop_product.save() client = _get_client(admin_user) payload = { 'shop': shop.id, 'product': shop_product.id, 'quantity': 493020 } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_400_BAD_REQUEST assert '"Insufficient stock"' in str(response.content)
def test_add_variation_product_to_basket(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() factories.get_default_payment_method() factories.get_default_shipping_method() parent = factories.create_product("ComplexVarParent", shop=shop, supplier=factories.get_default_supplier()) sizes = [("%sL" % ("X" * x)) for x in range(4)] for size in sizes: child = factories.create_product("ComplexVarChild-%s" % size, shop=shop, supplier=factories.get_default_supplier()) child.link_to_parent(parent, variables={"size": size}) parent_shop_product = parent.get_shop_instance(shop) parent_shop_product.refresh_from_db() client = _get_client(admin_user) # add parent shop product payload = { 'shop_product': parent_shop_product.id } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_400_BAD_REQUEST # add children shop product children_shop_product = parent_shop_product.product.variation_children.first().get_shop_instance(shop) payload = { 'shop_product': children_shop_product.pk, } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 assert not response_data["validation_errors"]
def test_copy_order_to_basket(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() p1 = factories.create_product("test", shop=shop, supplier=factories.get_default_supplier()) order = factories.create_order_with_product(factories.get_default_product(), factories.get_default_supplier(), 2, 10, shop=shop) factories.add_product_to_order(order, factories.get_default_supplier(), p1, 2, 5) order.customer = get_person_contact(admin_user) order.save() client = _get_client(admin_user) payload = { "order": order.pk } response = client.post('/api/shuup/basket/{}-{}/add_from_order/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 2 assert not response_data["validation_errors"] basket.refresh_from_db() assert len(basket.data["lines"]) == 2 # do it again, basket should clear first then read items payload = { "order": order.pk } response = client.post('/api/shuup/basket/{}-{}/add_from_order/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 2 assert not response_data["validation_errors"] basket.refresh_from_db() assert len(basket.data["lines"]) == 2
def test_update_line_quantity(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() factories.get_default_payment_method() factories.get_default_shipping_method() shop_product = factories.get_default_shop_product() shop_product.default_price = TaxfulPrice(1, shop.currency) shop_product.save() client = _get_client(admin_user) # add shop product payload = {'shop_product': shop_product.id} response = client.post( '/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 payload = {"line_id": response_data["items"][0]["line_id"], "quantity": 5} response = client.post( '/api/shuup/basket/{}-{}/update_quantity/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 assert response_data["items"][0]["shop_product"] == shop_product.pk assert float(response_data["items"][0]["quantity"]) == 5 assert float(response_data["total_price"]) == 5 basket.refresh_from_db() assert Basket.objects.first().data["lines"][0]["quantity"] == 5
def test_copy_order_to_basket(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() p1 = factories.create_product("test", shop=shop, supplier=factories.get_default_supplier()) order = factories.create_order_with_product(factories.get_default_product(), factories.get_default_supplier(), 2, 10, shop=shop) factories.add_product_to_order(order, factories.get_default_supplier(), p1, 2, 5) order.customer = get_person_contact(admin_user) order.save() client = _get_client(admin_user) payload = { "order": order.pk } response = client.post('/api/shuup/basket/{}-{}/add_from_order/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 2 assert not response_data["validation_errors"] basket.refresh_from_db() assert len(basket.data["lines"]) == 2 # do it again, basket should clear first then read items payload = { "order": order.pk } response = client.post('/api/shuup/basket/{}-{}/add_from_order/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 2 assert not response_data["validation_errors"] basket.refresh_from_db() assert len(basket.data["lines"]) == 2
def test_multiple_coupons_work_properly(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() shop_product = factories.get_default_shop_product() client = _get_client(admin_user) code_one = "DACODE" code_two = "DACODE1" coupon = Coupon.objects.create(code=code_one, active=True) get_default_campaign(coupon) payload = { 'code': code_one } response = client.post('/api/shuup/basket/{}-{}/add_code/'.format(shop.pk, basket.key), payload) basket_data = json.loads(response.content.decode("utf-8")) assert response.status_code == status.HTTP_200_OK assert code_one in basket_data['codes'] coupon1 = Coupon.objects.create(code=code_two, active=True) get_default_campaign(coupon1) payload = { 'code': code_two } response = client.post('/api/shuup/basket/{}-{}/add_code/'.format(shop.pk, basket.key), payload) basket_data = json.loads(response.content.decode("utf-8")) assert response.status_code == status.HTTP_200_OK assert code_two in basket_data['codes'] assert len(basket_data["codes"]) == 1
def test_can_delete_line(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() shop_product = factories.get_default_shop_product() client = _get_client(admin_user) payload = { 'shop_product': shop_product.id, } response = client.post( '/api/shuup/basket/{}-{}/add/'.format(shop.id, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) basket.refresh_from_db() assert len(response_data["items"]) == 1 assert basket.product_count == 1 line_id = response_data["items"][0]["line_id"] payload = {'line_id': line_id} response = client.post( '/api/shuup/basket/{}-{}/remove/'.format(shop.id, basket.key), payload) response_data = json.loads(response.content.decode("utf-8")) assert response.status_code == status.HTTP_200_OK basket.refresh_from_db() assert basket.product_count == 0 assert len(response_data["items"]) == 0
def test_quantity_has_to_be_in_stock(admin_user, settings): configure(settings) from shuup_tests.simple_supplier.utils import get_simple_supplier from shuup.core.models import StockBehavior shop = factories.get_default_shop() basket = factories.get_basket() supplier = get_simple_supplier() product = factories.create_product("simple-test-product", shop, supplier) quantity = 256 supplier.adjust_stock(product.pk, quantity) product.stock_behavior = StockBehavior.STOCKED product.save() shop_product = product.shop_products.first() shop_product.suppliers.add(supplier) shop_product.save() client = _get_client(admin_user) payload = { 'shop': shop.id, 'product': shop_product.id, 'quantity': 493020 } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_400_BAD_REQUEST assert '"Insufficient stock"' in str(response.content)
def test_update_line_quantity(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() factories.get_default_payment_method() factories.get_default_shipping_method() shop_product = factories.get_default_shop_product() shop_product.default_price = TaxfulPrice(1, shop.currency) shop_product.save() client = _get_client(admin_user) # add shop product payload = { 'shop_product': shop_product.id } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 payload = { "line_id": response_data["items"][0]["line_id"], "quantity": 5 } response = client.post('/api/shuup/basket/{}-{}/update_quantity/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 assert response_data["items"][0]["shop_product"] == shop_product.pk assert float(response_data["items"][0]["quantity"]) == 5 assert float(response_data["total_price"]) == 5 basket.refresh_from_db() assert Basket.objects.first().data["lines"][0]["quantity"] == 5
def test_add_product_to_basket(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() factories.get_default_payment_method() factories.get_default_shipping_method() shop_product = factories.get_default_shop_product() shop_product.default_price = TaxfulPrice(1, shop.currency) shop_product.save() client = _get_client(admin_user) # add shop product payload = { 'shop_product': shop_product.id } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 assert response_data["items"][0]["shop_product"] == shop_product.pk assert not response_data["validation_errors"] assert float(response_data["total_price"]) == 1 # add product payload = { 'product': shop_product.product.pk, 'shop': shop.pk } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 assert not response_data["validation_errors"] assert float(response_data["total_price"]) == 2
def test_can_delete_line(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() shop_product = factories.get_default_shop_product() client = _get_client(admin_user) payload = { 'shop_product': shop_product.id, } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.id, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) basket.refresh_from_db() assert len(response_data["items"]) == 1 assert basket.product_count == 1 line_id = response_data["items"][0]["line_id"] payload = { 'line_id': line_id } response = client.post('/api/shuup/basket/{}-{}/remove/'.format(shop.id, basket.key), payload) response_data = json.loads(response.content.decode("utf-8")) assert response.status_code == status.HTTP_200_OK basket.refresh_from_db() assert basket.product_count == 0 assert len(response_data["items"]) == 0
def test_multiple_coupons_work_properly(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() shop_product = factories.get_default_shop_product() client = _get_client(admin_user) code_one = "DACODE" code_two = "DACODE1" coupon = Coupon.objects.create(code=code_one, active=True) get_default_campaign(coupon) payload = {'code': code_one} response = client.post( '/api/shuup/basket/{}-{}/add_code/'.format(shop.pk, basket.key), payload) basket_data = json.loads(response.content.decode("utf-8")) assert response.status_code == status.HTTP_200_OK assert code_one in basket_data['codes'] coupon1 = Coupon.objects.create(code=code_two, active=True) get_default_campaign(coupon1) payload = {'code': code_two} response = client.post( '/api/shuup/basket/{}-{}/add_code/'.format(shop.pk, basket.key), payload) basket_data = json.loads(response.content.decode("utf-8")) assert response.status_code == status.HTTP_200_OK assert code_two in basket_data['codes'] assert len(basket_data["codes"]) == 1
def test_add_product_to_basket(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() factories.get_default_payment_method() factories.get_default_shipping_method() shop_product = factories.get_default_shop_product() shop_product.default_price = TaxfulPrice(1, shop.currency) shop_product.save() client = _get_client(admin_user) # add shop product payload = {'shop_product': shop_product.id} response = client.post( '/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 assert response_data["items"][0]["shop_product"] == shop_product.pk assert not response_data["validation_errors"] assert float(response_data["total_price"]) == 1 # add product payload = {'product': shop_product.product.pk, 'shop': shop.pk} response = client.post( '/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 assert not response_data["validation_errors"] assert float(response_data["total_price"]) == 2
def test_set_shipping_address(admin_user): shop = factories.get_default_shop() basket = factories.get_basket() factories.get_default_payment_method() factories.get_default_shipping_method() client = _get_client(admin_user) addr1 = factories.get_address() addr1.save() # use existing address payload = { 'id': addr1.id } response = client.post('/api/shuup/basket/{}-{}/set_shipping_address/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) shipping_addr = response_data["shipping_address"] assert shipping_addr["id"] == addr1.id assert shipping_addr["prefix"] == addr1.prefix assert shipping_addr["name"] == addr1.name assert shipping_addr["postal_code"] == addr1.postal_code assert shipping_addr["street"] == addr1.street assert shipping_addr["city"] == addr1.city assert shipping_addr["country"] == addr1.country # create a new address address_data = { 'name': 'name', 'prefix': 'prefix', 'postal_code': 'postal_code', 'street': 'street', 'city': 'city', 'country': 'BR' } response = client.post('/api/shuup/basket/{}-{}/set_shipping_address/'.format(shop.pk, basket.key), address_data) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) shipping_addr = response_data["shipping_address"] assert shipping_addr["id"] == addr1.id+1 assert shipping_addr["prefix"] == address_data["prefix"] assert shipping_addr["name"] == address_data["name"] assert shipping_addr["postal_code"] == address_data["postal_code"] assert shipping_addr["street"] == address_data["street"] assert shipping_addr["city"] == address_data["city"] assert shipping_addr["country"] == address_data["country"] # get the basket and check the address response = client.get('/api/shuup/basket/{}-{}/'.format(shop.pk, basket.key)) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) shipping_addr = response_data["shipping_address"] assert shipping_addr["id"] == addr1.id+1 assert shipping_addr["prefix"] == address_data["prefix"] assert shipping_addr["name"] == address_data["name"] assert shipping_addr["postal_code"] == address_data["postal_code"] assert shipping_addr["street"] == address_data["street"] assert shipping_addr["city"] == address_data["city"] assert shipping_addr["country"] == address_data["country"]
def test_set_shipping_address(admin_user): shop = factories.get_default_shop() basket = factories.get_basket() factories.get_default_payment_method() factories.get_default_shipping_method() client = _get_client(admin_user) addr1 = factories.get_address() addr1.save() # use existing address payload = { 'id': addr1.id } response = client.post('/api/shuup/basket/{}-{}/set_shipping_address/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) shipping_addr = response_data["shipping_address"] assert shipping_addr["id"] == addr1.id assert shipping_addr["prefix"] == addr1.prefix assert shipping_addr["name"] == addr1.name assert shipping_addr["postal_code"] == addr1.postal_code assert shipping_addr["street"] == addr1.street assert shipping_addr["city"] == addr1.city assert shipping_addr["country"] == addr1.country # create a new address address_data = { 'name': 'name', 'prefix': 'prefix', 'postal_code': 'postal_code', 'street': 'street', 'city': 'city', 'country': 'BR' } response = client.post('/api/shuup/basket/{}-{}/set_shipping_address/'.format(shop.pk, basket.key), address_data) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) shipping_addr = response_data["shipping_address"] assert shipping_addr["id"] == addr1.id+1 assert shipping_addr["prefix"] == address_data["prefix"] assert shipping_addr["name"] == address_data["name"] assert shipping_addr["postal_code"] == address_data["postal_code"] assert shipping_addr["street"] == address_data["street"] assert shipping_addr["city"] == address_data["city"] assert shipping_addr["country"] == address_data["country"] # get the basket and check the address response = client.get('/api/shuup/basket/{}-{}/'.format(shop.pk, basket.key)) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) shipping_addr = response_data["shipping_address"] assert shipping_addr["id"] == addr1.id+1 assert shipping_addr["prefix"] == address_data["prefix"] assert shipping_addr["name"] == address_data["name"] assert shipping_addr["postal_code"] == address_data["postal_code"] assert shipping_addr["street"] == address_data["street"] assert shipping_addr["city"] == address_data["city"] assert shipping_addr["country"] == address_data["country"]
def test_cant_add_a_dummy_campaign_code(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() shop_product = factories.get_default_shop_product() client = _get_client(admin_user) payload = { 'code': 'ABCDE' } response = client.post('/api/shuup/basket/{}-{}/add_code/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_400_BAD_REQUEST
def test_cant_add_a_dummy_campaign_code(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() shop_product = factories.get_default_shop_product() client = _get_client(admin_user) payload = {'code': 'ABCDE'} response = client.post( '/api/shuup/basket/{}-{}/add_code/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_400_BAD_REQUEST
def test_create_order(admin_user, settings, target_customer): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() factories.create_default_order_statuses() shop_product = factories.get_default_shop_product() shop_product.default_price = TaxfulPrice(1, shop.currency) shop_product.save() client = _get_client(admin_user) # add shop product payload = {'shop_product': shop_product.id} if target_customer == "other": target = factories.create_random_person() payload["customer_id"] = target.pk else: target = get_person_contact(admin_user) response = client.post( '/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 response = client.post( '/api/shuup/basket/{}-{}/create_order/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_400_BAD_REQUEST response_data = json.loads(response.content.decode("utf-8")) assert "errors" in response_data factories.get_default_payment_method() factories.get_default_shipping_method() response = client.post( '/api/shuup/basket/{}-{}/create_order/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_201_CREATED response_data = json.loads(response.content.decode("utf-8")) basket.refresh_from_db() assert basket.finished order = Order.objects.get( reference_number=response_data["reference_number"]) assert order.status == OrderStatus.objects.get_default_initial() assert order.payment_status == PaymentStatus.NOT_PAID assert order.shipping_status == ShippingStatus.NOT_SHIPPED assert not order.payment_method assert not order.shipping_method assert float(order.taxful_total_price_value) == 1 assert order.customer == target assert order.orderer == get_person_contact(admin_user) assert order.creator == admin_user assert not order.billing_address assert not order.shipping_address
def test_product_is_required_when_adding(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() shop_product = factories.get_default_shop_product() client = _get_client(admin_user) payload = { 'shop': shop.id, } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.id, basket.key), payload) assert response.status_code == status.HTTP_400_BAD_REQUEST assert '"product"' in str(response.content)
def test_product_is_required_when_adding(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() shop_product = factories.get_default_shop_product() client = _get_client(admin_user) payload = { 'shop': shop.id, } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.id, basket.key), payload) assert response.status_code == status.HTTP_400_BAD_REQUEST assert '"product"' in str(response.content)
def test_add_blank_code(admin_user, settings): configure(settings) configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() shop_product = factories.get_default_shop_product() client = _get_client(admin_user) payload = { 'code': '' } response = client.post('/api/shuup/basket/{}-{}/add_code/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_400_BAD_REQUEST response_data = json.loads(response.content.decode("utf-8")) assert 'code' in response_data
def test_create_order(admin_user, settings, target_customer): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() factories.create_default_order_statuses() shop_product = factories.get_default_shop_product() shop_product.default_price = TaxfulPrice(1, shop.currency) shop_product.save() client = _get_client(admin_user) # add shop product payload = { 'shop_product': shop_product.id } if target_customer == "other": target = factories.create_random_person() payload["customer_id"] = target.pk else: target = get_person_contact(admin_user) response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 response = client.post('/api/shuup/basket/{}-{}/create_order/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_400_BAD_REQUEST response_data = json.loads(response.content.decode("utf-8")) assert "errors" in response_data factories.get_default_payment_method() factories.get_default_shipping_method() response = client.post('/api/shuup/basket/{}-{}/create_order/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_201_CREATED response_data = json.loads(response.content.decode("utf-8")) basket.refresh_from_db() assert basket.finished order = Order.objects.get(reference_number=response_data["reference_number"]) assert order.status == OrderStatus.objects.get_default_initial() assert order.payment_status == PaymentStatus.NOT_PAID assert order.shipping_status == ShippingStatus.NOT_SHIPPED assert not order.payment_method assert not order.shipping_method assert float(order.taxful_total_price_value) == 1 assert order.customer == target assert order.orderer == get_person_contact(admin_user) assert order.creator == admin_user assert not order.billing_address assert not order.shipping_address
def test_add_blank_code(admin_user, settings): configure(settings) configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() shop_product = factories.get_default_shop_product() client = _get_client(admin_user) payload = {'code': ''} response = client.post( '/api/shuup/basket/{}-{}/add_code/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_400_BAD_REQUEST response_data = json.loads(response.content.decode("utf-8")) assert 'code' in response_data
def test_copy_order_to_basket_for_anonymous(): set_configuration() shop = factories.get_default_shop() order = _create_order(shop, AnonymousContact()) basket = factories.get_basket(shop) assert basket.customer is None client = APIClient() assert basket.customer is None _fill_new_basket_from_order(client, basket, None, order) # do it again, basket should clear first then read items _fill_new_basket_from_order(client, basket, None, order)
def test_copy_order_to_basket(admin_user): set_configuration() shop = factories.get_default_shop() order = _create_order(shop, get_person_contact(admin_user)) client = get_client(admin_user) basket = factories.get_basket(shop) # No need to assign basket customer separately since the # API will use request customer as default customer _fill_new_basket_from_order(client, basket, order.customer, order) # do it again, basket should clear first then read items _fill_new_basket_from_order(client, basket, order.customer, order)
def test_copy_order_to_basket_for_anonymous(): with override_settings(**REQUIRED_SETTINGS): set_configuration() shop = factories.get_default_shop() order = _create_order(shop, AnonymousContact()) basket = factories.get_basket(shop) assert basket.customer is None client = APIClient() assert basket.customer is None _fill_new_basket_from_order(client, basket, None, order) # do it again, basket should clear first then read items _fill_new_basket_from_order(client, basket, None, order)
def test_copy_order_to_basket(admin_user): with override_settings(**REQUIRED_SETTINGS): set_configuration() shop = factories.get_default_shop() order = _create_order(shop, get_person_contact(admin_user)) client = get_client(admin_user) basket = factories.get_basket(shop) # No need to assign basket customer separately since the # API will use request customer as default customer _fill_new_basket_from_order(client, basket, order.customer, order) # do it again, basket should clear first then read items _fill_new_basket_from_order(client, basket, order.customer, order)
def test_can_add_a_valid_campaign_code(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() shop_product = factories.get_default_shop_product() client = _get_client(admin_user) coupon = Coupon.objects.create(code="DACODE", active=True) get_default_campaign(coupon) payload = {'code': 'DACODE'} response = client.post( '/api/shuup/basket/{}-{}/add_code/'.format(shop.pk, basket.key), payload) basket_data = json.loads(response.content.decode("utf-8")) assert response.status_code == status.HTTP_200_OK assert 'DACODE' in basket_data['codes']
def test_can_add_a_valid_campaign_code(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() shop_product = factories.get_default_shop_product() client = _get_client(admin_user) coupon = Coupon.objects.create(code="DACODE", active=True) get_default_campaign(coupon) payload = { 'code': 'DACODE' } response = client.post('/api/shuup/basket/{}-{}/add_code/'.format(shop.pk, basket.key), payload) basket_data = json.loads(response.content.decode("utf-8")) assert response.status_code == status.HTTP_200_OK assert 'DACODE' in basket_data['codes']
def test_add_product_to_basket_with_custom_shop_product_fields(admin_user, settings): product_name = "Product Name" shop_product_name = "SHOP Product Name" configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() factories.get_default_payment_method() factories.get_default_shipping_method() shop_product = factories.get_default_shop_product() shop_product.default_price = TaxfulPrice(1, shop.currency) shop_product.save() shop_product.product.name = product_name shop_product.product.save() client = _get_client(admin_user) payload = { 'product': shop_product.product.pk, 'shop': shop.pk } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 assert response_data["items"][0]["shop_product"] == shop_product.pk assert response_data["items"][0]["text"] == product_name # set shop product name shop_product.product.name = shop_product_name shop_product.product.save() # add product payload = { 'product': shop_product.product.pk, 'shop': shop.pk } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 assert response_data["items"][0]["text"] == shop_product_name
def test_add_product_to_basket_with_custom_shop_product_fields(admin_user, settings): product_name = "Product Name" shop_product_name = "SHOP Product Name" configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() factories.get_default_payment_method() factories.get_default_shipping_method() shop_product = factories.get_default_shop_product() shop_product.default_price = TaxfulPrice(1, shop.currency) shop_product.save() shop_product.product.name = product_name shop_product.product.save() client = _get_client(admin_user) payload = { 'product': shop_product.product.pk, 'shop': shop.pk } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 assert response_data["items"][0]["shop_product"] == shop_product.pk assert response_data["items"][0]["text"] == product_name # set shop product name shop_product.product.name = shop_product_name shop_product.product.save() # add product payload = { 'product': shop_product.product.pk, 'shop': shop.pk } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 assert response_data["items"][0]["text"] == shop_product_name
def test_add_variation_product_to_basket(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() factories.get_default_payment_method() factories.get_default_shipping_method() parent = factories.create_product( "ComplexVarParent", shop=shop, supplier=factories.get_default_supplier()) sizes = [("%sL" % ("X" * x)) for x in range(4)] for size in sizes: child = factories.create_product( "ComplexVarChild-%s" % size, shop=shop, supplier=factories.get_default_supplier()) child.link_to_parent(parent, variables={"size": size}) parent_shop_product = parent.get_shop_instance(shop) parent_shop_product.refresh_from_db() client = _get_client(admin_user) # add parent shop product payload = {'shop_product': parent_shop_product.id} response = client.post( '/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_400_BAD_REQUEST # add children shop product children_shop_product = parent_shop_product.product.variation_children.first( ).get_shop_instance(shop) payload = { 'shop_product': children_shop_product.pk, } response = client.post( '/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_200_OK response_data = json.loads(response.content.decode("utf-8")) assert len(response_data["items"]) == 1 assert not response_data["validation_errors"]
def test_copy_order_to_basket_for_staff(admin_user): with override_settings(**REQUIRED_SETTINGS): set_configuration() shop = factories.get_default_shop() customer = factories.create_random_person() order = _create_order(shop, customer) client = get_client(admin_user) basket = factories.get_basket(shop) uuid = "%s-%s" % (shop.pk, basket.key) response = client.post( '/api/shuup/basket/%s/set_customer/' % uuid, format="json", data={"customer": customer.id} ) assert response.status_code == status.HTTP_200_OK response = client.post('/api/shuup/basket/%s/add_from_order/' % uuid, {"order": order.pk}) assert response.status_code == status.HTTP_404_NOT_FOUND # admin user is not staff shop.staff_members.add(admin_user) _fill_new_basket_from_order(client, basket, customer, order)
def test_fetch_basket(admin_user, settings): configure(settings) shop = factories.get_default_shop() shop2 = create_shop("foobar") basket = factories.get_basket() factories.get_default_payment_method() factories.get_default_shipping_method() assert basket.shop == shop client = _get_client(admin_user) response = client.get('/api/shuup/basket/{}-{}/'.format(shop.pk, basket.key)) assert response.status_code == status.HTTP_200_OK basket_data = json.loads(response.content.decode("utf-8")) assert basket_data["key"] == basket.key assert not basket_data["validation_errors"] # malformed uuid response = client.get('/api/shuup/basket/{}/'.format(basket.key)) assert response.status_code == status.HTTP_400_BAD_REQUEST # wrong shop response = client.get('/api/shuup/basket/{}-{}/'.format(shop2.pk, basket.key)) assert response.status_code == 400
def test_copy_order_to_basket_for_staff(admin_user): with override_settings(**REQUIRED_SETTINGS): set_configuration() shop = factories.get_default_shop() customer = factories.create_random_person() order = _create_order(shop, customer) client = get_client(admin_user) basket = factories.get_basket(shop) uuid = "%s-%s" % (shop.pk, basket.key) response = client.post( '/api/shuup/basket/%s/set_customer/' % uuid, format="json", data={"customer": customer.id} ) assert response.status_code == status.HTTP_200_OK response = client.post('/api/shuup/basket/%s/add_from_order/' % uuid, {"order": order.pk}) assert response.status_code == status.HTTP_404_NOT_FOUND # admin user is not staff shop.staff_members.add(admin_user) _fill_new_basket_from_order(client, basket, customer, order)
def test_fetch_basket(admin_user, settings): configure(settings) shop = factories.get_default_shop() shop2 = create_shop("foobar") basket = factories.get_basket() factories.get_default_payment_method() factories.get_default_shipping_method() assert basket.shop == shop client = _get_client(admin_user) response = client.get('/api/shuup/basket/{}-{}/'.format(shop.pk, basket.key)) assert response.status_code == status.HTTP_200_OK basket_data = json.loads(response.content.decode("utf-8")) assert basket_data["key"] == basket.key assert not basket_data["validation_errors"] # malformed uuid response = client.get('/api/shuup/basket/{}/'.format(basket.key)) assert response.status_code == status.HTTP_400_BAD_REQUEST # wrong shop response = client.get('/api/shuup/basket/{}-{}/'.format(shop2.pk, basket.key)) assert response.status_code == 400
def test_basket_can_be_cleared(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() shop_product = factories.get_default_shop_product() client = _get_client(admin_user) payload = { 'shop': shop.id, 'product': shop_product.id, } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.id, basket.key), payload) assert response.status_code == status.HTTP_200_OK basket = Basket.objects.get(key=basket.key) assert basket.product_count == 1 response = client.post('/api/shuup/basket/{}-{}/clear/'.format(shop.id, basket.key), payload) response_data = json.loads(response.content.decode("utf-8")) assert response.status_code == status.HTTP_200_OK basket.refresh_from_db() assert basket.product_count == 0 assert len(response_data["items"]) == 0
def test_product_has_to_exist(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() client = _get_client(admin_user) # invalid product payload = { 'shop': shop.id, 'product': 2384958, } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_400_BAD_REQUEST assert "object does not exist" in str(response.content) # invalid shop product payload = { 'shop_product': 2384958 } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_400_BAD_REQUEST assert "object does not exist" in str(response.content)
def test_basket_can_be_cleared(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() shop_product = factories.get_default_shop_product() client = _get_client(admin_user) payload = { 'shop': shop.id, 'product': shop_product.id, } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.id, basket.key), payload) assert response.status_code == status.HTTP_200_OK basket = Basket.objects.get(key=basket.key) assert basket.product_count == 1 response = client.post('/api/shuup/basket/{}-{}/clear/'.format(shop.id, basket.key), payload) response_data = json.loads(response.content.decode("utf-8")) assert response.status_code == status.HTTP_200_OK basket.refresh_from_db() assert basket.product_count == 0 assert len(response_data["items"]) == 0
def test_product_has_to_exist(admin_user, settings): configure(settings) shop = factories.get_default_shop() basket = factories.get_basket() client = _get_client(admin_user) # invalid product payload = { 'shop': shop.id, 'product': 2384958, } response = client.post( '/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_400_BAD_REQUEST assert "object does not exist" in str(response.content) # invalid shop product payload = {'shop_product': 2384958} response = client.post( '/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == status.HTTP_400_BAD_REQUEST assert "object does not exist" in str(response.content)
def test_add_product_shop_mismatch(admin_user, settings): configure(settings) shop = factories.get_default_shop() shop2 = create_shop("foobar") basket = factories.get_basket() factories.get_default_payment_method() factories.get_default_shipping_method() sp = factories.create_product( "test", shop=shop2, supplier=factories.get_default_supplier()).get_shop_instance(shop2) client = _get_client(admin_user) payload = {'shop_product': sp.id} response = client.post( '/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == 400 assert "different shop" in str(response.content) # add product belonging to different shop than basket shop payload = {'shop': sp.shop.id, 'product': sp.product.id} response = client.post( '/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == 400 assert "different shop" in str(response.content)
def test_add_product_shop_mismatch(admin_user, settings): configure(settings) shop = factories.get_default_shop() shop2 = create_shop("foobar") basket = factories.get_basket() factories.get_default_payment_method() factories.get_default_shipping_method() sp = factories.create_product("test", shop=shop2, supplier=factories.get_default_supplier()).get_shop_instance(shop2) client = _get_client(admin_user) payload = { 'shop_product': sp.id } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == 400 assert "different shop" in str(response.content) # add product belonging to different shop than basket shop payload = { 'shop': sp.shop.id, 'product': sp.product.id } response = client.post('/api/shuup/basket/{}-{}/add/'.format(shop.pk, basket.key), payload) assert response.status_code == 400 assert "different shop" in str(response.content)