@@ -62,6 +62,18 @@ final class StatsDataTextFormatterTests: XCTestCase {
6262 XCTAssertEqual ( totalRevenue, " $25 " )
6363 }
6464
65+ func test_createTotalRevenueDelta_returns_expected_delta_text( ) {
66+ // Given
67+ let previousOrderStats = OrderStatsV4 . fake ( ) . copy ( totals: . fake( ) . copy ( grossRevenue: 10 ) )
68+ let currentOrderStats = OrderStatsV4 . fake ( ) . copy ( totals: . fake( ) . copy ( grossRevenue: 15 ) )
69+
70+ // When
71+ let totalRevenueDelta = StatsDataTextFormatter . createTotalRevenueDelta ( from: previousOrderStats, to: currentOrderStats)
72+
73+ // Then
74+ XCTAssertEqual ( totalRevenueDelta, " +50% " )
75+ }
76+
6577 // MARK: Orders Stats
6678
6779 func test_createOrderCountText_returns_expected_order_count( ) {
@@ -94,6 +106,18 @@ final class StatsDataTextFormatterTests: XCTestCase {
94106 XCTAssertEqual ( orderCount, " 1 " )
95107 }
96108
109+ func test_createOrderCountDelta_returns_expected_delta_text( ) {
110+ // Given
111+ let previousOrderStats = OrderStatsV4 . fake ( ) . copy ( totals: . fake( ) . copy ( totalOrders: 10 ) )
112+ let currentOrderStats = OrderStatsV4 . fake ( ) . copy ( totals: . fake( ) . copy ( totalOrders: 15 ) )
113+
114+ // When
115+ let orderCountDelta = StatsDataTextFormatter . createOrderCountDelta ( from: previousOrderStats, to: currentOrderStats)
116+
117+ // Then
118+ XCTAssertEqual ( orderCountDelta, " +50% " )
119+ }
120+
97121 func test_createAverageOrderValueText_does_not_return_decimal_points_for_integer_value( ) {
98122 // Given
99123 let orderStats = OrderStatsV4 . fake ( ) . copy ( totals: . fake( ) . copy ( averageOrderValue: 62 ) )
@@ -120,6 +144,18 @@ final class StatsDataTextFormatterTests: XCTestCase {
120144 XCTAssertEqual ( averageOrderValue, " $62.86 " )
121145 }
122146
147+ func test_createAverageOrderValueDelta_returns_expected_delta_text( ) {
148+ // Given
149+ let previousOrderStats = OrderStatsV4 . fake ( ) . copy ( totals: . fake( ) . copy ( averageOrderValue: 10.00 ) )
150+ let currentOrderStats = OrderStatsV4 . fake ( ) . copy ( totals: . fake( ) . copy ( averageOrderValue: 15.00 ) )
151+
152+ // When
153+ let averageOrderValueDelta = StatsDataTextFormatter . createAverageOrderValueDelta ( from: previousOrderStats, to: currentOrderStats)
154+
155+ // Then
156+ XCTAssertEqual ( averageOrderValueDelta, " +50% " )
157+ }
158+
123159 // MARK: Views and Visitors Stats
124160
125161 // This test reflects the current method for computing total visitor count.
@@ -150,6 +186,18 @@ final class StatsDataTextFormatterTests: XCTestCase {
150186 XCTAssertEqual ( visitorCount, " 17 " )
151187 }
152188
189+ func test_createVisitorCountDelta_returns_expected_delta_text( ) {
190+ // Given
191+ let previousSiteStats = SiteVisitStats . fake ( ) . copy ( items: [ . fake( ) . copy ( period: " 0 " , visitors: 10 ) ] )
192+ let currentSiteStats = SiteVisitStats . fake ( ) . copy ( items: [ . fake( ) . copy ( period: " 0 " , visitors: 15 ) ] )
193+
194+ // When
195+ let visitorCountDelta = StatsDataTextFormatter . createVisitorCountDelta ( from: previousSiteStats, to: currentSiteStats)
196+
197+ // Then
198+ XCTAssertEqual ( visitorCountDelta, " +50% " )
199+ }
200+
153201 // MARK: Conversion Stats
154202
155203 func test_createConversionRateText_returns_placeholder_when_visitor_count_is_zero( ) {
@@ -200,4 +248,54 @@ final class StatsDataTextFormatterTests: XCTestCase {
200248 // Then
201249 XCTAssertEqual ( conversionRate, " 10% " )
202250 }
251+
252+ // MARK: Delta Calculations
253+
254+ func test_createDeltaText_returns_expected_positive_text( ) {
255+ // Given
256+ let previousValue : Double = 100
257+ let currentValue : Double = 150
258+
259+ // When
260+ let deltaText = StatsDataTextFormatter . createDeltaText ( from: previousValue, to: currentValue)
261+
262+ // Then
263+ XCTAssertEqual ( deltaText, " +50% " )
264+ }
265+
266+ func test_createDeltaText_returns_expected_negative_text( ) {
267+ // Given
268+ let previousValue : Double = 150
269+ let currentValue : Double = 100
270+
271+ // When
272+ let deltaText = StatsDataTextFormatter . createDeltaText ( from: previousValue, to: currentValue)
273+
274+ // Then
275+ XCTAssertEqual ( deltaText, " -33% " )
276+ }
277+
278+ func test_createDeltaText_returns_100_percent_change_when_previous_value_is_zero( ) {
279+ // Given
280+ let previousValue : Double = 0
281+ let currentValue : Double = 10
282+
283+ // When
284+ let deltaText = StatsDataTextFormatter . createDeltaText ( from: previousValue, to: currentValue)
285+
286+ // Then
287+ XCTAssertEqual ( deltaText, " +100% " )
288+ }
289+
290+ func test_createDeltaText_returns_negative_100_percent_change_when_current_value_is_zero( ) {
291+ // Given
292+ let previousValue : Double = 10
293+ let currentValue : Double = 0
294+
295+ // When
296+ let deltaText = StatsDataTextFormatter . createDeltaText ( from: previousValue, to: currentValue)
297+
298+ // Then
299+ XCTAssertEqual ( deltaText, " -100% " )
300+ }
203301}
0 commit comments