Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[EP-283] CTA Clicked (campaign details) #1409

Merged
merged 10 commits into from
Mar 29, 2021
10 changes: 10 additions & 0 deletions Library/Tracking/KSRAnalytics.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1440,6 +1440,16 @@ public final class KSRAnalytics {
)
}

singhhari marked this conversation as resolved.
Show resolved Hide resolved
public func trackCampaignDetailsButtonClicked(project: Project) {
singhhari marked this conversation as resolved.
Show resolved Hide resolved
let props = projectProperties(from: project)
.withAllValuesFrom(contextProperties(ctaContext: .campaignDetails))
singhhari marked this conversation as resolved.
Show resolved Hide resolved

self.track(
event: NewApprovedEvent.ctaClicked.rawValue,
properties: props
)
}

// MARK: - Email Verification

public func trackEmailVerificationScreenViewed() {
Expand Down
26 changes: 26 additions & 0 deletions Library/Tracking/KSRAnalyticsTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1482,6 +1482,32 @@ final class KSRAnalyticsTests: TestCase {
self.assertCheckoutProperties(segmentClientProps)
}

func testTrackCampaignDetailsButtonClicked() {
let dataLakeClient = MockTrackingClient()
let segmentClient = MockTrackingClient()

let ksrAnalytics = KSRAnalytics(
dataLakeClient: dataLakeClient,
segmentClient: segmentClient
)

let project = Project.template

ksrAnalytics.trackCampaignDetailsButtonClicked(project: project)

XCTAssertEqual(["CTA Clicked"], dataLakeClient.events)
XCTAssertEqual(["CTA Clicked"], segmentClient.events)

let dataLakeClientProps = dataLakeClient.properties.last
let segmentClientProps = segmentClient.properties.last

XCTAssertEqual("campaign_details", dataLakeClientProps?["context_cta"] as? String)
XCTAssertEqual("campaign_details", segmentClientProps?["context_cta"] as? String)

self.assertProjectProperties(dataLakeClientProps)
self.assertProjectProperties(segmentClientProps)
}

// MARK: - Onboarding Tracking

func testOnboardingGetStartedButtonClicked() {
Expand Down
8 changes: 6 additions & 2 deletions Library/ViewModels/ProjectPamphletMainCellViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -240,8 +240,7 @@ public final class ProjectPamphletMainCellViewModel: ProjectPamphletMainCellView

// Tracking

data
.takeWhen(self.readMoreButtonTappedProperty.signal)
data.take(first: 1)
singhhari marked this conversation as resolved.
Show resolved Hide resolved
.observeValues { projectAndRefTag in
let (project, refTag) = projectAndRefTag
let cookieRefTag = cookieRefTagFor(project: project) ?? refTag
Expand All @@ -252,8 +251,13 @@ public final class ProjectPamphletMainCellViewModel: ProjectPamphletMainCellView
sectionContext: .campaign,
cookieRefTag: cookieRefTag
)
}

self.notifyDelegateToGoToCampaignWithProject
.observeValues { project in
AppEnvironment.current.optimizelyClient?.track(eventName: "Campaign Details Button Clicked")

AppEnvironment.current.ksrAnalytics.trackCampaignDetailsButtonClicked(project: project)
}

self.notifyDelegateToGoToCreator.observeValues { project in
Expand Down
50 changes: 6 additions & 44 deletions Library/ViewModels/ProjectPamphletMainCellViewModelTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -507,8 +507,8 @@ final class ProjectPamphletMainCellViewModelTests: TestCase {

self.notifyDelegateToGoToCreator.assertValues([project])

XCTAssertEqual(["CTA Clicked"], self.dataLakeTrackingClient.events)
XCTAssertEqual(["CTA Clicked"], self.segmentTrackingClient.events)
XCTAssertEqual(["Page Viewed", "CTA Clicked"], self.dataLakeTrackingClient.events)
singhhari marked this conversation as resolved.
Show resolved Hide resolved
XCTAssertEqual(["Page Viewed", "CTA Clicked"], self.segmentTrackingClient.events)

XCTAssertEqual("creator_details", self.dataLakeTrackingClient.properties.last?["context_cta"] as? String)
XCTAssertEqual("creator_details", self.segmentTrackingClient.properties.last?["context_cta"] as? String)
Expand All @@ -527,52 +527,21 @@ final class ProjectPamphletMainCellViewModelTests: TestCase {
self.vm.inputs.configureWith(value: (project, .discovery))
self.vm.inputs.awakeFromNib()

XCTAssertEqual(self.dataLakeTrackingClient.events, [])
XCTAssertEqual(self.segmentTrackingClient.events, [])
XCTAssertEqual(self.dataLakeTrackingClient.events, ["Page Viewed"])
XCTAssertEqual(self.segmentTrackingClient.events, ["Page Viewed"])

self.vm.inputs.readMoreButtonTapped()

XCTAssertEqual(
self.dataLakeTrackingClient.events,
["Page Viewed"],
["Page Viewed", "CTA Clicked"],
"Event is tracked"
)
XCTAssertEqual(
self.segmentTrackingClient.events,
["Page Viewed"],
["Page Viewed", "CTA Clicked"],
"Event is tracked"
)

XCTAssertEqual(
self.dataLakeTrackingClient.properties(forKey: "optimizely_api_key"),
[nil],
"Event does not include Optimizely properties"
)
XCTAssertEqual(
self.dataLakeTrackingClient.properties(forKey: "optimizely_environment"),
[nil],
"Event does not include Optimizely properties"
)
XCTAssertEqual(
self.dataLakeTrackingClient.properties(forKey: "optimizely_experiments"),
[nil],
"Event does not include Optimizely properties"
)
XCTAssertEqual(
self.segmentTrackingClient.properties(forKey: "optimizely_api_key"),
[nil],
"Event does not include Optimizely properties"
)
XCTAssertEqual(
self.segmentTrackingClient.properties(forKey: "optimizely_environment"),
[nil],
"Event does not include Optimizely properties"
)
XCTAssertEqual(
self.segmentTrackingClient.properties(forKey: "optimizely_experiments"),
[nil],
"Event does not include Optimizely properties"
)
}
}

Expand Down Expand Up @@ -662,13 +631,6 @@ final class ProjectPamphletMainCellViewModelTests: TestCase {
self.vm.inputs.configureWith(value: (project, .discovery))
self.vm.inputs.awakeFromNib()

XCTAssertEqual(self.dataLakeTrackingClient.events, [])
XCTAssertEqual(self.segmentTrackingClient.events, [])

self.vm.inputs.readMoreButtonTapped()

self.notifyDelegateToGoToCampaignWithProject.assertValues([project])
tobitech marked this conversation as resolved.
Show resolved Hide resolved

XCTAssertEqual(self.dataLakeTrackingClient.events, ["Page Viewed"])
XCTAssertEqual(self.segmentTrackingClient.events, ["Page Viewed"])

Expand Down