def test_order_creator_source_data(rf, admin_user): get_initial_order_status() # Needed for the API contact = create_random_person(locale="en_US", minimum_name_comp_len=5) request = get_frontend_request_for_command(get_frontend_order_state(contact), "source_data", admin_user) response =OrderEditView.as_view()(request) data = json.loads(response.content.decode("utf8")) assert len(data.get("orderLines")) == 5
def test_order_creator_customer_details(rf, admin_user): shop = get_default_shop() contact = create_random_person(locale="en_US", minimum_name_comp_len=5) company = create_random_company() group = get_default_customer_group() contact.groups.add(group) contact.company_memberships.add(company) contact.save() product = create_product(sku=printable_gibberish(), supplier=get_default_supplier(), shop=shop) order = create_random_order(contact, products=[product]) request = apply_request_middleware(rf.get("/", {"command": "customer_details", "id": contact.id}), user=admin_user) response = OrderEditView.as_view()(request) data = json.loads(response.content.decode("utf8")) assert "customer_info" in data assert "order_summary" in data assert "recent_orders" in data assert data["customer_info"]["name"] == contact.full_name assert data["customer_info"]["phone_no"] == contact.phone assert data["customer_info"]["email"] == contact.email assert company.full_name in data["customer_info"]["companies"] assert group.name in data["customer_info"]["groups"] assert data["customer_info"]["merchant_notes"] == contact.merchant_notes assert len(data["order_summary"]) == 1 assert data["order_summary"][0]["year"] == order.order_date.year assert data["order_summary"][0]["total"] == format_money(order.taxful_total_price) assert len(data["recent_orders"]) == 1 assert data["recent_orders"][0]["status"] == order.get_status_display() assert data["recent_orders"][0]["total"] == format_money(order.taxful_total_price) assert data["recent_orders"][0]["payment_status"] == force_text(order.payment_status.label) assert data["recent_orders"][0]["shipment_status"] == force_text(order.shipping_status.label)
def test_order_creator_view_for_customer(rf, admin_user): get_default_shop() contact = create_random_person(locale="en_US", minimum_name_comp_len=5) request = apply_request_middleware(rf.get("/", {"contact_id": contact.id}), user=admin_user) response = OrderEditView.as_view()(request) assert_contains(response, "customerData") # in the config assert_contains(response, "isCompany") # in the config
def test_campaign_with_non_active_coupon(rf): initial_status = get_initial_order_status() request, shop, group = initialize_test(rf, include_tax=False) order = _get_order_with_coupon(request, initial_status) coupon = order.coupon_usages.first().coupon coupon.active = False coupon.save() modifier = UserFactory() contact = create_random_person(locale="en_US", minimum_name_comp_len=5) assert order.customer != contact state = _get_frontend_order_state(shop, contact) assert order.shop.id == state["shop"]["selected"]["id"] request = get_frontend_request_for_command(state, "finalize", modifier) response = OrderEditView.as_view()(request, pk=order.pk) assert_contains(response, "orderIdentifier") data = json.loads(response.content.decode("utf8")) edited_order = Order.objects.get(pk=order.pk) assert edited_order.identifier == data["orderIdentifier"] == order.identifier assert edited_order.pk == order.pk assert edited_order.lines.count() == 3 assert OrderLineType.DISCOUNT not in [l.type for l in edited_order.lines.all()] assert edited_order.coupon_usages.count() == 0
def test_order_creator_customer_data(rf, admin_user): get_default_shop() contact = create_random_person(locale="en_US", minimum_name_comp_len=5) request = apply_request_middleware(rf.get("/", {"command": "customer_data", "id": contact.id}), user=admin_user) response = OrderEditView.as_view()(request) assert_contains(response, "name") assert_contains(response, contact.name)
def test_order_creator_invalid_base_data(rf, admin_user): get_initial_order_status() # Needed for the API state = get_frontend_order_state(contact=None) # Remove some critical data... state["customer"]["id"] = None state["shop"]["selected"]["id"] = None request = get_frontend_request_for_command(state, "finalize", admin_user) response =OrderEditView.as_view()(request) assert_contains(response, "errorMessage", status_code=400)
def test_order_creator_addresses(rf, admin_user): get_initial_order_status() # Needed for the API contact = create_random_person(locale="en_US", minimum_name_comp_len=5) state = get_frontend_order_state(contact=contact) # company with no tax number state["customer"]["isCompany"] = True request = get_frontend_request_for_command(state, "finalize", admin_user) response =OrderEditView.as_view()(request) assert_contains(response, "Tax number is not set", status_code=400) # company with tax number, should work state["customer"]["billingAddress"]["tax_number"] = "123" state["customer"]["shippingAddress"]["tax_number"] = "123" order = get_order_from_state(state, admin_user) assert order.lines.count() == 5 # person with no shipping address state["customer"]["isCompany"] = False state["customer"]["shippingAddress"] = {} request = get_frontend_request_for_command(state, "finalize", admin_user) response =OrderEditView.as_view()(request) assert_contains(response, "This field is required", status_code=400) # ship to billing, should work now state["customer"]["shipToBillingAddress"] = True order = get_order_from_state(state, admin_user) assert order.lines.count() == 5 # change name and make sure contact address is NOT updated original_name = contact.default_billing_address.name state["customer"]["billingAddress"]["name"] = "foobar" state["customer"]["saveAddress"] = False order = get_order_from_state(state, admin_user) contact.refresh_from_db() assert contact.default_billing_address.name == original_name # change name with saveAddress set, contact address should update original_name = contact.default_billing_address.name state["customer"]["billingAddress"]["name"] = "foobar" state["customer"]["saveAddress"] = True order = get_order_from_state(state, admin_user) contact.refresh_from_db() assert contact.default_billing_address.name == "foobar"
def test_edit_view_with_anonymous_contact(rf, admin_user): shop = get_default_shop() supplier = get_default_supplier() product = create_product(sku=printable_gibberish(), supplier=supplier, shop=shop) order = create_order_with_product(product, supplier, 1, 10, shop=shop) order.save() assert not order.customer request = apply_request_middleware(rf.get("/", user=admin_user)) response = OrderEditView.as_view()(request=request, pk=order.pk) assert response.status_code == 200
def test_order_creator_invalid_line_data(rf, admin_user): get_initial_order_status() # Needed for the API contact = create_random_person(locale="en_US", minimum_name_comp_len=5) state = get_frontend_order_state(contact=contact, valid_lines=False) request = get_frontend_request_for_command(state, "finalize", admin_user) response = OrderEditView.as_view()(request) # Let's see that we get a cornucopia of trouble: assert_contains(response, "does not exist", status_code=400) assert_contains(response, "does not have a product", status_code=400) assert_contains(response, "The price", status_code=400) assert_contains(response, "The quantity", status_code=400)
def test_order_creator_product_data(rf, admin_user): shop = get_default_shop() product = create_product(sku=printable_gibberish(), supplier=get_default_supplier(), shop=shop) request = apply_request_middleware( rf.get("/", {"command": "product_data", "shop_id": shop.id, "id": product.id, "quantity": 42}), user=admin_user ) response = OrderEditView.as_view()(request) assert_contains(response, "taxClass") assert_contains(response, "sku") assert_contains(response, product.sku) assert_contains(response, "logicalCount") assert_contains(response, "physicalCount") assert_contains(response, "salesDecimals") assert_contains(response, "salesUnit")
def test_edit_view_with_anonymous_contact(rf, admin_user): shop = get_default_shop() supplier = get_default_supplier() product = create_product( sku=printable_gibberish(), supplier=supplier, shop=shop ) order = create_order_with_product(product, supplier, 1, 10, shop=shop) order.save() assert not order.customer request = apply_request_middleware(rf.get("/"), user=admin_user) response = OrderEditView.as_view()(request=request, pk=order.pk) assert response.status_code == 200
def test_editing_existing_order(rf, admin_user): modifier = UserFactory() get_initial_order_status() # Needed for the API contact = create_random_person(locale="en_US", minimum_name_comp_len=5) state = get_frontend_order_state(contact=contact) shop = get_default_shop() order = create_empty_order(shop=shop) order.payment_data = {"payment_data": True} order.shipping_data = {"shipping_data": True} order.extra_data = {"external_id": "123"} order.save() assert order.lines.count() == 0 assert order.pk is not None assert order.modified_by == order.creator request = get_frontend_request_for_command(state, "finalize", modifier) response = OrderEditView.as_view()(request, pk=order.pk) assert_contains(response, "orderIdentifier") # this checks for status codes as a side effect data = json.loads(response.content.decode("utf8")) edited_order = Order.objects.get(pk=order.pk) # Re fetch the initial order # Check that identifiers has not changed assert edited_order.identifier == data["orderIdentifier"] == order.identifier assert edited_order.pk == order.pk # Check that the product content is updated based on state assert edited_order.lines.count() == 5 assert edited_order.customer == contact # Check that product line have right taxes for line in edited_order.lines.all(): if line.type == OrderLineType.PRODUCT: assert [line_tax.tax.code for line_tax in line.taxes.all()] == ["test_code"] assert line.taxful_price.amount > line.taxless_price.amount # Make sure order modification information is correct assert edited_order.modified_by != order.modified_by assert edited_order.modified_by == modifier assert edited_order.modified_on > order.modified_on # Make sure all non handled attributes is preserved from original order assert edited_order.creator == order.creator assert edited_order.ip_address == order.ip_address assert edited_order.orderer == order.orderer assert edited_order.customer_comment == order.customer_comment assert edited_order.marketing_permission == order.marketing_permission assert edited_order.order_date == order.order_date assert edited_order.status == order.status assert edited_order.payment_data == order.payment_data assert edited_order.shipping_data == order.shipping_data assert edited_order.extra_data == order.extra_data
def test_order_creator_product_data(rf, admin_user): shop = get_default_shop() product = create_product(sku=printable_gibberish(), supplier=get_default_supplier(), shop=shop) request = apply_request_middleware(rf.get("/", { "command": "product_data", "shop_id": shop.id, "id": product.id, "quantity": 42 }), user=admin_user) response = OrderEditView.as_view()(request) assert_contains(response, "taxClass") assert_contains(response, "sku") assert_contains(response, product.sku) assert_contains(response, "logicalCount") assert_contains(response, "physicalCount") assert_contains(response, "salesDecimals") assert_contains(response, "salesUnit")
def test_order_creator_customer_details(rf, admin_user): shop = get_default_shop() contact = create_random_person(locale="en_US", minimum_name_comp_len=5) company = create_random_company() group = get_default_customer_group() contact.groups.add(group) contact.company_memberships.add(company) contact.save() product = create_product(sku=printable_gibberish(), supplier=get_default_supplier(), shop=shop) order = create_random_order(contact, products=[product]) request = apply_request_middleware(rf.get( "/", { "command": "customer_details", "id": contact.id }), user=admin_user) response = OrderEditView.as_view()(request) data = json.loads(response.content.decode("utf8")) assert "customer_info" in data assert "order_summary" in data assert "recent_orders" in data assert data["customer_info"]["name"] == contact.full_name assert data["customer_info"]["phone_no"] == contact.phone assert data["customer_info"]["email"] == contact.email assert company.full_name in data["customer_info"]["companies"] assert group.name in data["customer_info"]["groups"] assert data["customer_info"]["merchant_notes"] == contact.merchant_notes assert len(data["order_summary"]) == 1 assert data["order_summary"][0]["year"] == order.order_date.year assert data["order_summary"][0]["total"] == format_money( order.taxful_total_price) assert len(data["recent_orders"]) == 1 assert data["recent_orders"][0]["status"] == order.get_status_display() assert data["recent_orders"][0]["total"] == format_money( order.taxful_total_price) assert data["recent_orders"][0]["payment_status"] == force_text( order.payment_status.label) assert data["recent_orders"][0]["shipment_status"] == force_text( order.shipping_status.label)
def test_order_edit_with_coupon(rf): initial_status = get_initial_order_status() request, shop, group = initialize_test(rf, include_tax=False) order = _get_order_with_coupon(request, initial_status) modifier = UserFactory() contact = create_random_person(locale="en_US", minimum_name_comp_len=5) assert order.customer != contact state = _get_frontend_order_state(shop, contact) assert order.shop.id == state["shop"]["selected"]["id"] request = get_frontend_request_for_command(state, "finalize", modifier) response = OrderEditView.as_view()(request, pk=order.pk) assert_contains(response, "orderIdentifier") data = json.loads(response.content.decode("utf8")) edited_order = Order.objects.get(pk=order.pk) assert edited_order.identifier == data["orderIdentifier"] == order.identifier assert edited_order.pk == order.pk assert edited_order.lines.count() == 4 assert OrderLineType.DISCOUNT in [l.type for l in edited_order.lines.all()] assert edited_order.coupon_usages.count() == 1
def test_admin_order_with_campaign(rf, admin_user): request, shop, group = initialize_test(rf, False) customer = request.customer cat = Category.objects.create(name="test") rule1, rule2 = create_condition_and_filter(cat, request) campaign = CatalogCampaign.objects.create(shop=shop, name="test", active=True) campaign.conditions.add(rule1) ProductDiscountAmount.objects.create(campaign=campaign, discount_amount="10") product = create_product("Just-A-Product-Too", shop, default_price=20) shop_product = product.get_shop_instance(shop) shop_product.categories.add(cat) request = apply_request_middleware(rf.get("/", { "command": "product_data", "shop_id": shop.id, "customer_id": customer.id, "id": product.id, "quantity": 1 }), user=admin_user) response = OrderEditView.as_view()(request) data = json.loads(response.content.decode("utf8")) assert decimal.Decimal(data['unitPrice']['value']) == shop.create_price(10).value
def test_admin_order_with_campaign(rf, admin_user): request, shop, group = initialize_test(rf, False) customer = request.customer cat = Category.objects.create(name="test") rule1, rule2 = create_condition_and_filter(cat, request) campaign = CatalogCampaign.objects.create(shop=shop, name="test", active=True) campaign.conditions.add(rule1) ProductDiscountAmount.objects.create(campaign=campaign, discount_amount="10") product = create_product("Just-A-Product-Too", shop, default_price=20) shop_product = product.get_shop_instance(shop) shop_product.categories.add(cat) request = apply_request_middleware(rf.get("/", { "command": "product_data", "shop_id": shop.id, "customer_id": customer.id, "id": product.id, "quantity": 1 }), user=admin_user, HTTP_HOST=shop.domain, shop=shop) response = OrderEditView.as_view()(request) data = json.loads(response.content.decode("utf8")) assert decimal.Decimal(data['unitPrice']['value']) == shop.create_price(10).value
def get_order_from_state(state, admin_user): request = get_frontend_request_for_command(state, "finalize", admin_user) response = OrderEditView.as_view()(request) assert_contains(response, "orderIdentifier") # this checks for status codes as a side effect data = json.loads(response.content.decode("utf8")) return Order.objects.get(identifier=data["orderIdentifier"])
def test_order_creator_view_get(rf, admin_user): get_default_shop() request = apply_request_middleware(rf.get("/"), user=admin_user) response = OrderEditView.as_view()(request) assert_contains(response, "shippingMethods") # in the config assert_contains(response, "shops") # in the config
def test_order_creator_view_invalid_command(rf, admin_user): get_default_shop() request = apply_request_middleware(rf.get("/", {"command": printable_gibberish()}), user=admin_user) response = OrderEditView.as_view()(request) assert_contains(response, "unknown command", status_code=400)
def test_order_creator_view_GET(rf, admin_user): get_default_shop() request = apply_request_middleware(rf.get("/"), user=admin_user) response =OrderEditView.as_view()(request) assert_contains(response, "shippingMethods") # in the config assert_contains(response, "shops") # in the config