@@ -116,205 +116,6 @@ final class StoreStatsPeriodViewModelTests: XCTestCase {
116116 XCTAssertEqual ( conversionStatsTextValues, [ " - " , " 20% " ] ) // order count: 3, visitor count: 15 => 0.2 (20%)
117117 }
118118
119- func test_placeholder_conversionStatsText_is_emitted_when_visitor_count_is_zero( ) {
120- // Given
121- let timeRange : StatsTimeRangeV4 = . today
122- let viewModel = createViewModel ( timeRange: timeRange)
123- observeStatsEmittedValues ( viewModel: viewModel)
124-
125- // When
126- let siteVisitStats = Yosemite . SiteVisitStats. fake ( ) . copy ( siteID: siteID, items: [
127- . fake( ) . copy ( visitors: 0 )
128- ] )
129- insertSiteVisitStats ( siteVisitStats, timeRange: timeRange)
130-
131- XCTAssertEqual ( conversionStatsTextValues, [ " - " ] )
132-
133- let orderStats = OrderStatsV4 ( siteID: siteID,
134- granularity: timeRange. intervalGranularity,
135- totals: . fake( ) . copy ( totalOrders: 3 , grossRevenue: 62.7 ) ,
136- intervals: [ . fake( ) ] )
137- insertOrderStats ( orderStats, timeRange: timeRange)
138-
139- // Then
140- XCTAssertEqual ( conversionStatsTextValues, [ " - " , " 0% " ] )
141- }
142-
143- func test_conversionStatsText_shows_one_decimal_point_when_percentage_value_has_two_decimal_points( ) {
144- // Given
145- let timeRange : StatsTimeRangeV4 = . today
146- let viewModel = createViewModel ( timeRange: timeRange)
147- observeStatsEmittedValues ( viewModel: viewModel)
148-
149- // When
150- let siteVisitStats = Yosemite . SiteVisitStats. fake ( ) . copy ( siteID: siteID, items: [
151- . fake( ) . copy ( visitors: 10000 )
152- ] )
153- insertSiteVisitStats ( siteVisitStats, timeRange: timeRange)
154-
155- XCTAssertEqual ( conversionStatsTextValues, [ " - " ] )
156-
157- let orderStats = OrderStatsV4 ( siteID: siteID,
158- granularity: timeRange. intervalGranularity,
159- totals: . fake( ) . copy ( totalOrders: 3557 , grossRevenue: 62.7 ) ,
160- intervals: [ . fake( ) ] )
161- insertOrderStats ( orderStats, timeRange: timeRange)
162-
163- // Then
164- XCTAssertEqual ( conversionStatsTextValues, [ " - " , " 35.6% " ] ) // order count: 3557, visitor count: 10000 => 0.3557 (35.57%)
165- }
166-
167- func test_conversionStatsText_shows_no_decimal_point_when_percentage_value_is_integer( ) {
168- // Given
169- let timeRange : StatsTimeRangeV4 = . today
170- let viewModel = createViewModel ( timeRange: timeRange)
171- observeStatsEmittedValues ( viewModel: viewModel)
172-
173- // When
174- let siteVisitStats = Yosemite . SiteVisitStats. fake ( ) . copy ( siteID: siteID, items: [
175- . fake( ) . copy ( visitors: 10 )
176- ] )
177- insertSiteVisitStats ( siteVisitStats, timeRange: timeRange)
178-
179- XCTAssertEqual ( conversionStatsTextValues, [ " - " ] )
180-
181- let orderStats = OrderStatsV4 ( siteID: siteID,
182- granularity: timeRange. intervalGranularity,
183- totals: . fake( ) . copy ( totalOrders: 3 , grossRevenue: 62.7 ) ,
184- intervals: [ . fake( ) ] )
185- insertOrderStats ( orderStats, timeRange: timeRange)
186-
187- // Then
188- XCTAssertEqual ( conversionStatsTextValues, [ " - " , " 30% " ] ) // order count: 3, visitor count: 10 => 0.3 (30%)
189- }
190-
191- // MARK: - Stats text values while selecting a time interval
192-
193- func test_orderStatsText_and_revenueStatsText_are_emitted_after_order_stats_updated_with_selected_interval( ) {
194- // Given
195- let timeRange : StatsTimeRangeV4 = . today
196- let viewModel = createViewModel ( timeRange: timeRange)
197- observeStatsEmittedValues ( viewModel: viewModel)
198-
199- XCTAssertEqual ( orderStatsTextValues, [ " - " ] )
200- XCTAssertEqual ( revenueStatsTextValues, [ " - " ] )
201- XCTAssertEqual ( visitorStatsTextValues, [ " - " ] )
202- XCTAssertEqual ( conversionStatsTextValues, [ " - " ] )
203-
204- // When
205- let orderStats = OrderStatsV4 ( siteID: siteID,
206- granularity: timeRange. intervalGranularity,
207- totals: . fake( ) . copy ( totalOrders: 3 , grossRevenue: 62.7 ) ,
208- intervals: [ . fake( ) . copy ( dateStart: " 2019-07-09 01:00:00 " ,
209- dateEnd: " 2019-07-09 01:59:59 " ,
210- subtotals: . fake( ) . copy ( totalOrders: 1 , grossRevenue: 25 ) ) ,
211- . fake( ) . copy ( dateStart: " 2019-07-09 00:00:00 " ,
212- dateEnd: " 2019-07-09 00:59:59 " ,
213- subtotals: . fake( ) . copy ( totalOrders: 2 , grossRevenue: 31 ) )
214- ] )
215- insertOrderStats ( orderStats, timeRange: timeRange)
216-
217- viewModel. selectedIntervalIndex = 1 // Corresponds to the second earliest interval, which is the first interval in `OrderStatsV4`.
218-
219- // Then
220- XCTAssertEqual ( orderStatsTextValues, [ " - " , " 3 " , " 1 " ] )
221- XCTAssertEqual ( revenueStatsTextValues, [ " - " , " $62.70 " , " $25 " ] )
222- XCTAssertEqual ( visitorStatsTextValues, [ " - " ] )
223- XCTAssertEqual ( conversionStatsTextValues, [ " - " ] )
224- }
225-
226- func test_revenueStatsText_does_not_show_decimal_points_for_integer_value( ) {
227- // Given
228- let timeRange : StatsTimeRangeV4 = . today
229- let viewModel = createViewModel ( timeRange: timeRange)
230- observeStatsEmittedValues ( viewModel: viewModel)
231-
232- XCTAssertEqual ( revenueStatsTextValues, [ " - " ] )
233-
234- // When
235- let orderStats = OrderStatsV4 ( siteID: siteID,
236- granularity: timeRange. intervalGranularity,
237- totals: . fake( ) . copy ( totalOrders: 3 , grossRevenue: 62 ) ,
238- intervals: [ ] )
239- insertOrderStats ( orderStats, timeRange: timeRange)
240-
241- // Then
242- XCTAssertEqual ( revenueStatsTextValues, [ " - " , " $62 " ] )
243- }
244-
245- func test_revenueStatsText_show_decimal_points_from_currency_settings_for_noninteger_value( ) {
246- // Given
247- let timeRange : StatsTimeRangeV4 = . today
248- let viewModel = createViewModel ( timeRange: timeRange)
249- observeStatsEmittedValues ( viewModel: viewModel)
250-
251- XCTAssertEqual ( revenueStatsTextValues, [ " - " ] )
252-
253- // When
254- let orderStats = OrderStatsV4 ( siteID: siteID,
255- granularity: timeRange. intervalGranularity,
256- totals: . fake( ) . copy ( totalOrders: 3 , grossRevenue: 62.856 ) ,
257- intervals: [ ] )
258- insertOrderStats ( orderStats, timeRange: timeRange)
259-
260- // Then
261- XCTAssertEqual ( revenueStatsTextValues, [ " - " , " $62.86 " ] )
262- }
263-
264- func test_visitorStatsText_is_emitted_after_visitor_stats_updated_with_selected_interval( ) {
265- // Given
266- let timeRange : StatsTimeRangeV4 = . today
267- let viewModel = createViewModel ( timeRange: timeRange)
268- observeStatsEmittedValues ( viewModel: viewModel)
269-
270- XCTAssertEqual ( orderStatsTextValues, [ " - " ] )
271- XCTAssertEqual ( revenueStatsTextValues, [ " - " ] )
272- XCTAssertEqual ( visitorStatsTextValues, [ " - " ] )
273- XCTAssertEqual ( conversionStatsTextValues, [ " - " ] )
274-
275- // When
276- let siteVisitStats = Yosemite . SiteVisitStats. fake ( ) . copy ( siteID: siteID, items: [
277- . fake( ) . copy ( period: " 1 " , visitors: 17 ) ,
278- . fake( ) . copy ( period: " 0 " , visitors: 5 )
279- ] )
280- insertSiteVisitStats ( siteVisitStats, timeRange: timeRange)
281-
282- // Corresponds to the second in intervals sorted by period, which is the first interval in `SiteVisitStats`.
283- viewModel. selectedIntervalIndex = 1
284-
285- // Then
286- XCTAssertEqual ( orderStatsTextValues, [ " - " ] )
287- XCTAssertEqual ( revenueStatsTextValues, [ " - " ] )
288- XCTAssertEqual ( visitorStatsTextValues, [ " - " , " 22 " , " 17 " ] )
289- XCTAssertEqual ( conversionStatsTextValues, [ " - " ] )
290- }
291-
292- func test_conversionStatsText_is_emitted_after_order_and_visitor_stats_updated_with_selected_interval( ) {
293- // Given
294- let timeRange : StatsTimeRangeV4 = . today
295- let viewModel = createViewModel ( timeRange: timeRange)
296- observeStatsEmittedValues ( viewModel: viewModel)
297-
298- // When
299- let siteVisitStats = Yosemite . SiteVisitStats. fake ( ) . copy ( siteID: siteID, items: [
300- . fake( ) . copy ( visitors: 10 ) ,
301- ] )
302- insertSiteVisitStats ( siteVisitStats, timeRange: timeRange)
303-
304- XCTAssertEqual ( conversionStatsTextValues, [ " - " ] )
305-
306- let orderStats = OrderStatsV4 ( siteID: siteID,
307- granularity: timeRange. intervalGranularity,
308- totals: . fake( ) . copy ( totalOrders: 2 , grossRevenue: 62.7 ) ,
309- intervals: [ . fake( ) . copy ( subtotals: . fake( ) . copy ( totalOrders: 1 , grossRevenue: 25 ) ) ] )
310- insertOrderStats ( orderStats, timeRange: timeRange)
311-
312- viewModel. selectedIntervalIndex = 0
313-
314- // Then
315- XCTAssertEqual ( conversionStatsTextValues, [ " - " , " 20% " , " 10% " ] )
316- }
317-
318119 // MARK: `StatsTimeRangeBarViewModel`
319120
320121 func test_timeRangeBarViewModel_for_today_is_emitted_twice_after_order_and_visitor_stats_updated_and_selecting_interval( ) {
0 commit comments