-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
DashboardViewControllerTests.swift
122 lines (99 loc) · 4.85 KB
/
DashboardViewControllerTests.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import Prelude
@testable import Kickstarter_Framework
@testable import KsApi
@testable import Library
internal final class DashboardViewControllerTests: TestCase {
override func setUp() {
super.setUp()
let project = cosmicSurgery
|> Project.lens.dates.launchedAt .~ (self.dateType.init().timeIntervalSince1970 - 60 * 60 * 24 * 14)
|> Project.lens.dates.deadline .~ (self.dateType.init().timeIntervalSince1970 + 60 * 60 * 24 * 14)
AppEnvironment.pushEnvironment(
apiService: MockService(
fetchProjectsResponse: [project],
fetchProjectStatsResponse: .template
|> ProjectStatsEnvelope.lens.cumulativeStats .~ cumulativeStats
|> ProjectStatsEnvelope.lens.referralDistribution .~ referrerStats
|> ProjectStatsEnvelope.lens.rewardDistribution .~ rewardStats
|> ProjectStatsEnvelope.lens.videoStats .~ videoStats
|> ProjectStatsEnvelope.lens.fundingDistribution .~ fundingStats
),
currentUser: project.creator,
mainBundle: Bundle.framework
)
UIView.setAnimationsEnabled(false)
}
override func tearDown() {
AppEnvironment.popEnvironment()
UIView.setAnimationsEnabled(true)
super.tearDown()
}
func testView() {
combos(Language.allLanguages, [Device.phone4_7inch, Device.pad]).forEach { language, device in
withEnvironment(language: language) {
let controller = DashboardViewController.instantiate()
let (parent, _) = traitControllers(device: device, orientation: .portrait, child: controller)
parent.view.frame.size.height = device == .pad ? 2_150 : 2_000
self.scheduler.run()
FBSnapshotVerifyView(parent.view, identifier: "lang_\(language)_device_\(device)")
}
}
}
}
private let rewards = (1...6).map {
.template
|> Reward.lens.backersCount .~ ($0 * 5)
|> Reward.lens.id .~ $0
|> Reward.lens.minimum .~ ($0 * 4)
}
private let externalReferrerStats = .template
|> ProjectStatsEnvelope.ReferrerStats.lens.backersCount .~ 5
|> ProjectStatsEnvelope.ReferrerStats.lens.code .~ "direct"
|> ProjectStatsEnvelope.ReferrerStats.lens.percentageOfDollars .~ 0.25
|> ProjectStatsEnvelope.ReferrerStats.lens.pledged .~ 25
|> ProjectStatsEnvelope.ReferrerStats.lens.referrerName .~ "Direct traffic"
|> ProjectStatsEnvelope.ReferrerStats.lens.referrerType .~ .external
private let internalReferrerStats = .template
|> ProjectStatsEnvelope.ReferrerStats.lens.backersCount .~ 10
|> ProjectStatsEnvelope.ReferrerStats.lens.code .~ "search"
|> ProjectStatsEnvelope.ReferrerStats.lens.percentageOfDollars .~ 0.4
|> ProjectStatsEnvelope.ReferrerStats.lens.pledged .~ 40
|> ProjectStatsEnvelope.ReferrerStats.lens.referrerName .~ "Search"
|> ProjectStatsEnvelope.ReferrerStats.lens.referrerType .~ .`internal`
private let customReferrerStats = .template
|> ProjectStatsEnvelope.ReferrerStats.lens.backersCount .~ 25
|> ProjectStatsEnvelope.ReferrerStats.lens.code .~ "dfg"
|> ProjectStatsEnvelope.ReferrerStats.lens.percentageOfDollars .~ 0.35
|> ProjectStatsEnvelope.ReferrerStats.lens.pledged .~ 35
|> ProjectStatsEnvelope.ReferrerStats.lens.referrerName .~ "Dfg"
|> ProjectStatsEnvelope.ReferrerStats.lens.referrerType .~ .`custom`
private let referrerStats = [externalReferrerStats, internalReferrerStats, customReferrerStats]
private let rewardStats = (1...6).map {
.template
|> ProjectStatsEnvelope.RewardStats.lens.backersCount .~ ($0 * 5)
|> ProjectStatsEnvelope.RewardStats.lens.id .~ $0
|> ProjectStatsEnvelope.RewardStats.lens.minimum .~ ($0 * 4)
|> ProjectStatsEnvelope.RewardStats.lens.pledged .~ ($0 * $0 * 4 * 5)
}
private let videoStats = .template
|> ProjectStatsEnvelope.VideoStats.lens.externalCompletions .~ 51
|> ProjectStatsEnvelope.VideoStats.lens.externalStarts .~ 212
|> ProjectStatsEnvelope.VideoStats.lens.internalCompletions .~ 751
|> ProjectStatsEnvelope.VideoStats.lens.internalStarts .~ 1000
private let cumulativeStats = .template
|> ProjectStatsEnvelope.CumulativeStats.lens.pledged .~ rewardStats.reduce(0) { $0 + $1.pledged }
|> ProjectStatsEnvelope.CumulativeStats.lens.averagePledge .~ 5
private let cosmicSurgery = .cosmicSurgery
|> Project.lens.stats.pledged .~ cumulativeStats.pledged
|> Project.lens.memberData.lastUpdatePublishedAt .~ 1477581146
|> Project.lens.memberData.unreadMessagesCount .~ 42
|> Project.lens.memberData.unseenActivityCount .~ 1_299
|> Project.lens.memberData.permissions .~ [.post, .viewPledges]
|> Project.lens.rewards .~ rewards
private let stats = [3_000, 4_000, 5_000, 7_000, 8_000, 13_000, 14_000, 15_000, 17_000, 18_000]
private let fundingStats = stats.enumerated().map { idx, pledged in
.template
|> ProjectStatsEnvelope.FundingDateStats.lens.cumulativePledged .~ pledged
|> ProjectStatsEnvelope.FundingDateStats.lens.date
.~ (cosmicSurgery.dates.launchedAt + TimeInterval(idx * 86_400))
}