Skip to content

Commit

Permalink
Main merged and some tests fixed
Browse files Browse the repository at this point in the history
  • Loading branch information
cp-at-mit committed Sep 9, 2024
1 parent e6b7fdf commit b4319ac
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 16 deletions.
17 changes: 9 additions & 8 deletions ecommerce/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
DiscountRedemption,
FulfilledOrder,
Order,
OrderFlow,
OrderStatus,
PendingOrder,
UserDiscount,
Expand Down Expand Up @@ -241,7 +242,7 @@ def apply_user_discounts(request):


def fulfill_completed_order(order, payment_data, basket=None, already_enrolled=False): # noqa: FBT002
order_flow = order.get_object_flow(order, order.purchaser)
order_flow = order.get_object_flow()
order_flow.fulfill(payment_data, already_enrolled=already_enrolled)
sync_hubspot_deal(order)

Expand Down Expand Up @@ -305,16 +306,16 @@ def process_cybersource_payment_response(request, order):
# This probably means the order needed to go through the process
# again so maybe tell the user to do a thing.
log.debug(f"Transaction declined: {processor_response.message}") # noqa: G004
order_flow = order.get_object_flow(order, order.purchaser)
order_flow = order.get_object_flow()
order_flow.decline()
return_message = order.state
elif processor_response.state == ProcessorResponse.STATE_ERROR:
# Error - something went wrong with the request
log.debug(
f"Error happened submitting the transaction: {processor_response.message}" # noqa: G004
)
order_flow = order.get_object_flow(order, order.purchaser)
order_flow.error()
order_flow = order.get_object_flow()
order_flow.errored()
return_message = order.state
elif processor_response.state in [
ProcessorResponse.STATE_CANCELLED,
Expand All @@ -326,7 +327,7 @@ def process_cybersource_payment_response(request, order):
# the order here (other than set it to Cancelled).
# Transaction could be
log.debug(f"Transaction cancelled/reviewed: {processor_response.message}") # noqa: G004
order_flow = order.get_object_flow(order, order.purchaser)
order_flow = order.get_object_flow()
order_flow.cancel()
return_message = order.state

Expand All @@ -350,7 +351,7 @@ def process_cybersource_payment_response(request, order):
log.error(
f"Unknown state {processor_response.state} found: transaction ID {transaction_id}, reason code {reason_code}, response message {processor_response.message}" # noqa: G004
)
order_flow = order.get_object_flow(order, order.purchaser)
order_flow = order.get_object_flow()
order_flow.cancel()
return_message = order.state

Expand Down Expand Up @@ -539,7 +540,7 @@ def check_and_process_pending_orders_for_resolution(refnos=None):
state=OrderStatus.PENDING,
reference_number=payload["req_reference_number"],
).get()
order_flow = order.get_object_flow(order, order.purchaser)
order_flow = order.get_object_flow()
order_flow.fulfill(payload)
sync_hubspot_deal(order)
fulfilled_count += 1
Expand All @@ -556,7 +557,7 @@ def check_and_process_pending_orders_for_resolution(refnos=None):
state=OrderStatus.PENDING,
reference_number=payload["req_reference_number"],
).get()
order_flow = order.get_object_flow(order, order.purchaser)
order_flow = order.get_object_flow()
order_flow.cancel()
order.transactions.create(
transaction_id=payload["transaction_id"],
Expand Down
12 changes: 6 additions & 6 deletions ecommerce/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,7 @@ def _get_order_state(self):
return self.order.state

@state.on_success()
def _on_transition_success(self, descriptor, source, target):
def _on_transition_success(self, descriptor, source, target, already_enrolled=False):
self.order.save()

@state.transition(source=State.ANY, target=OrderStatus.CANCELED)
Expand Down Expand Up @@ -543,16 +543,16 @@ def create_transaction(self, payment_data):
"Failed to record transaction: Missing transaction id from payment API response" # noqa: EM101
)

self.transactions.get_or_create(
self.order.transactions.get_or_create(
transaction_id=transaction_id,
data=payment_data,
amount=self.total_price_paid,
amount=self.order.total_price_paid,
)

def create_paid_courseruns(self):
for run in self.order.purchased_runs:
PaidCourseRun.objects.get_or_create(
order=self, course_run=run, user=self.order.purchaser
order=self.order, course_run=run, user=self.order.purchaser
)

def create_enrollments(self):
Expand Down Expand Up @@ -600,10 +600,10 @@ class Order(TimestampedModel):
)
reference_number = models.CharField(max_length=255, null=True, blank=True) # noqa: DJ001

def get_object_flow(self, user, obj):
def get_object_flow(self):
"""Instantiate the flow without default constructor"""
return OrderFlow(
obj, user=user
self, user=self.purchaser
)

# override save method to auto-fill generated_rerefence_number
Expand Down
2 changes: 1 addition & 1 deletion ecommerce/models_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ def test_order_refund(settings):
basket_item = BasketItemFactory.create()

order = PendingOrder.create_from_basket(basket_item.basket)
order_flow = order.get_object_flow(order, order.purchaser)
order_flow = order.get_object_flow()
order_flow.fulfill({"result": "Payment succeeded", "transaction_id": "12345"})

fulfilled_order = FulfilledOrder.objects.get(pk=order.id)
Expand Down
2 changes: 1 addition & 1 deletion ecommerce/views_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -850,7 +850,7 @@ def test_paid_and_unpaid_courserun_checkout(
product = products[0]
basket = create_basket_with_product(user, product)
order = PendingOrder.create_from_basket(basket)
order_flow = order.get_object_flow(order, order.purchaser)
order_flow = order.get_object_flow()
order_flow.fulfill({"result": "Payment succeeded", "transaction_id": "12345"})

basket.delete()
Expand Down

0 comments on commit b4319ac

Please sign in to comment.