Skip to content

Commit 262b573

Browse files
authored
Merge pull request #8387 from woocommerce/issue/8363-jetpack-stats-views-storage
[Analytics Hub] Store views for SiteVisitStats (Storage)
2 parents f94cbc2 + 3935f3c commit 262b573

File tree

9 files changed

+893
-9
lines changed

9 files changed

+893
-9
lines changed

Networking/NetworkingTests/Responses/site-visits-alt.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"data": [
1414
[
1515
"2014-01-01",
16-
12821,
16+
12831,
1717
1140,
1818
1094,
1919
0,
@@ -22,7 +22,7 @@
2222
],
2323
[
2424
"2015-01-01",
25-
14808,
25+
14818,
2626
1634,
2727
1492,
2828
0,

Storage/Storage.xcodeproj/project.pbxproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,7 @@
433433
CC6A05402877012B002C144E /* Model 71.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 71.xcdatamodel"; sourceTree = "<group>"; };
434434
CC6A054128770933002C144E /* OrderMetaData+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OrderMetaData+CoreDataClass.swift"; sourceTree = "<group>"; };
435435
CC6A054228770933002C144E /* OrderMetaData+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OrderMetaData+CoreDataProperties.swift"; sourceTree = "<group>"; };
436+
CCA1D60B29477F5E00B40560 /* Model 79.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 79.xcdatamodel"; sourceTree = "<group>"; };
436437
CCBEBD3F27C68E660010C96F /* FeatureIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureIcon.swift; sourceTree = "<group>"; };
437438
CCD2E70625DE9AAA00BD975D /* WooCommerceModelV45toV46.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = WooCommerceModelV45toV46.xcmappingmodel; sourceTree = "<group>"; };
438439
CCF3209E2927EBEE002114B1 /* Model 78.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 78.xcdatamodel"; sourceTree = "<group>"; };
@@ -1816,6 +1817,7 @@
18161817
DEC51AA4275B41BE009F3DF4 /* WooCommerce.xcdatamodeld */ = {
18171818
isa = XCVersionGroup;
18181819
children = (
1820+
CCA1D60B29477F5E00B40560 /* Model 79.xcdatamodel */,
18191821
CCF3209E2927EBEE002114B1 /* Model 78.xcdatamodel */,
18201822
AE7DF9FA2919023100C4D1ED /* Model 77.xcdatamodel */,
18211823
AEC4481B290853C300BAA299 /* Model 76.xcdatamodel */,
@@ -1895,7 +1897,7 @@
18951897
DEC51ADE275B41BE009F3DF4 /* Model 47.xcdatamodel */,
18961898
DEC51ADF275B41BE009F3DF4 /* Model 19.xcdatamodel */,
18971899
);
1898-
currentVersion = CCF3209E2927EBEE002114B1 /* Model 78.xcdatamodel */;
1900+
currentVersion = CCA1D60B29477F5E00B40560 /* Model 79.xcdatamodel */;
18991901
path = WooCommerce.xcdatamodeld;
19001902
sourceTree = "<group>";
19011903
versionGroupType = wrapper.xcdatamodel;

Storage/Storage/Model/MIGRATIONS.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
This file documents changes in the WCiOS Storage data model. Please explain any changes to the data model as well as any custom migrations.
44

5+
## Model 79 (Release 11.7.0.0)
6+
- @rachelmcr 2022-12-12
7+
- Added `views` attribute to `SiteVisitStatsItem` entity.
8+
59
## Model 78 (Release 11.4.0.0)
610
- @rachelmcr 2022-11-18
711
- Added `averageOrderValue` attribute to `OrderStatsV4Totals` entity.

Storage/Storage/Model/SiteVisitStatsItem+CoreDataProperties.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@ extension SiteVisitStatsItem {
1010

1111
@NSManaged public var period: String?
1212
@NSManaged public var visitors: Int64
13+
@NSManaged public var views: Int64
1314
@NSManaged public var stats: SiteVisitStats?
1415
}

Storage/Storage/Model/WooCommerce.xcdatamodeld/.xccurrentversion

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
<plist version="1.0">
44
<dict>
55
<key>_XCCurrentVersionName</key>
6-
<string>Model 78.xcdatamodel</string>
6+
<string>Model 79.xcdatamodel</string>
77
</dict>
88
</plist>

Storage/Storage/Model/WooCommerce.xcdatamodeld/Model 79.xcdatamodel/contents

Lines changed: 840 additions & 0 deletions
Large diffs are not rendered by default.

Storage/StorageTests/CoreData/MigrationTests.swift

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1524,6 +1524,34 @@ final class MigrationTests: XCTestCase {
15241524
let newAverageOrderValue = try XCTUnwrap(migratedOrderStatsV4Totals.value(forKey: "averageOrderValue") as? Double)
15251525
XCTAssertEqual(newAverageOrderValue, averageOrderValue)
15261526
}
1527+
1528+
func test_migrating_from_78_to_79_adds_views_attribute() throws {
1529+
// Given
1530+
let sourceContainer = try startPersistentContainer("Model 78")
1531+
let sourceContext = sourceContainer.viewContext
1532+
1533+
let siteVisitStatsItem = insertSiteVisitStatsItem(to: sourceContainer.viewContext)
1534+
try sourceContext.save()
1535+
1536+
XCTAssertNil(siteVisitStatsItem.entity.attributesByName["views"])
1537+
1538+
// When
1539+
let targetContainer = try migrate(sourceContainer, to: "Model 79")
1540+
let targetContext = targetContainer.viewContext
1541+
1542+
let migratedSiteVisitStatsItem = try XCTUnwrap(targetContext.first(entityName: "SiteVisitStatsItem"))
1543+
let defaultViewsCount = try XCTUnwrap(migratedSiteVisitStatsItem.value(forKey: "views") as? Int)
1544+
1545+
let viewsCount = 12
1546+
migratedSiteVisitStatsItem.setValue(viewsCount, forKey: "views")
1547+
1548+
// Then
1549+
// Default value is 0.
1550+
XCTAssertEqual(defaultViewsCount, 0)
1551+
1552+
let newViewsCount = try XCTUnwrap(migratedSiteVisitStatsItem.value(forKey: "views") as? Int)
1553+
XCTAssertEqual(newViewsCount, viewsCount)
1554+
}
15271555
}
15281556

15291557
// MARK: - Persistent Store Setup and Migrations
@@ -1943,6 +1971,14 @@ private extension MigrationTests {
19431971
])
19441972
}
19451973

1974+
@discardableResult
1975+
func insertSiteVisitStatsItem(to context: NSManagedObjectContext) -> NSManagedObject {
1976+
context.insert(entityName: "SiteVisitStatsItem", properties: [
1977+
"period": "day",
1978+
"visitors": 3
1979+
])
1980+
}
1981+
19461982
@discardableResult
19471983
func insertTopEarnerStats(to context: NSManagedObjectContext) -> NSManagedObject {
19481984
context.insert(entityName: "TopEarnerStats", properties: [

Yosemite/Yosemite/Model/Storage/SiteVisitStatsItem+ReadOnlyConvertible.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@ extension Storage.SiteVisitStatsItem: ReadOnlyConvertible {
1111
public func update(with statsItem: Yosemite.SiteVisitStatsItem) {
1212
period = statsItem.period
1313
visitors = Int64(statsItem.visitors)
14+
views = Int64(statsItem.views)
1415
}
1516

1617
/// Returns a ReadOnly version of the receiver.
1718
///
1819
public func toReadOnly() -> Yosemite.SiteVisitStatsItem {
1920
return SiteVisitStatsItem(period: period ?? "",
2021
visitors: Int(visitors),
21-
views: 0) // TODO-8363: Update Storage with views count
22+
views: Int(views))
2223
}
2324
}

Yosemite/YosemiteTests/Stores/StatsStoreV4Tests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -603,11 +603,11 @@ private extension StatsStoreV4Tests {
603603

604604

605605
func sampleSiteVisitStatsItem1() -> Networking.SiteVisitStatsItem {
606-
return SiteVisitStatsItem(period: "2014-01-01", visitors: 1135, views: 0)
606+
return SiteVisitStatsItem(period: "2014-01-01", visitors: 1135, views: 12821)
607607
}
608608

609609
func sampleSiteVisitStatsItem2() -> Networking.SiteVisitStatsItem {
610-
return SiteVisitStatsItem(period: "2015-01-01", visitors: 1629, views: 0)
610+
return SiteVisitStatsItem(period: "2015-01-01", visitors: 1629, views: 14808)
611611
}
612612

613613
func sampleSiteVisitStatsMutated() -> Networking.SiteVisitStats {
@@ -619,11 +619,11 @@ private extension StatsStoreV4Tests {
619619

620620

621621
func sampleSiteVisitStatsItem1Mutated() -> Networking.SiteVisitStatsItem {
622-
return SiteVisitStatsItem(period: "2014-01-01", visitors: 1140, views: 0)
622+
return SiteVisitStatsItem(period: "2014-01-01", visitors: 1140, views: 12831)
623623
}
624624

625625
func sampleSiteVisitStatsItem2Mutated() -> Networking.SiteVisitStatsItem {
626-
return SiteVisitStatsItem(period: "2015-01-01", visitors: 1634, views: 0)
626+
return SiteVisitStatsItem(period: "2015-01-01", visitors: 1634, views: 14818)
627627
}
628628

629629
// MARK: - Top Earner Stats Sample

0 commit comments

Comments
 (0)