Skip to content

Commit

Permalink
Return user_email or order user's email in order payload user_email f…
Browse files Browse the repository at this point in the history
…ield (#9419)
  • Loading branch information
IKarbowiak committed Mar 31, 2022
1 parent b6e950e commit c2d2486
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 3 deletions.
2 changes: 1 addition & 1 deletion saleor/order/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ def is_partly_paid(self):
return self.total_paid_amount > 0

def get_customer_email(self):
return self.user.email if self.user else self.user_email
return self.user.email if self.user_id else self.user_email

def update_total_paid(self):
self.total_paid_amount = (
Expand Down
5 changes: 3 additions & 2 deletions saleor/webhook/payloads.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@
"created",
"status",
"origin",
"user_email",
"shipping_method_name",
"collection_point_name",
"shipping_price_net_amount",
Expand Down Expand Up @@ -283,6 +282,7 @@ def generate_order_payload(
extra_dict_data = {
"id": graphene.Node.to_global_id("Order", order.id),
"token": str(order.id),
"user_email": order.get_customer_email(),
"original": graphene.Node.to_global_id("Order", order.original_id),
"lines": json.loads(generate_order_lines_payload(lines)),
"fulfillments": json.loads(fulfillments_data),
Expand Down Expand Up @@ -409,7 +409,8 @@ def _generate_order_payload_for_invoice(order: "Order"):
[order],
fields=ORDER_FIELDS,
extra_dict_data={
"token": lambda o: o.id,
"token": order.id,
"user_email": order.get_customer_email(),
},
)
return payload
Expand Down
38 changes: 38 additions & 0 deletions saleor/webhook/tests/test_webhook_payloads.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ def test_generate_order_payload(
payment_txn_captured,
customer_user,
):
# given
fulfillment_lines = '"fulfillment_lines"'
mocked_fulfillment_lines.return_value = fulfillment_lines
order_lines = '"order_lines"'
Expand Down Expand Up @@ -110,8 +111,10 @@ def test_generate_order_payload(

fulfillment = order.fulfillments.first()

# when
payload = json.loads(generate_order_payload(order, customer_user))[0]

# then
currency = order.currency
assert payload == {
"id": graphene.Node.to_global_id("Order", order.id),
Expand Down Expand Up @@ -263,6 +266,41 @@ def test_generate_order_payload(
mocked_fulfillment_lines.assert_called_with(fulfillment)


@freeze_time()
@mock.patch("saleor.webhook.payloads.generate_order_lines_payload")
@mock.patch("saleor.webhook.payloads.generate_fulfillment_lines_payload")
def test_generate_order_payload_no_user_email_but_user_set(
mocked_fulfillment_lines,
mocked_order_lines,
fulfilled_order,
customer_user,
):
"""Ensure that the assigned user's email is returned in `user_email` payload field
when the user_email order value is empty."""
# given
fulfillment_lines = '"fulfillment_lines"'
mocked_fulfillment_lines.return_value = fulfillment_lines
order_lines = '"order_lines"'
mocked_order_lines.return_value = order_lines

order = fulfilled_order

order.user_email = ""
order.save(update_fields=["user_email"])

line_without_sku = order.lines.last()
line_without_sku.product_sku = None
line_without_sku.save()

assert order.fulfillments.count() == 1

# when
payload = json.loads(generate_order_payload(order, customer_user))[0]

# then
assert payload["user_email"] == order.user.email


def test_generate_fulfillment_lines_payload(order_with_lines):
fulfillment = order_with_lines.fulfillments.create(tracking_number="123")
line = order_with_lines.lines.first()
Expand Down

0 comments on commit c2d2486

Please sign in to comment.