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_order_creator_view_invalid_command(rf, admin_user): get_default_shop() request = apply_request_middleware(rf.get( "/", {"command": printable_gibberish()}), user=admin_user) response = OrderCreateView.as_view()(request) assert_contains(response, "unknown command", status_code=400)
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_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 get_order_from_state(state, admin_user): request = get_frontend_request_for_command(state, "create", admin_user) response = OrderCreateView.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_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, "create", admin_user) response = OrderCreateView.as_view()(request) assert_contains(response, "errorMessage", status_code=400)
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_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 = OrderCreateView.as_view()(request) assert_contains(response, "name") assert_contains(response, contact.name)
def test_order_creator_valid(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), "create", admin_user) response = OrderCreateView.as_view()(request) assert_contains(response, "orderIdentifier") # this checks for status codes as a side effect data = json.loads(response.content.decode("utf8")) order = Order.objects.get(identifier=data["orderIdentifier"]) assert order.lines.count() == 5 # 3 submitted, two for the shipping and payment method assert order.creator == admin_user assert order.customer == contact
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_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, "create", admin_user) response = OrderCreateView.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, "is not available", status_code=400) assert_contains(response, "The price", status_code=400) assert_contains(response, "The quantity", status_code=400)
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, }), user=admin_user) response = OrderCreateView.as_view()(request) assert_contains(response, "taxClass") assert_contains(response, "sku") assert_contains(response, product.sku)
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)
def test_order_creator_view_GET(rf, admin_user): get_default_shop() request = apply_request_middleware(rf.get("/"), user=admin_user) response = OrderCreateView.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 = OrderCreateView.as_view()(request) assert_contains(response, "unknown command", status_code=400)
def get_order_from_state(state, admin_user): request = get_frontend_request_for_command(state, "create", admin_user) response = OrderCreateView.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_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_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, "create", admin_user) response = OrderCreateView.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, "is not available", status_code=400) assert_contains(response, "The price", status_code=400) assert_contains(response, "The quantity", status_code=400) assert_contains(response, "not visible", status_code=400)