Skip to content

Commit ff8d567

Browse files
Add site related info to survey URLs (#15353)
2 parents 391e311 + 8c54449 commit ff8d567

File tree

4 files changed

+91
-30
lines changed

4 files changed

+91
-30
lines changed

RELEASE-NOTES.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
- [*] Product Form: Fix crash related to picking photos [https://github.com/woocommerce/woocommerce-ios/pull/15275]
77
- [internal] Assign `siteID` and `productID` to image product upload statuses. [https://github.com/woocommerce/woocommerce-ios/pull/15196]
88
- [*] Payments: Improved payment views' adaptability to larger accessibility font sizes [https://github.com/woocommerce/woocommerce-ios/pull/15328].
9+
- [internal] Add site related properties to crowdsignal surveys. [https://github.com/woocommerce/woocommerce-ios/pull/15353]
910

1011
21.9
1112
-----

WooCommerce/Classes/ViewRelated/Survey/SurveyViewController.swift

Lines changed: 46 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -69,33 +69,33 @@ extension SurveyViewController {
6969
case orderFormShippingLines
7070

7171
fileprivate var url: URL {
72-
switch self {
73-
case .inAppFeedback:
74-
return WooConstants.URLs.inAppFeedback
75-
.asURL()
76-
.tagPlatform("ios")
77-
.tagAppVersion(Bundle.main.bundleVersion())
78-
case .productsFeedback:
79-
return WooConstants.URLs.productsFeedback
80-
.asURL()
81-
.tagPlatform("ios")
82-
.tagAppVersion(Bundle.main.bundleVersion())
83-
case .addOnsI1:
84-
return WooConstants.URLs.orderAddOnI1Feedback
85-
.asURL()
86-
.tagPlatform("ios")
87-
.tagAppVersion(Bundle.main.bundleVersion())
88-
case .orderCreation:
89-
return WooConstants.URLs.orderCreationFeedback
90-
.asURL()
91-
.tagPlatform("ios")
92-
.tagAppVersion(Bundle.main.bundleVersion())
93-
case .orderFormShippingLines:
94-
return WooConstants.URLs.orderCreationShippingFeedback
95-
.asURL()
96-
.tagPlatform("ios")
97-
.tagAppVersion(Bundle.main.bundleVersion())
98-
}
72+
let url: URL = {
73+
switch self {
74+
case .inAppFeedback:
75+
return WooConstants.URLs.inAppFeedback
76+
.asURL()
77+
case .productsFeedback:
78+
return WooConstants.URLs.productsFeedback
79+
.asURL()
80+
case .addOnsI1:
81+
return WooConstants.URLs.orderAddOnI1Feedback
82+
.asURL()
83+
case .orderCreation:
84+
return WooConstants.URLs.orderCreationFeedback
85+
.asURL()
86+
case .orderFormShippingLines:
87+
return WooConstants.URLs.orderCreationShippingFeedback
88+
.asURL()
89+
}
90+
}()
91+
92+
let session = ServiceLocator.stores.sessionManager
93+
return url
94+
.tagPlatform("ios")
95+
.tagAppVersion(Bundle.main.bundleVersion())
96+
.tagSiteInfo(siteID: session.defaultSite?.siteID,
97+
storeUUID: session.defaultStoreUUID,
98+
storeURL: session.defaultSite?.url)
9999
}
100100

101101
fileprivate var title: String {
@@ -168,6 +168,22 @@ extension URL {
168168
appendingQueryItem(URLQueryItem(name: Tags.surveyRequestAppVersionTag, value: version))
169169
}
170170

171+
func tagSiteInfo(siteID: Int64?,
172+
storeUUID: String?,
173+
storeURL: String?) -> URL {
174+
var url = self
175+
if let siteID = siteID {
176+
url = url.appendingQueryItem(URLQueryItem(name: Tags.surveyRequestSiteIdTag, value: "\(siteID)"))
177+
}
178+
if let storeUUID = storeUUID {
179+
url = url.appendingQueryItem(URLQueryItem(name: Tags.surveyRequestStoreUUIDTag, value: storeUUID))
180+
}
181+
if let storeURL = storeURL {
182+
url = url.appendingQueryItem(URLQueryItem(name: Tags.surveyRequestStoreURLTag, value: storeURL))
183+
}
184+
return url
185+
}
186+
171187
private func appendingQueryItem(_ queryItem: URLQueryItem) -> URL {
172188
guard var urlComponents = URLComponents(url: self, resolvingAgainstBaseURL: false) else {
173189
assertionFailure("Cannot create URL components from \(self)")
@@ -185,6 +201,9 @@ extension URL {
185201
private enum Tags {
186202
static let surveyRequestPlatformTag = "woo-mobile-platform"
187203
static let surveyRequestAppVersionTag = "app-version"
204+
static let surveyRequestSiteIdTag = "site-id"
205+
static let surveyRequestStoreUUIDTag = "store-id"
206+
static let surveyRequestStoreURLTag = "store-url"
188207
}
189208
}
190209

WooCommerce/WooCommerceTests/ViewRelated/Survey/SurveyViewControllerTests.swift

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,32 @@ import WebKit
33
import XCTest
44
import TestKit
55

6+
@testable import Yosemite
67
@testable import WooCommerce
78

89
/// Test cases for `SurveyViewController`.
910
///
1011
final class SurveyViewControllerTests: XCTestCase {
12+
private let siteID: Int64 = 123
13+
private let testURL = "https://example.com"
14+
private let storeUUID = "8363cd24-2501-463f-b21b-649315a0d507"
15+
16+
override func setUp() {
17+
super.setUp()
18+
19+
let site = Site.fake().copy(siteID: siteID, url: testURL)
20+
let storesManager = MockStoresManager(sessionManager: .makeForTesting(authenticated: true,
21+
isWPCom: true,
22+
defaultSite: site,
23+
defaultStoreUUID: storeUUID))
24+
ServiceLocator.setStores(storesManager)
25+
}
26+
27+
override func tearDown() {
28+
ServiceLocator.setStores(MockStoresManager(sessionManager: .testingInstance))
29+
30+
super.tearDown()
31+
}
1132

1233
func test_it_loads_the_correct_inApp_feedback_survey() throws {
1334
// Given
@@ -19,7 +40,11 @@ final class SurveyViewControllerTests: XCTestCase {
1940

2041
// Then
2142
XCTAssertTrue(mirror.webView.isLoading)
22-
XCTAssertEqual(mirror.webView.url, WooConstants.URLs.inAppFeedback.asURL().tagPlatform("ios").tagAppVersion(Bundle.main.bundleVersion()))
43+
XCTAssertEqual(mirror.webView.url, WooConstants.URLs.inAppFeedback
44+
.asURL()
45+
.tagPlatform("ios")
46+
.tagAppVersion(Bundle.main.bundleVersion())
47+
.tagSiteInfo(siteID: siteID, storeUUID: storeUUID, storeURL: testURL))
2348
}
2449

2550
func test_it_loads_the_correct_product_feedback_survey() throws {
@@ -32,8 +57,10 @@ final class SurveyViewControllerTests: XCTestCase {
3257
// Then
3358
XCTAssertTrue(mirror.webView.isLoading)
3459
XCTAssertEqual(mirror.webView.url, WooConstants.URLs.productsFeedback
35-
.asURL().tagPlatform("ios")
36-
.tagAppVersion(Bundle.main.bundleVersion()))
60+
.asURL()
61+
.tagPlatform("ios")
62+
.tagAppVersion(Bundle.main.bundleVersion())
63+
.tagSiteInfo(siteID: siteID, storeUUID: storeUUID, storeURL: testURL))
3764
}
3865

3966
func test_it_completes_after_receiving_a_form_submitted_completed_callback_request() throws {

WooCommerce/WooCommerceTests/ViewRelated/Survey/URL+SurveyViewControllerTests.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,18 @@ final class URL_SurveyViewControllerTests: XCTestCase {
2222

2323
XCTAssertEqual(expectedURL, actualURL)
2424
}
25+
26+
func test_tagging_site_info_appends_the_correct_tag_data() throws {
27+
let siteID: Int64 = 123
28+
let testURL = "https://example.com"
29+
let storeUUID = "8363cd24-2501-463f-b21b-649315a0d507"
30+
31+
let expectedURL = "https://testurl.com?site-id=\(siteID)&store-id=\(storeUUID)&store-url=\(testURL)"
32+
33+
let actualURL = URL(string: "https://testurl.com")?.tagSiteInfo(siteID: siteID,
34+
storeUUID: storeUUID,
35+
storeURL: testURL).absoluteString
36+
37+
XCTAssertEqual(expectedURL, actualURL)
38+
}
2539
}

0 commit comments

Comments
 (0)