Skip to content

Commit

Permalink
[NT-483] View manage pledge event (#932)
Browse files Browse the repository at this point in the history
* cta property added with manage options click event

* implemented tracking

* tests

* spacing

* swift format

* alphabetize/refactor

* swiftformat
  • Loading branch information
cdolm92 authored Nov 11, 2019
1 parent 17b532a commit 3409c87
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 0 deletions.
27 changes: 27 additions & 0 deletions Library/Koala/Koala.swift
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,26 @@ public final class Koala {
}
}

public enum ManagePledgeMenuCTAType {
case cancelPledge
case changePaymentMethod
case chooseAnotherReward
case contactCreator
case updatePledge
case viewRewards

var trackingString: String {
switch self {
case .cancelPledge: return "cancel_pledge"
case .changePaymentMethod: return "change_payment_method"
case .chooseAnotherReward: return "choose_another_reward"
case .contactCreator: return "contact_creator"
case .updatePledge: return "update_pledge"
case .viewRewards: return "view_rewards"
}
}
}

/**
Describes the buttons the user can click on in the reward pledge screen.

Expand Down Expand Up @@ -620,6 +640,13 @@ public final class Koala {
self.track(event: "Update Pledge Button Clicked", properties: props)
}

public func trackManagePledgeOptionClicked(project: Project, managePledgeMenuCTA: ManagePledgeMenuCTAType) {
let props = properties(project: project, loggedInUser: self.loggedInUser)
.withAllValuesFrom(["cta": managePledgeMenuCTA.trackingString])

self.track(event: "Manage Pledge Option Clicked", properties: props)
}

public func trackSelectRewardButtonClicked(
project: Project,
reward: Reward?,
Expand Down
54 changes: 54 additions & 0 deletions Library/Koala/KoalaTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -642,4 +642,58 @@ final class KoalaTests: TestCase {

XCTAssertEqual(["Add New Card Button Clicked"], client.events)
}

func testTrackManagePledgeOptionClicked_CancelPledgeSelected() {
self.assertManagePledgeOptionClickedProperties(of: .cancelPledge, property: "cancel_pledge")
}

func testTrackManagaPledgeOptionClicked_ChangePaymentMethod() {
self.assertManagePledgeOptionClickedProperties(
of: .changePaymentMethod,
property: "change_payment_method"
)
}

func testTrackManagaPledgeOptionClicked_ChooseAnotherReward() {
self.assertManagePledgeOptionClickedProperties(
of: .chooseAnotherReward,
property: "choose_another_reward"
)
}

func testTrackManagaPledgeOptionClicked_ContactCreator() {
self.assertManagePledgeOptionClickedProperties(
of: .contactCreator,
property: "contact_creator"
)
}

func testTrackManagaPledgeOptionClicked_UpdatePledge() {
self.assertManagePledgeOptionClickedProperties(
of: .updatePledge,
property: "update_pledge"
)
}

func testTrackManagaPledgeOptionClicked_ViewRewards() {
self.assertManagePledgeOptionClickedProperties(
of: .viewRewards,
property: "view_rewards"
)
}

private func assertManagePledgeOptionClickedProperties(
of type: Koala.ManagePledgeMenuCTAType,
property: String
) {
let client = MockTrackingClient()
let loggedInUser = User.template
let koala = Koala(client: client, loggedInUser: loggedInUser)

koala.trackManagePledgeOptionClicked(project: .template, managePledgeMenuCTA: type)

let properties = client.properties.last
XCTAssertEqual(["Manage Pledge Option Clicked"], client.events)
XCTAssertEqual(property, properties?["cta"] as? String)
}
}
21 changes: 21 additions & 0 deletions Library/ViewModels/ManagePledgeViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,16 @@ public final class ManagePledgeViewModel:
.takeWhen(cancelPledgeSelected)
// swiftlint:disable:next line_length
.map { _ in Strings.We_dont_allow_cancelations_that_will_cause_a_project_to_fall_short_of_its_goal_within_the_last_24_hours() }

let managePledgeMenuType: Signal<Koala.ManagePledgeMenuCTAType, Never> = self.menuOptionSelectedSignal
.map(managePledgeMenuCTAType(for:))

// Tracking
project
.takePairWhen(managePledgeMenuType)
.observeValues {
AppEnvironment.current.koala.trackManagePledgeOptionClicked(project: $0, managePledgeMenuCTA: $1)
}
}

private let (configureWithProjectSignal, configureWithProjectObserver) = Signal<Project, Never>.pipe()
Expand Down Expand Up @@ -190,3 +200,14 @@ public final class ManagePledgeViewModel:
private func navigationBarTitle(with project: Project) -> String {
return project.state == .live ? Strings.Manage_your_pledge() : Strings.Your_pledge()
}

private func managePledgeMenuCTAType(for managePledgeAlertAction: ManagePledgeAlertAction)
-> Koala.ManagePledgeMenuCTAType {
switch managePledgeAlertAction {
case .cancelPledge: return .cancelPledge
case .changePaymentMethod: return .changePaymentMethod
case .chooseAnotherReward: return .chooseAnotherReward
case .contactCreator: return .contactCreator
case .updatePledge: return .updatePledge
}
}
15 changes: 15 additions & 0 deletions Library/ViewModels/ManagePledgeViewModelTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -488,4 +488,19 @@ internal final class ManagePledgeViewModelTests: TestCase {
self.title.assertValueCount(2)
}
}

func testTrackingEvents() {
let project = Project.template
|> Project.lens.personalization.backing .~ Backing.template

self.vm.inputs.configureWith(project)
self.vm.inputs.viewDidLoad()

XCTAssertEqual([], self.trackingClient.events)

self.vm.inputs.menuButtonTapped()
self.vm.inputs.menuOptionSelected(with: .updatePledge)

XCTAssertEqual(["Manage Pledge Option Clicked"], self.trackingClient.events)
}
}

0 comments on commit 3409c87

Please sign in to comment.