From f7626114bb5ab1fcb7fe4f5a7e3e747862e3a272 Mon Sep 17 00:00:00 2001 From: Hari Singh <15615702+singhhari@users.noreply.github.com> Date: Mon, 22 Mar 2021 14:40:54 -0400 Subject: [PATCH 1/5] Decoding tags property in Project model. --- KsApi/models/Project.swift | 3 + KsApi/models/lenses/ProjectLenses.swift | 63 +++++++++++++------ KsApi/models/templates/ProjectTemplates.swift | 1 + 3 files changed, 47 insertions(+), 20 deletions(-) diff --git a/KsApi/models/Project.swift b/KsApi/models/Project.swift index 25a70a82ff..cb528cdb06 100644 --- a/KsApi/models/Project.swift +++ b/KsApi/models/Project.swift @@ -21,6 +21,7 @@ public struct Project { public var staffPick: Bool public var state: State public var stats: Stats + public var tags: [String]? public var urls: UrlsEnvelope public var video: Video? @@ -248,6 +249,7 @@ extension Project: Decodable { case slug case staffPick = "staff_pick" case state + case tags case urls case video } @@ -272,6 +274,7 @@ extension Project: Decodable { self.staffPick = try values.decode(Bool.self, forKey: .staffPick) self.state = try values.decode(State.self, forKey: .state) self.stats = try Project.Stats(from: decoder) + self.tags = try values.decodeIfPresent([String].self, forKey: .tags) self.urls = try values.decode(UrlsEnvelope.self, forKey: .urls) self.video = try values.decodeIfPresent(Video.self, forKey: .video) } diff --git a/KsApi/models/lenses/ProjectLenses.swift b/KsApi/models/lenses/ProjectLenses.swift index edadd17788..c5aa7d5c75 100644 --- a/KsApi/models/lenses/ProjectLenses.swift +++ b/KsApi/models/lenses/ProjectLenses.swift @@ -9,7 +9,8 @@ extension Project { creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $1.id, location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $1.staffPick, state: $1.state, stats: $1.stats, urls: $1.urls, video: $1.video + staffPick: $1.staffPick, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, + video: $1.video ) } ) @@ -20,7 +21,7 @@ extension Project { creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $1.id, location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, staffPick: - $1.staffPick, state: $1.state, stats: $1.stats, urls: $1.urls, video: $1.video + $1.staffPick, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, video: $1.video ) } ) @@ -31,7 +32,7 @@ extension Project { country: $1.country, creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $1.id, location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $0, state: $1.state, stats: $1.stats, urls: $1.urls, video: $1.video + staffPick: $0, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, video: $1.video ) } ) @@ -42,7 +43,8 @@ extension Project { creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $1.id, location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $1.staffPick, state: $1.state, stats: $1.stats, urls: $1.urls, video: $1.video + staffPick: $1.staffPick, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, + video: $1.video ) } ) @@ -53,7 +55,8 @@ extension Project { creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $1.id, location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $1.staffPick, state: $1.state, stats: $1.stats, urls: $1.urls, video: $1.video + staffPick: $1.staffPick, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, + video: $1.video ) } ) @@ -64,7 +67,8 @@ extension Project { country: $1.country, creator: $0, memberData: $1.memberData, dates: $1.dates, id: $1.id, location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $1.staffPick, state: $1.state, stats: $1.stats, urls: $1.urls, video: $1.video + staffPick: $1.staffPick, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, + video: $1.video ) } ) @@ -75,7 +79,8 @@ extension Project { country: $1.country, creator: $1.creator, memberData: $1.memberData, dates: $0, id: $1.id, location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $1.staffPick, state: $1.state, stats: $1.stats, urls: $1.urls, video: $1.video + staffPick: $1.staffPick, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, + video: $1.video ) } ) @@ -86,7 +91,8 @@ extension Project { country: $1.country, creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $0, location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $1.staffPick, state: $1.state, stats: $1.stats, urls: $1.urls, video: $1.video + staffPick: $1.staffPick, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, + video: $1.video ) } ) @@ -97,7 +103,8 @@ extension Project { country: $1.country, creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $1.id, location: $0, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $1.staffPick, state: $1.state, stats: $1.stats, urls: $1.urls, video: $1.video + staffPick: $1.staffPick, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, + video: $1.video ) } ) @@ -108,7 +115,8 @@ extension Project { country: $1.country, creator: $1.creator, memberData: $0, dates: $1.dates, id: $1.id, location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $1.staffPick, state: $1.state, stats: $1.stats, urls: $1.urls, video: $1.video + staffPick: $1.staffPick, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, + video: $1.video ) } ) @@ -119,7 +127,8 @@ extension Project { country: $1.country, creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $1.id, location: $1.location, name: $0, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $1.staffPick, state: $1.state, stats: $1.stats, urls: $1.urls, video: $1.video + staffPick: $1.staffPick, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, + video: $1.video ) } ) @@ -130,7 +139,8 @@ extension Project { country: $1.country, creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $1.id, location: $1.location, name: $1.name, personalization: $0, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $1.staffPick, state: $1.state, stats: $1.stats, urls: $1.urls, video: $1.video + staffPick: $1.staffPick, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, + video: $1.video ) } ) @@ -141,7 +151,8 @@ extension Project { country: $1.country, creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $1.id, location: $1.location, name: $1.name, personalization: $1.personalization, photo: $0, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $1.staffPick, state: $1.state, stats: $1.stats, urls: $1.urls, video: $1.video + staffPick: $1.staffPick, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, + video: $1.video ) } ) @@ -152,7 +163,8 @@ extension Project { country: $1.country, creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $1.id, location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $0, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $1.staffPick, state: $1.state, stats: $1.stats, urls: $1.urls, video: $1.video + staffPick: $1.staffPick, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, + video: $1.video ) } ) @@ -163,7 +175,7 @@ extension Project { country: $1.country, creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $1.id, location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $0, slug: $1.slug, staffPick: $1.staffPick, - state: $1.state, stats: $1.stats, urls: $1.urls, video: $1.video + state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, video: $1.video ) } ) @@ -175,7 +187,7 @@ extension Project { location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $0, staffPick: $1.staffPick, - state: $1.state, stats: $1.stats, urls: $1.urls, video: $1.video + state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, video: $1.video ) } ) @@ -186,7 +198,7 @@ extension Project { country: $1.country, creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $1.id, location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $1.staffPick, state: $0, stats: $1.stats, urls: $1.urls, video: $1.video + staffPick: $1.staffPick, state: $0, stats: $1.stats, tags: $1.tags, urls: $1.urls, video: $1.video ) } ) @@ -197,7 +209,18 @@ extension Project { country: $1.country, creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $1.id, location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $1.staffPick, state: $1.state, stats: $0, urls: $1.urls, video: $1.video + staffPick: $1.staffPick, state: $1.state, stats: $0, tags: $1.tags, urls: $1.urls, video: $1.video + ) } + ) + + public static let tags = Lens( + view: { $0.tags }, + set: { Project( + availableCardTypes: $1.availableCardTypes, blurb: $1.blurb, category: $1.category, + country: $1.country, creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $1.id, + location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, + staffPick: $1.staffPick, state: $1.state, stats: $1.stats, tags: $0, urls: $1.urls, video: $1.video ) } ) @@ -208,7 +231,7 @@ extension Project { country: $1.country, creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $1.id, location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $1.staffPick, state: $1.state, stats: $1.stats, urls: $0, video: $1.video + staffPick: $1.staffPick, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $0, video: $1.video ) } ) @@ -219,7 +242,7 @@ extension Project { country: $1.country, creator: $1.creator, memberData: $1.memberData, dates: $1.dates, id: $1.id, location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, slug: $1.slug, - staffPick: $1.staffPick, state: $1.state, stats: $1.stats, urls: $1.urls, video: $0 + staffPick: $1.staffPick, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, video: $0 ) } ) } diff --git a/KsApi/models/templates/ProjectTemplates.swift b/KsApi/models/templates/ProjectTemplates.swift index edc673c9a3..3b0fa9cdda 100644 --- a/KsApi/models/templates/ProjectTemplates.swift +++ b/KsApi/models/templates/ProjectTemplates.swift @@ -46,6 +46,7 @@ extension Project { staffPick: false, state: .live, stats: .template, + tags: ["Action & Adventure", "Adaptation", "Board Games"], urls: Project.UrlsEnvelope( web: Project.UrlsEnvelope.WebEnvelope( project: "https://www.kickstarter.com/projects/creator/a-fun-project", From 9f162864f5a8b9c1aa5d3d528e313152acb660fe Mon Sep 17 00:00:00 2001 From: Hari Singh <15615702+singhhari@users.noreply.github.com> Date: Mon, 22 Mar 2021 15:13:00 -0400 Subject: [PATCH 2/5] Adding some tests. --- Library/Tracking/KSRAnalytics.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Library/Tracking/KSRAnalytics.swift b/Library/Tracking/KSRAnalytics.swift index 822784d434..95ee43414f 100644 --- a/Library/Tracking/KSRAnalytics.swift +++ b/Library/Tracking/KSRAnalytics.swift @@ -1492,6 +1492,7 @@ private func projectProperties( props["has_video"] = project.video != nil props["prelaunch_activated"] = project.prelaunchActivated props["rewards_count"] = project.rewards.count + props["tags"] = project.tags?.joined(separator: ", ") props["updates_count"] = project.stats.updatesCount let now = dateType.init().date From 67b81cad7dedee0608bbcd615bd9cb6a4b5397d5 Mon Sep 17 00:00:00 2001 From: Hari Singh <15615702+singhhari@users.noreply.github.com> Date: Mon, 22 Mar 2021 15:13:33 -0400 Subject: [PATCH 3/5] Forgot to include these files. --- KsApi/models/ProjectTests.swift | 6 ++++++ Library/Tracking/KSRAnalyticsTests.swift | 26 +++++++++++++++--------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/KsApi/models/ProjectTests.swift b/KsApi/models/ProjectTests.swift index 41106092ab..f963adb755 100644 --- a/KsApi/models/ProjectTests.swift +++ b/KsApi/models/ProjectTests.swift @@ -310,4 +310,10 @@ final class ProjectTests: XCTestCase { XCTAssertTrue(project.stats.goalMet) } + + func testTags() { + let project = Project.template + XCTAssertEqual(3, project.tags?.count) + XCTAssertEqual("Action & Adventure, Adaptation, Board Games", project.tags?.joined(separator: ", ")) + } } diff --git a/Library/Tracking/KSRAnalyticsTests.swift b/Library/Tracking/KSRAnalyticsTests.swift index eda5ec9678..d4a1c96be9 100644 --- a/Library/Tracking/KSRAnalyticsTests.swift +++ b/Library/Tracking/KSRAnalyticsTests.swift @@ -301,13 +301,17 @@ final class KSRAnalyticsTests: TestCase { XCTAssertEqual(10, dataLakeClientProperties?["project_comments_count"] as? Int) XCTAssertEqual(true, dataLakeClientProperties?["project_prelaunch_activated"] as? Bool) XCTAssertEqual(1, dataLakeClientProperties?["project_rewards_count"] as? Int) + XCTAssertEqual( + project.tags?.joined(separator: ", "), + dataLakeClientProperties?["project_tags"] as? String + ) XCTAssertEqual(1, dataLakeClientProperties?["project_updates_count"] as? Int) XCTAssertEqual(false, dataLakeClientProperties?["project_user_is_project_creator"] as? Bool) XCTAssertNil(dataLakeClientProperties?["project_user_is_backer"]) XCTAssertNil(dataLakeClientProperties?["project_user_has_starred"]) - XCTAssertEqual(29, dataLakeClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) + XCTAssertEqual(30, dataLakeClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) XCTAssertEqual("discovery", dataLakeClientProperties?["session_ref_tag"] as? String) XCTAssertEqual("recommended", dataLakeClientProperties?["session_referrer_credit"] as? String) @@ -343,13 +347,14 @@ final class KSRAnalyticsTests: TestCase { XCTAssertEqual(10, segmentClientProperties?["project_comments_count"] as? Int) XCTAssertEqual(true, segmentClientProperties?["project_prelaunch_activated"] as? Bool) XCTAssertEqual(1, segmentClientProperties?["project_rewards_count"] as? Int) + XCTAssertEqual(project.tags?.joined(separator: ", "), segmentClientProperties?["project_tags"] as? String) XCTAssertEqual(1, segmentClientProperties?["project_updates_count"] as? Int) XCTAssertEqual(false, segmentClientProperties?["project_user_is_project_creator"] as? Bool) XCTAssertNil(segmentClientProperties?["project_user_is_backer"]) XCTAssertNil(segmentClientProperties?["project_user_has_starred"]) - XCTAssertEqual(29, segmentClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) + XCTAssertEqual(30, segmentClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) XCTAssertEqual("discovery", segmentClientProperties?["session_ref_tag"] as? String) XCTAssertEqual("recommended", segmentClientProperties?["session_referrer_credit"] as? String) @@ -380,13 +385,13 @@ final class KSRAnalyticsTests: TestCase { XCTAssertEqual(false, dataLakeClientProperties?["project_user_is_backer"] as? Bool) XCTAssertEqual(false, dataLakeClientProperties?["project_user_has_watched"] as? Bool) - XCTAssertEqual(28, dataLakeClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) + XCTAssertEqual(29, dataLakeClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) XCTAssertEqual(false, segmentClientProperties?["project_user_is_project_creator"] as? Bool) XCTAssertEqual(false, segmentClientProperties?["project_user_is_backer"] as? Bool) XCTAssertEqual(false, segmentClientProperties?["project_user_has_watched"] as? Bool) - XCTAssertEqual(28, segmentClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) + XCTAssertEqual(29, segmentClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) } func testProjectProperties_LoggedInBacker() { @@ -413,13 +418,13 @@ final class KSRAnalyticsTests: TestCase { XCTAssertEqual(true, dataLakeClientProperties?["project_user_is_backer"] as? Bool) XCTAssertEqual(false, dataLakeClientProperties?["project_user_has_watched"] as? Bool) - XCTAssertEqual(28, dataLakeClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) + XCTAssertEqual(29, dataLakeClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) XCTAssertEqual(false, segmentClientProperties?["project_user_is_project_creator"] as? Bool) XCTAssertEqual(true, segmentClientProperties?["project_user_is_backer"] as? Bool) XCTAssertEqual(false, segmentClientProperties?["project_user_has_watched"] as? Bool) - XCTAssertEqual(28, segmentClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) + XCTAssertEqual(29, segmentClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) } func testProjectProperties_LoggedInStarrer() { @@ -446,13 +451,13 @@ final class KSRAnalyticsTests: TestCase { XCTAssertEqual(false, dataLakeClientProperties?["project_user_is_backer"] as? Bool) XCTAssertEqual(true, dataLakeClientProperties?["project_user_has_watched"] as? Bool) - XCTAssertEqual(28, dataLakeClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) + XCTAssertEqual(29, dataLakeClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) XCTAssertEqual(false, segmentClientProperties?["project_user_is_project_creator"] as? Bool) XCTAssertEqual(false, segmentClientProperties?["project_user_is_backer"] as? Bool) XCTAssertEqual(true, segmentClientProperties?["project_user_has_watched"] as? Bool) - XCTAssertEqual(28, segmentClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) + XCTAssertEqual(29, segmentClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) } func testProjectProperties_LoggedInCreator() { @@ -479,13 +484,13 @@ final class KSRAnalyticsTests: TestCase { XCTAssertEqual(false, dataLakeClientProperties?["project_user_is_backer"] as? Bool) XCTAssertEqual(false, dataLakeClientProperties?["project_user_has_watched"] as? Bool) - XCTAssertEqual(28, dataLakeClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) + XCTAssertEqual(29, dataLakeClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) XCTAssertEqual(true, segmentClientProperties?["project_user_is_project_creator"] as? Bool) XCTAssertEqual(false, segmentClientProperties?["project_user_is_backer"] as? Bool) XCTAssertEqual(false, segmentClientProperties?["project_user_has_watched"] as? Bool) - XCTAssertEqual(28, segmentClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) + XCTAssertEqual(29, segmentClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) } // MARK: - Discovery Properties Tests @@ -2043,6 +2048,7 @@ final class KSRAnalyticsTests: TestCase { XCTAssertEqual(true, props?["project_has_video"] as? Bool) XCTAssertEqual(10, props?["project_comments_count"] as? Int) XCTAssertEqual(0, props?["project_rewards_count"] as? Int) + XCTAssertEqual("Action & Adventure, Adaptation, Board Games", props?["project_tags"] as? String) XCTAssertEqual(1, props?["project_updates_count"] as? Int) XCTAssertEqual(false, props?["project_user_is_project_creator"] as? Bool) From 36326070378c8d3891baebc88a367c1a627f16e3 Mon Sep 17 00:00:00 2001 From: Hari Singh <15615702+singhhari@users.noreply.github.com> Date: Mon, 22 Mar 2021 15:57:54 -0400 Subject: [PATCH 4/5] Using lens for test. --- KsApi/models/ProjectTests.swift | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/KsApi/models/ProjectTests.swift b/KsApi/models/ProjectTests.swift index f963adb755..99e4d2f981 100644 --- a/KsApi/models/ProjectTests.swift +++ b/KsApi/models/ProjectTests.swift @@ -312,8 +312,9 @@ final class ProjectTests: XCTestCase { } func testTags() { - let project = Project.template + let tags = ["Witchstarter", "Arts", "Games"] + let project = Project.template |> Project.lens.tags .~ tags XCTAssertEqual(3, project.tags?.count) - XCTAssertEqual("Action & Adventure, Adaptation, Board Games", project.tags?.joined(separator: ", ")) + XCTAssertEqual("Witchstarter, Arts, Games", project.tags?.joined(separator: ", ")) } } From aea02181ea62d0ac0ee80e9a1b35094466ba3ad5 Mon Sep 17 00:00:00 2001 From: Hari Singh <15615702+singhhari@users.noreply.github.com> Date: Mon, 22 Mar 2021 16:40:10 -0400 Subject: [PATCH 5/5] Adding project properties coverage. --- Library/Tracking/KSRAnalyticsTests.swift | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Library/Tracking/KSRAnalyticsTests.swift b/Library/Tracking/KSRAnalyticsTests.swift index d4a1c96be9..a9b77a4ddd 100644 --- a/Library/Tracking/KSRAnalyticsTests.swift +++ b/Library/Tracking/KSRAnalyticsTests.swift @@ -384,12 +384,17 @@ final class KSRAnalyticsTests: TestCase { XCTAssertEqual(false, dataLakeClientProperties?["project_user_is_project_creator"] as? Bool) XCTAssertEqual(false, dataLakeClientProperties?["project_user_is_backer"] as? Bool) XCTAssertEqual(false, dataLakeClientProperties?["project_user_has_watched"] as? Bool) + XCTAssertEqual( + project.tags?.joined(separator: ", "), + dataLakeClientProperties?["project_tags"] as? String + ) XCTAssertEqual(29, dataLakeClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) XCTAssertEqual(false, segmentClientProperties?["project_user_is_project_creator"] as? Bool) XCTAssertEqual(false, segmentClientProperties?["project_user_is_backer"] as? Bool) XCTAssertEqual(false, segmentClientProperties?["project_user_has_watched"] as? Bool) + XCTAssertEqual(project.tags?.joined(separator: ", "), segmentClientProperties?["project_tags"] as? String) XCTAssertEqual(29, segmentClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) } @@ -417,12 +422,17 @@ final class KSRAnalyticsTests: TestCase { XCTAssertEqual(false, dataLakeClientProperties?["project_user_is_project_creator"] as? Bool) XCTAssertEqual(true, dataLakeClientProperties?["project_user_is_backer"] as? Bool) XCTAssertEqual(false, dataLakeClientProperties?["project_user_has_watched"] as? Bool) + XCTAssertEqual( + project.tags?.joined(separator: ", "), + dataLakeClientProperties?["project_tags"] as? String + ) XCTAssertEqual(29, dataLakeClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) XCTAssertEqual(false, segmentClientProperties?["project_user_is_project_creator"] as? Bool) XCTAssertEqual(true, segmentClientProperties?["project_user_is_backer"] as? Bool) XCTAssertEqual(false, segmentClientProperties?["project_user_has_watched"] as? Bool) + XCTAssertEqual(project.tags?.joined(separator: ", "), segmentClientProperties?["project_tags"] as? String) XCTAssertEqual(29, segmentClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) } @@ -450,12 +460,17 @@ final class KSRAnalyticsTests: TestCase { XCTAssertEqual(false, dataLakeClientProperties?["project_user_is_project_creator"] as? Bool) XCTAssertEqual(false, dataLakeClientProperties?["project_user_is_backer"] as? Bool) XCTAssertEqual(true, dataLakeClientProperties?["project_user_has_watched"] as? Bool) + XCTAssertEqual( + project.tags?.joined(separator: ", "), + dataLakeClientProperties?["project_tags"] as? String + ) XCTAssertEqual(29, dataLakeClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) XCTAssertEqual(false, segmentClientProperties?["project_user_is_project_creator"] as? Bool) XCTAssertEqual(false, segmentClientProperties?["project_user_is_backer"] as? Bool) XCTAssertEqual(true, segmentClientProperties?["project_user_has_watched"] as? Bool) + XCTAssertEqual(project.tags?.joined(separator: ", "), segmentClientProperties?["project_tags"] as? String) XCTAssertEqual(29, segmentClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) } @@ -483,12 +498,17 @@ final class KSRAnalyticsTests: TestCase { XCTAssertEqual(true, dataLakeClientProperties?["project_user_is_project_creator"] as? Bool) XCTAssertEqual(false, dataLakeClientProperties?["project_user_is_backer"] as? Bool) XCTAssertEqual(false, dataLakeClientProperties?["project_user_has_watched"] as? Bool) + XCTAssertEqual( + project.tags?.joined(separator: ", "), + dataLakeClientProperties?["project_tags"] as? String + ) XCTAssertEqual(29, dataLakeClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) XCTAssertEqual(true, segmentClientProperties?["project_user_is_project_creator"] as? Bool) XCTAssertEqual(false, segmentClientProperties?["project_user_is_backer"] as? Bool) XCTAssertEqual(false, segmentClientProperties?["project_user_has_watched"] as? Bool) + XCTAssertEqual(project.tags?.joined(separator: ", "), segmentClientProperties?["project_tags"] as? String) XCTAssertEqual(29, segmentClientProperties?.keys.filter { $0.hasPrefix("project_") }.count) }