From 858dad366ffab6ebfb41fdf7b342667f88dceb1d Mon Sep 17 00:00:00 2001 From: Josh Heald Date: Thu, 4 Sep 2025 14:34:37 +0100 Subject: [PATCH 01/11] Update to fastlane 2.228 --- Gemfile | 2 +- Gemfile.lock | 63 ++++++++++++++++++++++++++++------------------------ 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/Gemfile b/Gemfile index 4b40ce94f86..f0625a89df9 100644 --- a/Gemfile +++ b/Gemfile @@ -9,7 +9,7 @@ end gem 'danger-dangermattic', '~> 1.2' gem 'dotenv' # 2.217.0 includes a fix for Xcode 15 test results parsing in CI -gem 'fastlane', '~> 2.217' +gem 'fastlane', '~> 2.228' gem 'fastlane-plugin-firebase_app_distribution', '~> 0.10' gem 'fastlane-plugin-sentry', '~> 1.0' # This comment avoids typing to switch to a development version for testing. diff --git a/Gemfile.lock b/Gemfile.lock index befe6479747..b3e005ed3d9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -23,24 +23,27 @@ GEM artifactory (3.0.17) ast (2.4.2) atomos (0.1.3) - aws-eventstream (1.3.0) - aws-partitions (1.1029.0) - aws-sdk-core (3.214.1) + aws-eventstream (1.4.0) + aws-partitions (1.1154.0) + aws-sdk-core (3.232.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) + base64 + bigdecimal jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.96.0) - aws-sdk-core (~> 3, >= 3.210.0) + logger + aws-sdk-kms (1.112.0) + aws-sdk-core (~> 3, >= 3.231.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.176.1) - aws-sdk-core (~> 3, >= 3.210.0) + aws-sdk-s3 (1.198.0) + aws-sdk-core (~> 3, >= 3.231.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) - aws-sigv4 (1.10.1) + aws-sigv4 (1.12.1) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) - base64 (0.2.0) + base64 (0.3.0) benchmark (0.4.1) bigdecimal (3.2.2) buildkit (1.6.1) @@ -85,7 +88,7 @@ GEM rubocop (~> 1.0) declarative (0.0.20) diffy (3.4.4) - digest-crc (0.6.5) + digest-crc (0.7.0) rake (>= 12.0.0, < 14.0.0) domain_name (0.6.20240107) dotenv (2.8.1) @@ -108,12 +111,12 @@ GEM faraday (>= 0.8.0) http-cookie (~> 1.0.0) faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) + faraday-em_synchrony (1.0.1) faraday-excon (1.1.0) faraday-http-cache (2.5.1) faraday (>= 0.8) faraday-httpclient (1.0.1) - faraday-multipart (1.1.0) + faraday-multipart (1.1.1) multipart-post (~> 2.0) faraday-net_http (1.0.2) faraday-net_http_persistent (1.2.0) @@ -122,8 +125,8 @@ GEM faraday-retry (1.0.3) faraday_middleware (1.2.1) faraday (~> 1.0) - fastimage (2.3.1) - fastlane (2.226.0) + fastimage (2.4.0) + fastlane (2.228.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -163,7 +166,7 @@ GEM tty-spinner (>= 0.8.0, < 1.0.0) word_wrap (~> 1.0.0) xcodeproj (>= 1.13.0, < 2.0.0) - xcpretty (~> 0.4.0) + xcpretty (~> 0.4.1) xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) fastlane-plugin-firebase_app_distribution (0.10.0) google-apis-firebaseappdistribution_v1 (~> 0.3.0) @@ -213,12 +216,12 @@ GEM google-apis-core (>= 0.11.0, < 2.a) google-apis-storage_v1 (0.31.0) google-apis-core (>= 0.11.0, < 2.a) - google-cloud-core (1.7.1) + google-cloud-core (1.8.0) google-cloud-env (>= 1.0, < 3.a) google-cloud-errors (~> 1.0) google-cloud-env (1.6.0) faraday (>= 0.17.3, < 3.0) - google-cloud-errors (1.4.0) + google-cloud-errors (1.5.0) google-cloud-storage (1.47.0) addressable (~> 2.8) digest-crc (~> 0.4) @@ -236,13 +239,14 @@ GEM highline (2.0.3) http-cookie (1.0.8) domain_name (~> 0.5) - httpclient (2.8.3) + httpclient (2.9.0) + mutex_m i18n (1.14.7) concurrent-ruby (~> 1.0) java-properties (0.3.0) jmespath (1.6.2) - json (2.9.1) - jwt (2.10.1) + json (2.13.2) + jwt (2.10.2) base64 kramdown (2.5.1) rexml (>= 3.3.9) @@ -254,11 +258,12 @@ GEM mini_mime (1.1.5) mini_portile2 (2.8.9) minitest (5.25.5) - multi_json (1.15.0) + multi_json (1.17.0) multipart-post (2.4.1) + mutex_m (0.3.0) nanaimo (0.4.0) nap (1.1.0) - naturally (2.2.1) + naturally (2.3.0) nkf (0.2.0) nokogiri (1.18.8) mini_portile2 (~> 2.8.2) @@ -281,7 +286,7 @@ GEM highline (>= 1.6) options (~> 2.3.0) pstore (0.1.3) - public_suffix (4.0.7) + public_suffix (6.0.2) racc (1.8.1) rainbow (3.1.1) rake (12.3.3) @@ -294,7 +299,7 @@ GEM trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) retriable (3.1.2) - rexml (3.4.0) + rexml (3.4.2) rmagick (4.3.0) rouge (3.28.0) rubocop (1.68.0) @@ -313,16 +318,16 @@ GEM rubocop (~> 1.0) ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) - rubyzip (2.3.2) + rubyzip (2.4.1) sawyer (0.9.2) addressable (>= 2.3.5) faraday (>= 0.17.3, < 3) securerandom (0.4.1) security (0.1.5) - signet (0.19.0) + signet (0.21.0) addressable (~> 2.8) faraday (>= 0.17.5, < 3.a) - jwt (>= 1.5, < 3.0) + jwt (>= 1.5, < 4.0) multi_json (~> 1.10) simctl (1.6.10) CFPropertyList @@ -352,7 +357,7 @@ GEM colored2 (~> 3.1) nanaimo (~> 0.4.0) rexml (>= 3.3.6, < 4.0) - xcpretty (0.4.0) + xcpretty (0.4.1) rouge (~> 3.28.0) xcpretty-travis-formatter (1.0.1) xcpretty (~> 0.2, >= 0.0.7) @@ -366,7 +371,7 @@ PLATFORMS DEPENDENCIES danger-dangermattic (~> 1.2) dotenv - fastlane (~> 2.217) + fastlane (~> 2.228) fastlane-plugin-firebase_app_distribution (~> 0.10) fastlane-plugin-sentry (~> 1.0) fastlane-plugin-wpmreleasetoolkit (~> 13.3, >= 13.3.1) From 7716d31afe288fa79775e877761d5fbe4521b5b9 Mon Sep 17 00:00:00 2001 From: Josh Heald Date: Thu, 4 Sep 2025 14:41:38 +0100 Subject: [PATCH 02/11] Newline to force tests to run --- .../POS/Controllers/PointOfSaleOrderControllerTests.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift index 8c5db0fba75..956b0e527cd 100644 --- a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift +++ b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift @@ -817,6 +817,7 @@ struct PointOfSaleOrderControllerTests { analytics: ServiceLocator.analytics, featureFlagService: mockFeatureFlagService, pluginsService: mockPluginsService) + mockOrderService.orderToReturn = Order.fake() // We need an existing order before we can update its email, and send a receipt: From 8191f9aa08c4041c070b57714b941c46a7cea294 Mon Sep 17 00:00:00 2001 From: Josh Heald Date: Thu, 4 Sep 2025 15:22:55 +0100 Subject: [PATCH 03/11] Print statements for debugging on CI --- .../POS/Controllers/PointOfSaleOrderControllerTests.swift | 6 ++++++ .../POS/Models/PointOfSaleAggregateModelTests.swift | 1 + 2 files changed, 7 insertions(+) diff --git a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift index 956b0e527cd..efde54393b7 100644 --- a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift +++ b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift @@ -648,6 +648,9 @@ struct PointOfSaleOrderControllerTests { // Then let indexOfEvent = try #require(analyticsProvider.receivedEvents.firstIndex(where: { $0 == "receipt_email_success" })) + print(indexOfEvent) + print(analyticsProvider.receivedEvents) + print(analyticsProvider.receivedProperties) #expect(analyticsProvider.receivedProperties[indexOfEvent]["eligible_for_pos_receipt"] as? Bool == true) } @@ -663,6 +666,9 @@ struct PointOfSaleOrderControllerTests { } catch { // Then let indexOfEvent = try #require(analyticsProvider.receivedEvents.firstIndex(where: { $0 == "receipt_email_failed" })) + print(indexOfEvent) + print(analyticsProvider.receivedEvents) + print(analyticsProvider.receivedProperties) #expect(analyticsProvider.receivedProperties[indexOfEvent]["eligible_for_pos_receipt"] == nil) } } diff --git a/WooCommerce/WooCommerceTests/POS/Models/PointOfSaleAggregateModelTests.swift b/WooCommerce/WooCommerceTests/POS/Models/PointOfSaleAggregateModelTests.swift index ec9f4bbbbb7..b22e7b1a232 100644 --- a/WooCommerce/WooCommerceTests/POS/Models/PointOfSaleAggregateModelTests.swift +++ b/WooCommerce/WooCommerceTests/POS/Models/PointOfSaleAggregateModelTests.swift @@ -906,6 +906,7 @@ struct PointOfSaleAggregateModelTests { await sut.startCashPayment() // Then + print(analyticsProvider.receivedEvents) #expect(mockAnalyticsProvider.receivedEvents.first(where: { $0 == "cash_payment_tapped" }) != nil) } } From 1aad5735dc1dbe184892a6690724c64fbe2de36c Mon Sep 17 00:00:00 2001 From: Josh Heald Date: Thu, 4 Sep 2025 16:11:52 +0100 Subject: [PATCH 04/11] Debugging additions for eligibility --- .../Classes/POS/Controllers/PointOfSaleOrderController.swift | 1 + .../POS/Controllers/PointOfSaleOrderControllerTests.swift | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/WooCommerce/Classes/POS/Controllers/PointOfSaleOrderController.swift b/WooCommerce/Classes/POS/Controllers/PointOfSaleOrderController.swift index 091d09a5476..df8ecfebb63 100644 --- a/WooCommerce/Classes/POS/Controllers/PointOfSaleOrderController.swift +++ b/WooCommerce/Classes/POS/Controllers/PointOfSaleOrderController.swift @@ -125,6 +125,7 @@ protocol PointOfSaleOrderControllerProtocol { minimumVersion: POSReceiptEligibilityConstants.wcPluginMinimumVersion, siteID: order.siteID ) + print("POS receipt eligibility: \(posReceiptEligibility)") } else { posReceiptEligibility = false } diff --git a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift index efde54393b7..afaad8708a8 100644 --- a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift +++ b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift @@ -629,7 +629,7 @@ struct PointOfSaleOrderControllerTests { let mockPluginsService = MockPluginsService() mockPluginsService.setMockPlugin(.wooCommerce, systemPlugin: SystemPlugin.fake().copy(plugin: "woocommerce/woocommerce.php", - version: "10.0.0-dev", + version: "10.0.0", active: true)) let sut = PointOfSaleOrderController(orderService: orderService, @@ -644,6 +644,7 @@ struct PointOfSaleOrderControllerTests { analyticsProvider.receivedEvents.removeAll() // When + print("Plugin state: \(String(describing: mockPluginsService.loadPluginInStorage(siteID: 1, plugin: .wooCommerce, isActive: true)))") try await sut.sendReceipt(recipientEmail: "test@example.com") // Then From 3c00a145e7fcb8a4692023b9b7ffbffc0e163fdb Mon Sep 17 00:00:00 2001 From: Josh Heald Date: Thu, 4 Sep 2025 16:12:06 +0100 Subject: [PATCH 05/11] Force feature flag state --- .../Controllers/PointOfSaleOrderControllerTests.swift | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift index afaad8708a8..82b2211a524 100644 --- a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift +++ b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift @@ -632,9 +632,13 @@ struct PointOfSaleOrderControllerTests { version: "10.0.0", active: true)) + let mockFeatureFlagService = MockFeatureFlagService() + mockFeatureFlagService.isFeatureFlagEnabledReturnValue[.pointOfSaleReceipts] = true + let sut = PointOfSaleOrderController(orderService: orderService, receiptService: receiptService, analytics: analytics, + featureFlagService: mockFeatureFlagService pluginsService: mockPluginsService) let order = Order.fake() orderService.orderToReturn = order @@ -657,9 +661,12 @@ struct PointOfSaleOrderControllerTests { @Test func sendReceipt_without_order_tracks_failure_without_eligible_for_pos_receipt() async throws { // Given + let mockFeatureFlagService = MockFeatureFlagService() + mockFeatureFlagService.isFeatureFlagEnabledReturnValue[.pointOfSaleReceipts] = true let sut = PointOfSaleOrderController(orderService: orderService, receiptService: receiptService, - analytics: analytics) + analytics: analytics, + featureFlagService: mockFeatureFlagService) // When do { From 30ed96055877d37031acc9252a43e8ca41004356 Mon Sep 17 00:00:00 2001 From: Josh Heald Date: Thu, 4 Sep 2025 16:47:39 +0100 Subject: [PATCH 06/11] Comma fix --- .../POS/Controllers/PointOfSaleOrderControllerTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift index 82b2211a524..004dead765e 100644 --- a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift +++ b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift @@ -638,7 +638,7 @@ struct PointOfSaleOrderControllerTests { let sut = PointOfSaleOrderController(orderService: orderService, receiptService: receiptService, analytics: analytics, - featureFlagService: mockFeatureFlagService + featureFlagService: mockFeatureFlagService, pluginsService: mockPluginsService) let order = Order.fake() orderService.orderToReturn = order From 8405d9a4d0b647ba8398985279a9f9b284c57bed Mon Sep 17 00:00:00 2001 From: Josh Heald Date: Thu, 4 Sep 2025 17:20:52 +0100 Subject: [PATCH 07/11] Use mock feature flag service in all receipt tests --- .../PointOfSaleOrderControllerTests.swift | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift index 004dead765e..02fc2fa0935 100644 --- a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift +++ b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift @@ -182,8 +182,11 @@ struct PointOfSaleOrderControllerTests { @Test func sendReceipt_when_there_is_no_order_then_will_not_trigger() async throws { // Given + let mockFeatureFlagService = MockFeatureFlagService() + mockFeatureFlagService.isFeatureFlagEnabledReturnValue[.pointOfSaleReceipts] = true let sut = PointOfSaleOrderController(orderService: mockOrderService, - receiptService: mockReceiptService) + receiptService: mockReceiptService, + featureFlagService: mockFeatureFlagService) let email = "test@example.com" // When @@ -199,8 +202,11 @@ struct PointOfSaleOrderControllerTests { @Test func sendReceipt_calls_both_updateOrder_and_sendReceipt() async throws { // Given + let mockFeatureFlagService = MockFeatureFlagService() + mockFeatureFlagService.isFeatureFlagEnabledReturnValue[.pointOfSaleReceipts] = true let sut = PointOfSaleOrderController(orderService: mockOrderService, - receiptService: mockReceiptService) + receiptService: mockReceiptService, + featureFlagService: mockFeatureFlagService) let order = Order.fake() let recipientEmail = "test@fake.com" mockOrderService.orderToReturn = order @@ -689,9 +695,12 @@ struct PointOfSaleOrderControllerTests { version: "10.0.0-dev", active: true)) + let mockFeatureFlagService = MockFeatureFlagService() + mockFeatureFlagService.isFeatureFlagEnabledReturnValue[.pointOfSaleReceipts] = true let sut = PointOfSaleOrderController(orderService: orderService, receiptService: receiptService, analytics: analytics, + featureFlagService: mockFeatureFlagService, pluginsService: mockPluginsService) receiptService.sendReceiptResult = .failure(DotcomError.unknown(code: "test_error", message: "Test error")) From c114e6935e95ffc810fe68f7bb989e185fd9e3d9 Mon Sep 17 00:00:00 2001 From: Josh Heald Date: Thu, 4 Sep 2025 17:23:29 +0100 Subject: [PATCH 08/11] Revert "Newline to force tests to run" This reverts commit 7716d31afe288fa79775e877761d5fbe4521b5b9. --- .../POS/Controllers/PointOfSaleOrderControllerTests.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift index 02fc2fa0935..7efae943f3f 100644 --- a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift +++ b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift @@ -840,7 +840,6 @@ struct PointOfSaleOrderControllerTests { analytics: ServiceLocator.analytics, featureFlagService: mockFeatureFlagService, pluginsService: mockPluginsService) - mockOrderService.orderToReturn = Order.fake() // We need an existing order before we can update its email, and send a receipt: From f58d22db0b50b36106305fc9a794f4819b877295 Mon Sep 17 00:00:00 2001 From: Josh Heald Date: Thu, 4 Sep 2025 17:23:29 +0100 Subject: [PATCH 09/11] Revert "Print statements for debugging on CI" This reverts commit 8191f9aa08c4041c070b57714b941c46a7cea294. --- .../POS/Controllers/PointOfSaleOrderControllerTests.swift | 6 ------ .../POS/Models/PointOfSaleAggregateModelTests.swift | 1 - 2 files changed, 7 deletions(-) diff --git a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift index 7efae943f3f..372a97301d7 100644 --- a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift +++ b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift @@ -659,9 +659,6 @@ struct PointOfSaleOrderControllerTests { // Then let indexOfEvent = try #require(analyticsProvider.receivedEvents.firstIndex(where: { $0 == "receipt_email_success" })) - print(indexOfEvent) - print(analyticsProvider.receivedEvents) - print(analyticsProvider.receivedProperties) #expect(analyticsProvider.receivedProperties[indexOfEvent]["eligible_for_pos_receipt"] as? Bool == true) } @@ -680,9 +677,6 @@ struct PointOfSaleOrderControllerTests { } catch { // Then let indexOfEvent = try #require(analyticsProvider.receivedEvents.firstIndex(where: { $0 == "receipt_email_failed" })) - print(indexOfEvent) - print(analyticsProvider.receivedEvents) - print(analyticsProvider.receivedProperties) #expect(analyticsProvider.receivedProperties[indexOfEvent]["eligible_for_pos_receipt"] == nil) } } diff --git a/WooCommerce/WooCommerceTests/POS/Models/PointOfSaleAggregateModelTests.swift b/WooCommerce/WooCommerceTests/POS/Models/PointOfSaleAggregateModelTests.swift index b22e7b1a232..ec9f4bbbbb7 100644 --- a/WooCommerce/WooCommerceTests/POS/Models/PointOfSaleAggregateModelTests.swift +++ b/WooCommerce/WooCommerceTests/POS/Models/PointOfSaleAggregateModelTests.swift @@ -906,7 +906,6 @@ struct PointOfSaleAggregateModelTests { await sut.startCashPayment() // Then - print(analyticsProvider.receivedEvents) #expect(mockAnalyticsProvider.receivedEvents.first(where: { $0 == "cash_payment_tapped" }) != nil) } } From 928cf93e5fb0999e2b52d7bc8805da4742917a0e Mon Sep 17 00:00:00 2001 From: Josh Heald Date: Thu, 4 Sep 2025 17:23:29 +0100 Subject: [PATCH 10/11] Revert "Debugging additions for eligibility" This reverts commit 1aad5735dc1dbe184892a6690724c64fbe2de36c. --- .../Classes/POS/Controllers/PointOfSaleOrderController.swift | 1 - .../POS/Controllers/PointOfSaleOrderControllerTests.swift | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/WooCommerce/Classes/POS/Controllers/PointOfSaleOrderController.swift b/WooCommerce/Classes/POS/Controllers/PointOfSaleOrderController.swift index df8ecfebb63..091d09a5476 100644 --- a/WooCommerce/Classes/POS/Controllers/PointOfSaleOrderController.swift +++ b/WooCommerce/Classes/POS/Controllers/PointOfSaleOrderController.swift @@ -125,7 +125,6 @@ protocol PointOfSaleOrderControllerProtocol { minimumVersion: POSReceiptEligibilityConstants.wcPluginMinimumVersion, siteID: order.siteID ) - print("POS receipt eligibility: \(posReceiptEligibility)") } else { posReceiptEligibility = false } diff --git a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift index 372a97301d7..025f5880cf0 100644 --- a/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift +++ b/WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift @@ -635,7 +635,7 @@ struct PointOfSaleOrderControllerTests { let mockPluginsService = MockPluginsService() mockPluginsService.setMockPlugin(.wooCommerce, systemPlugin: SystemPlugin.fake().copy(plugin: "woocommerce/woocommerce.php", - version: "10.0.0", + version: "10.0.0-dev", active: true)) let mockFeatureFlagService = MockFeatureFlagService() @@ -654,7 +654,6 @@ struct PointOfSaleOrderControllerTests { analyticsProvider.receivedEvents.removeAll() // When - print("Plugin state: \(String(describing: mockPluginsService.loadPluginInStorage(siteID: 1, plugin: .wooCommerce, isActive: true)))") try await sut.sendReceipt(recipientEmail: "test@example.com") // Then From a48f878f8c301d7f9cf11ecfa01d7d6b1f7a282c Mon Sep 17 00:00:00 2001 From: Josh Heald Date: Thu, 4 Sep 2025 17:31:49 +0100 Subject: [PATCH 11/11] Update analytics tests for POS cash payment flow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See 363e0b0 for details – we moved the other event to be for the final step, not starting the flow. --- ...ckPOSCollectOrderPaymentAnalyticsTracker.swift | 3 ++- .../Models/PointOfSaleAggregateModelTests.swift | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/WooCommerce/WooCommerceTests/POS/Mocks/MockPOSCollectOrderPaymentAnalyticsTracker.swift b/WooCommerce/WooCommerceTests/POS/Mocks/MockPOSCollectOrderPaymentAnalyticsTracker.swift index c1a14eef099..b60cb69b2a1 100644 --- a/WooCommerce/WooCommerceTests/POS/Mocks/MockPOSCollectOrderPaymentAnalyticsTracker.swift +++ b/WooCommerce/WooCommerceTests/POS/Mocks/MockPOSCollectOrderPaymentAnalyticsTracker.swift @@ -28,8 +28,9 @@ final class MockPOSCollectOrderPaymentAnalyticsTracker: POSCollectOrderPaymentAn // no-op } + var didCallTrackSuccessfulCashPayment = false func trackSuccessfulCashPayment() { - // no-op + didCallTrackSuccessfulCashPayment = true } var connectedReaderModel: String? diff --git a/WooCommerce/WooCommerceTests/POS/Models/PointOfSaleAggregateModelTests.swift b/WooCommerce/WooCommerceTests/POS/Models/PointOfSaleAggregateModelTests.swift index ec9f4bbbbb7..2410f5529ae 100644 --- a/WooCommerce/WooCommerceTests/POS/Models/PointOfSaleAggregateModelTests.swift +++ b/WooCommerce/WooCommerceTests/POS/Models/PointOfSaleAggregateModelTests.swift @@ -906,7 +906,20 @@ struct PointOfSaleAggregateModelTests { await sut.startCashPayment() // Then - #expect(mockAnalyticsProvider.receivedEvents.first(where: { $0 == "cash_payment_tapped" }) != nil) + #expect(mockAnalyticsProvider.receivedEvents.first(where: { $0 == "checkout_cash_payment_tapped" }) != nil) + } + + @Test func collectCashPayment_when_invoked_tracks_expected_event() async throws { + // Given + let analyticsTracker = MockPOSCollectOrderPaymentAnalyticsTracker() + let sut = makePointOfSaleAggregateModel(orderController: orderController, + collectOrderPaymentAnalyticsTracker: analyticsTracker) + + // When + try await sut.collectCashPayment(changeDueAmount: "0.00") + + // Then + #expect(analyticsTracker.didCallTrackSuccessfulCashPayment == true) } }