@@ -62,7 +62,7 @@ final class StatsDataTextFormatterTests: XCTestCase {
6262 XCTAssertEqual ( totalRevenue, " $25 " )
6363 }
6464
65- func test_createTotalRevenueDelta_returns_expected_delta_text ( ) {
65+ func test_createTotalRevenueDelta_returns_expected_delta ( ) {
6666 // Given
6767 let previousOrderStats = OrderStatsV4 . fake ( ) . copy ( totals: . fake( ) . copy ( grossRevenue: 10 ) )
6868 let currentOrderStats = OrderStatsV4 . fake ( ) . copy ( totals: . fake( ) . copy ( grossRevenue: 15 ) )
@@ -71,7 +71,8 @@ final class StatsDataTextFormatterTests: XCTestCase {
7171 let totalRevenueDelta = StatsDataTextFormatter . createTotalRevenueDelta ( from: previousOrderStats, to: currentOrderStats)
7272
7373 // Then
74- XCTAssertEqual ( totalRevenueDelta, " +50% " )
74+ XCTAssertEqual ( totalRevenueDelta. string, " +50% " )
75+ XCTAssertEqual ( totalRevenueDelta. direction, . positive)
7576 }
7677
7778 // MARK: Orders Stats
@@ -106,7 +107,7 @@ final class StatsDataTextFormatterTests: XCTestCase {
106107 XCTAssertEqual ( orderCount, " 1 " )
107108 }
108109
109- func test_createOrderCountDelta_returns_expected_delta_text ( ) {
110+ func test_createOrderCountDelta_returns_expected_delta ( ) {
110111 // Given
111112 let previousOrderStats = OrderStatsV4 . fake ( ) . copy ( totals: . fake( ) . copy ( totalOrders: 10 ) )
112113 let currentOrderStats = OrderStatsV4 . fake ( ) . copy ( totals: . fake( ) . copy ( totalOrders: 15 ) )
@@ -115,7 +116,8 @@ final class StatsDataTextFormatterTests: XCTestCase {
115116 let orderCountDelta = StatsDataTextFormatter . createOrderCountDelta ( from: previousOrderStats, to: currentOrderStats)
116117
117118 // Then
118- XCTAssertEqual ( orderCountDelta, " +50% " )
119+ XCTAssertEqual ( orderCountDelta. string, " +50% " )
120+ XCTAssertEqual ( orderCountDelta. direction, . positive)
119121 }
120122
121123 func test_createAverageOrderValueText_does_not_return_decimal_points_for_integer_value( ) {
@@ -144,7 +146,7 @@ final class StatsDataTextFormatterTests: XCTestCase {
144146 XCTAssertEqual ( averageOrderValue, " $62.86 " )
145147 }
146148
147- func test_createAverageOrderValueDelta_returns_expected_delta_text ( ) {
149+ func test_createAverageOrderValueDelta_returns_expected_delta ( ) {
148150 // Given
149151 let previousOrderStats = OrderStatsV4 . fake ( ) . copy ( totals: . fake( ) . copy ( averageOrderValue: 10.00 ) )
150152 let currentOrderStats = OrderStatsV4 . fake ( ) . copy ( totals: . fake( ) . copy ( averageOrderValue: 15.00 ) )
@@ -153,7 +155,8 @@ final class StatsDataTextFormatterTests: XCTestCase {
153155 let averageOrderValueDelta = StatsDataTextFormatter . createAverageOrderValueDelta ( from: previousOrderStats, to: currentOrderStats)
154156
155157 // Then
156- XCTAssertEqual ( averageOrderValueDelta, " +50% " )
158+ XCTAssertEqual ( averageOrderValueDelta. string, " +50% " )
159+ XCTAssertEqual ( averageOrderValueDelta. direction, . positive)
157160 }
158161
159162 // MARK: Views and Visitors Stats
@@ -186,7 +189,7 @@ final class StatsDataTextFormatterTests: XCTestCase {
186189 XCTAssertEqual ( visitorCount, " 17 " )
187190 }
188191
189- func test_createVisitorCountDelta_returns_expected_delta_text ( ) {
192+ func test_createVisitorCountDelta_returns_expected_delta ( ) {
190193 // Given
191194 let previousSiteStats = SiteVisitStats . fake ( ) . copy ( items: [ . fake( ) . copy ( period: " 0 " , visitors: 10 ) ] )
192195 let currentSiteStats = SiteVisitStats . fake ( ) . copy ( items: [ . fake( ) . copy ( period: " 0 " , visitors: 15 ) ] )
@@ -195,7 +198,8 @@ final class StatsDataTextFormatterTests: XCTestCase {
195198 let visitorCountDelta = StatsDataTextFormatter . createVisitorCountDelta ( from: previousSiteStats, to: currentSiteStats)
196199
197200 // Then
198- XCTAssertEqual ( visitorCountDelta, " +50% " )
201+ XCTAssertEqual ( visitorCountDelta. string, " +50% " )
202+ XCTAssertEqual ( visitorCountDelta. direction, . positive)
199203 }
200204
201205 // MARK: Conversion Stats
@@ -251,51 +255,94 @@ final class StatsDataTextFormatterTests: XCTestCase {
251255
252256 // MARK: Delta Calculations
253257
254- func test_createDeltaText_returns_expected_positive_text ( ) {
258+ func test_createDeltaPercentage_returns_expected_positive_delta ( ) {
255259 // Given
256260 let previousValue : Double = 100
257261 let currentValue : Double = 150
258262
259263 // When
260- let deltaText = StatsDataTextFormatter . createDeltaText ( from: previousValue, to: currentValue)
264+ let delta = StatsDataTextFormatter . createDeltaPercentage ( from: previousValue, to: currentValue)
261265
262266 // Then
263- XCTAssertEqual ( deltaText, " +50% " )
267+ XCTAssertEqual ( delta. string, " +50% " )
268+ XCTAssertEqual ( delta. direction, . positive)
264269 }
265270
266- func test_createDeltaText_returns_expected_negative_text ( ) {
271+ func test_createDeltaPercentage_returns_expected_negative_delta ( ) {
267272 // Given
268- let previousValue : Double = 150
273+ let previousValue : Double = 100
274+ let currentValue : Double = 50
275+
276+ // When
277+ let delta = StatsDataTextFormatter . createDeltaPercentage ( from: previousValue, to: currentValue)
278+
279+ // Then
280+ XCTAssertEqual ( delta. string, " -50% " )
281+ XCTAssertEqual ( delta. direction, . negative)
282+ }
283+
284+ func test_createDeltaPercentage_returns_expected_zero_delta( ) {
285+ // Given
286+ let previousValue : Double = 100
269287 let currentValue : Double = 100
270288
271289 // When
272- let deltaText = StatsDataTextFormatter . createDeltaText ( from: previousValue, to: currentValue)
290+ let delta = StatsDataTextFormatter . createDeltaPercentage ( from: previousValue, to: currentValue)
291+
292+ // Then
293+ XCTAssertEqual ( delta. string, " +0% " )
294+ XCTAssertEqual ( delta. direction, . zero)
295+ }
296+
297+ func test_createDeltaPercentage_returns_expected_zero_delta_for_zero_values( ) {
298+ // Given
299+ let previousValue : Double = 0
300+ let currentValue : Double = 0
301+
302+ // When
303+ let delta = StatsDataTextFormatter . createDeltaPercentage ( from: previousValue, to: currentValue)
273304
274305 // Then
275- XCTAssertEqual ( deltaText, " -33% " )
306+ XCTAssertEqual ( delta. string, " +0% " )
307+ XCTAssertEqual ( delta. direction, . zero)
276308 }
277309
278- func test_createDeltaText_returns_100_percent_change_when_previous_value_is_zero ( ) {
310+ func test_createDeltaPercentage_returns_positive_100_percent_change_when_previous_value_is_zero ( ) {
279311 // Given
280312 let previousValue : Double = 0
281313 let currentValue : Double = 10
282314
283315 // When
284- let deltaText = StatsDataTextFormatter . createDeltaText ( from: previousValue, to: currentValue)
316+ let delta = StatsDataTextFormatter . createDeltaPercentage ( from: previousValue, to: currentValue)
317+
318+ // Then
319+ XCTAssertEqual ( delta. string, " +100% " )
320+ XCTAssertEqual ( delta. direction, . positive)
321+ }
322+
323+ func test_createDeltaPercentage_returns_negative_100_percent_change_when_previous_value_is_zero( ) {
324+ // Given
325+ let previousValue : Double = 0
326+ let currentValue : Double = - 10
327+
328+ // When
329+ let delta = StatsDataTextFormatter . createDeltaPercentage ( from: previousValue, to: currentValue)
285330
286331 // Then
287- XCTAssertEqual ( deltaText, " +100% " )
332+ XCTAssertEqual ( delta. string, " -100% " )
333+ XCTAssertEqual ( delta. direction, . negative)
288334 }
289335
290- func test_createDeltaText_returns_negative_100_percent_change_when_current_value_is_zero ( ) {
336+ func test_createDeltaPercentage_returns_negative_100_percent_change_when_current_value_is_zero ( ) {
291337 // Given
292338 let previousValue : Double = 10
293339 let currentValue : Double = 0
294340
295341 // When
296- let deltaText = StatsDataTextFormatter . createDeltaText ( from: previousValue, to: currentValue)
342+ let delta = StatsDataTextFormatter . createDeltaPercentage ( from: previousValue, to: currentValue)
297343
298344 // Then
299- XCTAssertEqual ( deltaText, " -100% " )
345+ XCTAssertEqual ( delta. string, " -100% " )
346+ XCTAssertEqual ( delta. direction, . negative)
300347 }
301348}
0 commit comments