Skip to content

Commit 207ea58

Browse files
authored
Merge pull request #8157 from woocommerce/issue/8156-orders-analytics-networking
[Analytics Hub] Add Networking support for Average Order Value analytics
2 parents 3f1b9df + 5289894 commit 207ea58

15 files changed

+76
-14
lines changed

Fakes/Fakes/Networking.generated.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,8 @@ extension Networking.OrderStatsV4Totals {
604604
taxes: .fake(),
605605
shipping: .fake(),
606606
netRevenue: .fake(),
607-
totalProducts: .fake()
607+
totalProducts: .fake(),
608+
averageOrderValue: .fake()
608609
)
609610
}
610611
}

Networking/Networking/Model/Copiable/Models+Copiable.generated.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -729,7 +729,8 @@ extension Networking.OrderStatsV4Totals {
729729
taxes: CopiableProp<Decimal> = .copy,
730730
shipping: CopiableProp<Decimal> = .copy,
731731
netRevenue: CopiableProp<Decimal> = .copy,
732-
totalProducts: NullableCopiableProp<Int> = .copy
732+
totalProducts: NullableCopiableProp<Int> = .copy,
733+
averageOrderValue: CopiableProp<Decimal> = .copy
733734
) -> Networking.OrderStatsV4Totals {
734735
let totalOrders = totalOrders ?? self.totalOrders
735736
let totalItemsSold = totalItemsSold ?? self.totalItemsSold
@@ -741,6 +742,7 @@ extension Networking.OrderStatsV4Totals {
741742
let shipping = shipping ?? self.shipping
742743
let netRevenue = netRevenue ?? self.netRevenue
743744
let totalProducts = totalProducts ?? self.totalProducts
745+
let averageOrderValue = averageOrderValue ?? self.averageOrderValue
744746

745747
return Networking.OrderStatsV4Totals(
746748
totalOrders: totalOrders,
@@ -752,7 +754,8 @@ extension Networking.OrderStatsV4Totals {
752754
taxes: taxes,
753755
shipping: shipping,
754756
netRevenue: netRevenue,
755-
totalProducts: totalProducts
757+
totalProducts: totalProducts,
758+
averageOrderValue: averageOrderValue
756759
)
757760
}
758761
}

Networking/Networking/Model/Stats/OrderStatsV4Totals.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public struct OrderStatsV4Totals: Decodable, Equatable, GeneratedCopiable, Gener
1313
public let shipping: Decimal
1414
public let netRevenue: Decimal
1515
public let totalProducts: Int?
16+
public let averageOrderValue: Decimal
1617

1718
public init(totalOrders: Int,
1819
totalItemsSold: Int,
@@ -23,7 +24,8 @@ public struct OrderStatsV4Totals: Decodable, Equatable, GeneratedCopiable, Gener
2324
taxes: Decimal,
2425
shipping: Decimal,
2526
netRevenue: Decimal,
26-
totalProducts: Int?) {
27+
totalProducts: Int?,
28+
averageOrderValue: Decimal) {
2729
self.totalOrders = totalOrders
2830
self.totalItemsSold = totalItemsSold
2931
self.grossRevenue = grossRevenue
@@ -34,6 +36,7 @@ public struct OrderStatsV4Totals: Decodable, Equatable, GeneratedCopiable, Gener
3436
self.shipping = shipping
3537
self.netRevenue = netRevenue
3638
self.totalProducts = totalProducts
39+
self.averageOrderValue = averageOrderValue
3740
}
3841

3942
public init(from decoder: Decoder) throws {
@@ -48,6 +51,7 @@ public struct OrderStatsV4Totals: Decodable, Equatable, GeneratedCopiable, Gener
4851
let shipping = try container.decode(Decimal.self, forKey: .shipping)
4952
let netRevenue = try container.decode(Decimal.self, forKey: .netRevenue)
5053
let totalProducts = try container.decodeIfPresent(Int.self, forKey: .products)
54+
let averageOrderValue = try container.decode(Decimal.self, forKey: .averageOrderValue)
5155

5256
self.init(totalOrders: totalOrders,
5357
totalItemsSold: totalItemsSold,
@@ -58,7 +62,8 @@ public struct OrderStatsV4Totals: Decodable, Equatable, GeneratedCopiable, Gener
5862
taxes: taxes,
5963
shipping: shipping,
6064
netRevenue: netRevenue,
61-
totalProducts: totalProducts)
65+
totalProducts: totalProducts,
66+
averageOrderValue: averageOrderValue)
6267
}
6368
}
6469

@@ -77,5 +82,6 @@ private extension OrderStatsV4Totals {
7782
case shipping
7883
case netRevenue = "net_revenue"
7984
case products
85+
case averageOrderValue = "avg_order_value"
8086
}
8187
}

Networking/NetworkingTests/Mapper/OrderStatsMapperV4Tests.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ final class OrderStatsV4MapperTests: XCTestCase {
3030
XCTAssertEqual(hourlyStats.totals.shipping, 0)
3131
XCTAssertEqual(hourlyStats.totals.netRevenue, 800)
3232
XCTAssertEqual(hourlyStats.totals.totalProducts, 2)
33+
XCTAssertEqual(hourlyStats.totals.averageOrderValue, 266)
3334

3435
XCTAssertEqual(hourlyStats.intervals.count, 24)
3536

@@ -47,6 +48,7 @@ final class OrderStatsV4MapperTests: XCTestCase {
4748
XCTAssertEqual(nonZeroHourTotals.shipping, 0)
4849
XCTAssertEqual(nonZeroHourTotals.netRevenue, 350)
4950
XCTAssertNil(nonZeroHourTotals.totalProducts)
51+
XCTAssertEqual(nonZeroHourTotals.averageOrderValue, 175)
5052
}
5153

5254
/// Verifies that all of the daily unit OrderStatsV4 fields are parsed correctly.
@@ -70,6 +72,7 @@ final class OrderStatsV4MapperTests: XCTestCase {
7072
XCTAssertEqual(dailyStats.totals.shipping, 0)
7173
XCTAssertEqual(dailyStats.totals.netRevenue, 800)
7274
XCTAssertEqual(dailyStats.totals.totalProducts, 2)
75+
XCTAssertEqual(dailyStats.totals.averageOrderValue, 266)
7376

7477
XCTAssertEqual(dailyStats.intervals.count, 1)
7578

@@ -87,6 +90,7 @@ final class OrderStatsV4MapperTests: XCTestCase {
8790
XCTAssertEqual(nonZeroDayTotals.shipping, 0)
8891
XCTAssertEqual(nonZeroDayTotals.netRevenue, 800)
8992
XCTAssertNil(nonZeroDayTotals.totalProducts)
93+
XCTAssertEqual(nonZeroDayTotals.averageOrderValue, 266)
9094
}
9195

9296
/// Verifies that all of the weekly unit OrderStatsV4 fields are parsed correctly.
@@ -110,6 +114,7 @@ final class OrderStatsV4MapperTests: XCTestCase {
110114
XCTAssertEqual(weeklyStats.totals.shipping, 0)
111115
XCTAssertEqual(weeklyStats.totals.netRevenue, 800)
112116
XCTAssertEqual(weeklyStats.totals.totalProducts, 2)
117+
XCTAssertEqual(weeklyStats.totals.averageOrderValue, 266)
113118

114119
XCTAssertEqual(weeklyStats.intervals.count, 2)
115120

@@ -127,6 +132,7 @@ final class OrderStatsV4MapperTests: XCTestCase {
127132
XCTAssertEqual(nonZeroWeekTotals.shipping, 0)
128133
XCTAssertEqual(nonZeroWeekTotals.netRevenue, 800)
129134
XCTAssertNil(nonZeroWeekTotals.totalProducts)
135+
XCTAssertEqual(nonZeroWeekTotals.averageOrderValue, 266)
130136
}
131137

132138
/// Verifies that all of the monthly unit OrderStatsV4 fields are parsed correctly.
@@ -150,6 +156,7 @@ final class OrderStatsV4MapperTests: XCTestCase {
150156
XCTAssertEqual(monthlyStats.totals.shipping, 0)
151157
XCTAssertEqual(monthlyStats.totals.netRevenue, 800)
152158
XCTAssertEqual(monthlyStats.totals.totalProducts, 2)
159+
XCTAssertEqual(monthlyStats.totals.averageOrderValue, 266)
153160

154161
XCTAssertEqual(monthlyStats.intervals.count, 1)
155162

@@ -167,6 +174,7 @@ final class OrderStatsV4MapperTests: XCTestCase {
167174
XCTAssertEqual(nonZeroMonthTotals.shipping, 0)
168175
XCTAssertEqual(nonZeroMonthTotals.netRevenue, 800)
169176
XCTAssertNil(nonZeroMonthTotals.totalProducts)
177+
XCTAssertEqual(nonZeroMonthTotals.averageOrderValue, 266)
170178
}
171179

172180
/// Verifies that all of the yearly unit OrderStatsV4 fields are parsed correctly.
@@ -190,6 +198,7 @@ final class OrderStatsV4MapperTests: XCTestCase {
190198
XCTAssertEqual(yearlyStats.totals.shipping, 0)
191199
XCTAssertEqual(yearlyStats.totals.netRevenue, 800)
192200
XCTAssertEqual(yearlyStats.totals.totalProducts, 2)
201+
XCTAssertEqual(yearlyStats.totals.averageOrderValue, 266)
193202

194203
XCTAssertEqual(yearlyStats.intervals.count, 1)
195204

@@ -207,6 +216,7 @@ final class OrderStatsV4MapperTests: XCTestCase {
207216
XCTAssertEqual(nonZeroYearTotals.shipping, 0)
208217
XCTAssertEqual(nonZeroYearTotals.netRevenue, 800)
209218
XCTAssertNil(nonZeroYearTotals.totalProducts)
219+
XCTAssertEqual(nonZeroYearTotals.averageOrderValue, 266)
210220
}
211221
}
212222

Networking/NetworkingTests/Responses/order-stats-v4-daily.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"shipping": 0,
1212
"net_revenue": 800,
1313
"products": 2,
14+
"avg_order_value": 266,
1415
"segments": []
1516
},
1617
"intervals": [
@@ -30,6 +31,7 @@
3031
"taxes": 0,
3132
"shipping": 0,
3233
"net_revenue": 800,
34+
"avg_order_value": 266,
3335
"segments": []
3436
}
3537
}

Networking/NetworkingTests/Responses/order-stats-v4-defaults.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"taxes": 0,
1111
"shipping": 0,
1212
"net_revenue": 800,
13+
"avg_order_value": 266,
1314
"products": 2,
1415
"segments": []
1516
},
@@ -30,6 +31,7 @@
3031
"taxes": 0,
3132
"shipping": 0,
3233
"net_revenue": 800,
34+
"avg_order_value": 266,
3335
"segments": []
3436
}
3537
},
@@ -49,6 +51,7 @@
4951
"taxes": 0,
5052
"shipping": 0,
5153
"net_revenue": 0,
54+
"avg_order_value": 0,
5255
"segments": []
5356
}
5457
}

0 commit comments

Comments
 (0)