diff --git a/ecommerce/views/v0/__init__.py b/ecommerce/views/v0/__init__.py index fb52016664..a263cfcefb 100644 --- a/ecommerce/views/v0/__init__.py +++ b/ecommerce/views/v0/__init__.py @@ -718,9 +718,9 @@ def _create_ga4_context(self, order): "item_id": line.purchased_object_id, "item_name": line.item_description, "affiliation": "MITx Online", - "discount": str(line.discounted_price), - "price": str(line.total_price), - "quantity": line.quantity, + "discount": float(line.discounted_price), + "price": float(line.total_price), + "quantity": int(line.quantity), "item_category": "Series", } if line.purchased_content_type.model == "programrun": @@ -730,7 +730,7 @@ def _create_ga4_context(self, order): payload_items.append(line_object) ga_purchase_payload = { "transaction_id": order.reference_number, - "value": str(order.total_price_paid), + "value": float(order.total_price_paid), "tax": 0.00, "shipping": 0.00, "currency": "USD", diff --git a/ecommerce/views_test.py b/ecommerce/views_test.py index 009a43031f..7b2034342a 100644 --- a/ecommerce/views_test.py +++ b/ecommerce/views_test.py @@ -46,6 +46,7 @@ ) from flexiblepricing.constants import FlexiblePriceStatus from flexiblepricing.factories import FlexiblePriceFactory, FlexiblePriceTierFactory +from main import features from main.constants import ( USER_MSG_COOKIE_NAME, USER_MSG_TYPE_COURSE_NON_UPGRADABLE, @@ -1047,7 +1048,6 @@ def test_bulk_discount_create(admin_drf_client, use_redemption_type_flags): """ Try to make some bulk discounts. """ - test_payload = { "discount_type": DISCOUNT_TYPE_PERCENT_OFF, "payment_type": PAYMENT_TYPE_CUSTOMER_SUPPORT, @@ -1080,3 +1080,29 @@ def test_bulk_discount_create(admin_drf_client, use_redemption_type_flags): assert discounts[0].redemption_type == REDEMPTION_TYPE_ONE_TIME assert discounts[0].amount == 50 assert discounts[0].is_bulk + + +def test_checkout_interstitial_google_analytics_object( + settings, user, user_client, products +): + """ + Tests that the interstitial page receives the correct GA structure + """ + settings.OPENEDX_SERVICE_WORKER_API_TOKEN = "mock_api_token" # noqa: S105 + settings.FEATURES[features.ENABLE_GOOGLE_ANALYTICS_DATA_PUSH] = True + + product = products[0] + basket = create_basket_with_product(user, product) + PendingOrder.create_from_basket(basket) + resp = user_client.get(reverse("checkout_interstitial_page")) + assert resp.status_code == 200 + + ga_purchase_payload = resp.context["ga_purchase_payload"] + assert isinstance(ga_purchase_payload["value"], float) + assert isinstance(ga_purchase_payload["items"], list) + assert isinstance(ga_purchase_payload["shipping"], float) + assert isinstance(ga_purchase_payload["tax"], float) + for item in ga_purchase_payload["items"]: + assert isinstance(item["discount"], float) + assert isinstance(item["price"], float) + assert isinstance(item["quantity"], int)