diff --git a/Fakes/Fakes/Networking.generated.swift b/Fakes/Fakes/Networking.generated.swift index 4daa7f8b7a0..5d3e5887e83 100644 --- a/Fakes/Fakes/Networking.generated.swift +++ b/Fakes/Fakes/Networking.generated.swift @@ -1611,7 +1611,8 @@ extension Networking.SiteVisitStatsItem { public static func fake() -> Networking.SiteVisitStatsItem { .init( period: .fake(), - visitors: .fake() + visitors: .fake(), + views: .fake() ) } } diff --git a/Networking/Networking/Model/Copiable/Models+Copiable.generated.swift b/Networking/Networking/Model/Copiable/Models+Copiable.generated.swift index 8a6f03fe222..dfd01b1ce09 100644 --- a/Networking/Networking/Model/Copiable/Models+Copiable.generated.swift +++ b/Networking/Networking/Model/Copiable/Models+Copiable.generated.swift @@ -1936,14 +1936,17 @@ extension Networking.SiteVisitStats { extension Networking.SiteVisitStatsItem { public func copy( period: CopiableProp = .copy, - visitors: CopiableProp = .copy + visitors: CopiableProp = .copy, + views: CopiableProp = .copy ) -> Networking.SiteVisitStatsItem { let period = period ?? self.period let visitors = visitors ?? self.visitors + let views = views ?? self.views return Networking.SiteVisitStatsItem( period: period, - visitors: visitors + visitors: visitors, + views: views ) } } diff --git a/Networking/Networking/Model/Stats/SiteVisitStats.swift b/Networking/Networking/Model/Stats/SiteVisitStats.swift index 81db2662431..79a81803f2b 100644 --- a/Networking/Networking/Model/Stats/SiteVisitStats.swift +++ b/Networking/Networking/Model/Stats/SiteVisitStats.swift @@ -25,7 +25,8 @@ public struct SiteVisitStats: Decodable, GeneratedCopiable, GeneratedFakeable { let rawData: [[AnyCodable]] = try container.decode([[AnyCodable]].self, forKey: .data) let rawDataContainers = rawData.map({ MIContainer(data: $0.map({ $0.value }), fieldNames: fieldNames) }) let items = rawDataContainers.map({ SiteVisitStatsItem(period: $0.fetchStringValue(for: ItemFieldNames.period), - visitors: $0.fetchIntValue(for: ItemFieldNames.visitors)) }) + visitors: $0.fetchIntValue(for: ItemFieldNames.visitors), + views: $0.fetchIntValue(for: ItemFieldNames.views)) }) self.init(siteID: siteID, date: date, granularity: granularity, items: items) } @@ -79,11 +80,12 @@ extension SiteVisitStats: Equatable { // private extension SiteVisitStats { - /// Defines all of the possbile fields for a SiteVisitStatsItem. + /// Defines all of the possible fields for a SiteVisitStatsItem. /// enum ItemFieldNames: String { - case period = "period" - case visitors = "visitors" + case period + case visitors + case views } } diff --git a/Networking/Networking/Model/Stats/SiteVisitStatsItem.swift b/Networking/Networking/Model/Stats/SiteVisitStatsItem.swift index 25fa49de220..cbda76d0be6 100644 --- a/Networking/Networking/Model/Stats/SiteVisitStatsItem.swift +++ b/Networking/Networking/Model/Stats/SiteVisitStatsItem.swift @@ -1,17 +1,19 @@ import Foundation import Codegen -/// Represents an single site visit stat for a specific period. +/// Represents a single site visit stat for a specific period. /// public struct SiteVisitStatsItem: Equatable, GeneratedCopiable, GeneratedFakeable { public let period: String public let visitors: Int + public let views: Int /// SiteVisitStatsItem struct initializer. /// - public init(period: String, visitors: Int) { + public init(period: String, visitors: Int, views: Int) { self.period = period self.visitors = visitors + self.views = views } } @@ -21,6 +23,7 @@ public struct SiteVisitStatsItem: Equatable, GeneratedCopiable, GeneratedFakeabl extension SiteVisitStatsItem: Comparable { public static func < (lhs: SiteVisitStatsItem, rhs: SiteVisitStatsItem) -> Bool { return lhs.period < rhs.period || - (lhs.period == rhs.period && lhs.visitors < rhs.visitors) + (lhs.period == rhs.period && lhs.visitors < rhs.visitors) || + (lhs.period == rhs.period && lhs.visitors == rhs.visitors && lhs.views < rhs.views) } } diff --git a/Networking/Networking/Remote/SiteStatsRemote.swift b/Networking/Networking/Remote/SiteStatsRemote.swift index cb9e7017c77..94f9c60e450 100644 --- a/Networking/Networking/Remote/SiteStatsRemote.swift +++ b/Networking/Networking/Remote/SiteStatsRemote.swift @@ -27,7 +27,7 @@ public class SiteStatsRemote: Remote { let parameters = [ParameterKeys.unit: unit.rawValue, ParameterKeys.date: dateFormatter.string(from: latestDateToInclude), ParameterKeys.quantity: String(quantity), - ParameterKeys.statFields: ParameterValues.visitors] + ParameterKeys.statFields: "\(ParameterValues.visitors),\(ParameterValues.views)"] let request = DotcomRequest(wordpressApiVersion: .mark1_1, method: .get, path: path, parameters: parameters) let mapper = SiteVisitStatsMapper(siteID: siteID) enqueue(request, mapper: mapper, completion: completion) @@ -52,5 +52,6 @@ private extension SiteStatsRemote { enum ParameterValues { static let visitors: String = "visitors" + static let views: String = "views" } } diff --git a/Networking/NetworkingTests/Mapper/SiteVisitStatsMapperTests.swift b/Networking/NetworkingTests/Mapper/SiteVisitStatsMapperTests.swift index e830182f827..d33febafd9c 100644 --- a/Networking/NetworkingTests/Mapper/SiteVisitStatsMapperTests.swift +++ b/Networking/NetworkingTests/Mapper/SiteVisitStatsMapperTests.swift @@ -24,10 +24,12 @@ class SiteVisitStatsMapperTests: XCTestCase { let sampleItem1 = dayStats.items![0] XCTAssertEqual(sampleItem1.period, "2018-07-26") XCTAssertEqual(sampleItem1.visitors, 101) + XCTAssertEqual(sampleItem1.views, 202) let sampleItem2 = dayStats.items![11] XCTAssertEqual(sampleItem2.period, "2018-08-06") XCTAssertEqual(sampleItem2.visitors, 2) + XCTAssertEqual(sampleItem2.views, 4) } /// Verifies that all of the week unit SiteVisitStats fields are parsed correctly. @@ -47,10 +49,12 @@ class SiteVisitStatsMapperTests: XCTestCase { let sampleItem1 = weekStats.items![0] XCTAssertEqual(sampleItem1.period, "2018W05W21") XCTAssertEqual(sampleItem1.visitors, 4) + XCTAssertEqual(sampleItem1.views, 8) let sampleItem2 = weekStats.items![11] XCTAssertEqual(sampleItem2.period, "2018W08W06") XCTAssertEqual(sampleItem2.visitors, 123123123) + XCTAssertEqual(sampleItem2.views, 246246246) } /// Verifies that all of the month unit SiteVisitStats fields are parsed correctly. @@ -70,10 +74,12 @@ class SiteVisitStatsMapperTests: XCTestCase { let sampleItem1 = monthStats.items![0] XCTAssertEqual(sampleItem1.period, "2017-09-01") XCTAssertEqual(sampleItem1.visitors, 224) + XCTAssertEqual(sampleItem1.views, 448) let sampleItem2 = monthStats.items![10] XCTAssertEqual(sampleItem2.period, "2018-07-01") XCTAssertEqual(sampleItem2.visitors, 6) + XCTAssertEqual(sampleItem2.views, 12) } /// Verifies that all of the year unit SiteVisitStats fields are parsed correctly. @@ -93,10 +99,12 @@ class SiteVisitStatsMapperTests: XCTestCase { let sampleItem1 = yearStats.items![0] XCTAssertEqual(sampleItem1.period, "2014-01-01") XCTAssertEqual(sampleItem1.visitors, 1145) + XCTAssertEqual(sampleItem1.views, 2290) let sampleItem2 = yearStats.items![3] XCTAssertEqual(sampleItem2.period, "2017-01-01") XCTAssertEqual(sampleItem2.visitors, 144) + XCTAssertEqual(sampleItem2.views, 288) } } diff --git a/Networking/NetworkingTests/Responses/site-visits-day.json b/Networking/NetworkingTests/Responses/site-visits-day.json index d7d1fd46db1..d0004d06163 100644 --- a/Networking/NetworkingTests/Responses/site-visits-day.json +++ b/Networking/NetworkingTests/Responses/site-visits-day.json @@ -3,55 +3,68 @@ "unit": "day", "fields": [ "period", + "views", "visitors" ], "data": [ [ "2018-07-26", + 202, 101 ], [ "2018-07-27", + 0, 0 ], [ "2018-07-28", + 0, 0 ], [ "2018-07-29", + 0, 0 ], [ "2018-07-30", + 0, 0 ], [ "2018-07-31", + 2, 1 ], [ "2018-08-01", + 0, 0 ], [ "2018-08-02", + 2, 1 ], [ "2018-08-03", + 0, 0 ], [ "2018-08-04", + 0, 0 ], [ "2018-08-05", + 0, 0 ], [ "2018-08-06", + 4, 2 ] ] diff --git a/Networking/NetworkingTests/Responses/site-visits-month.json b/Networking/NetworkingTests/Responses/site-visits-month.json index cd4f4e067d0..e6342dc3776 100644 --- a/Networking/NetworkingTests/Responses/site-visits-month.json +++ b/Networking/NetworkingTests/Responses/site-visits-month.json @@ -3,55 +3,68 @@ "unit": "month", "fields": [ "period", + "views", "visitors" ], "data": [ [ "2017-09-01", + 448, 224 ], [ "2017-10-01", + 14, 7 ], [ "2017-11-01", + 24, 12 ], [ "2017-12-01", + 6, 3 ], [ "2018-01-01", + 6, 3 ], [ "2018-02-01", + 10, 5 ], [ "2018-03-01", + 12, 6 ], [ "2018-04-01", + 26, 13 ], [ "2018-05-01", + 14, 7 ], [ "2018-06-01", + 10, 5 ], [ "2018-07-01", + 12, 6 ], [ "2018-08-01", + 2, 1 ] ] diff --git a/Networking/NetworkingTests/Responses/site-visits-week.json b/Networking/NetworkingTests/Responses/site-visits-week.json index 3022eaeae8d..d2e74ab8062 100644 --- a/Networking/NetworkingTests/Responses/site-visits-week.json +++ b/Networking/NetworkingTests/Responses/site-visits-week.json @@ -3,55 +3,68 @@ "unit": "week", "fields": [ "period", + "views", "visitors" ], "data": [ [ "2018W05W21", + 8, 4 ], [ "2018W05W28", + 0, 0 ], [ "2018W06W04", + 2, 1 ], [ "2018W06W11", + 2, 1 ], [ "2018W06W18", + 4, 2 ], [ "2018W06W25", + 2, 1 ], [ "2018W07W02", + 4, 2 ], [ "2018W07W09", + 4, 2 ], [ "2018W07W16", + 4, 2 ], [ "2018W07W23", + 6, 3 ], [ "2018W07W30", + 200, 100 ], [ "2018W08W06", + 246246246, 123123123 ] ] diff --git a/Networking/NetworkingTests/Responses/site-visits-year.json b/Networking/NetworkingTests/Responses/site-visits-year.json index 928d2b03400..65f0da11c3a 100644 --- a/Networking/NetworkingTests/Responses/site-visits-year.json +++ b/Networking/NetworkingTests/Responses/site-visits-year.json @@ -3,27 +3,33 @@ "unit": "year", "fields": [ "period", + "views", "visitors" ], "data": [ [ "2014-01-01", + 2290, 1145 ], [ "2015-01-01", + 3258, 1629 ], [ "2016-01-01", + 744, 372 ], [ "2017-01-01", + 288, 144 ], [ "2018-01-01", + 92, 46 ] ] diff --git a/Yosemite/Yosemite/Model/Mocks/Graphs/ScreenshotsObjectGraph.swift b/Yosemite/Yosemite/Model/Mocks/Graphs/ScreenshotsObjectGraph.swift index 13ba5e460ee..be8617afc79 100644 --- a/Yosemite/Yosemite/Model/Mocks/Graphs/ScreenshotsObjectGraph.swift +++ b/Yosemite/Yosemite/Model/Mocks/Graphs/ScreenshotsObjectGraph.swift @@ -217,7 +217,8 @@ struct ScreenshotObjectGraph: MockObjectGraph { Self.createVisitStatsItem( granularity: .day, periodDate: date.monthStart.addingDays(dayIndex), - visitors: Int.random(in: 0 ... 20) + visitors: Int.random(in: 0 ... 20), + views: Int.random(in: 0...40) ) } ) diff --git a/Yosemite/Yosemite/Model/Mocks/MockObjectGraph.swift b/Yosemite/Yosemite/Model/Mocks/MockObjectGraph.swift index 429985dcd83..2d5c3b2d784 100644 --- a/Yosemite/Yosemite/Model/Mocks/MockObjectGraph.swift +++ b/Yosemite/Yosemite/Model/Mocks/MockObjectGraph.swift @@ -406,10 +406,10 @@ extension MockObjectGraph { ) } - static func createVisitStatsItem(granularity: StatGranularity, periodDate: Date, visitors: Int) -> SiteVisitStatsItem { + static func createVisitStatsItem(granularity: StatGranularity, periodDate: Date, visitors: Int, views: Int) -> SiteVisitStatsItem { switch granularity { case .day: - return SiteVisitStatsItem(period: periodDate.asVisitStatsMonthString, visitors: visitors) + return SiteVisitStatsItem(period: periodDate.asVisitStatsMonthString, visitors: visitors, views: views) default: fatalError("Not implemented yet") } diff --git a/Yosemite/Yosemite/Model/Storage/SiteVisitStatsItem+ReadOnlyConvertible.swift b/Yosemite/Yosemite/Model/Storage/SiteVisitStatsItem+ReadOnlyConvertible.swift index c55cd528a1b..f6ba76fce56 100644 --- a/Yosemite/Yosemite/Model/Storage/SiteVisitStatsItem+ReadOnlyConvertible.swift +++ b/Yosemite/Yosemite/Model/Storage/SiteVisitStatsItem+ReadOnlyConvertible.swift @@ -17,6 +17,7 @@ extension Storage.SiteVisitStatsItem: ReadOnlyConvertible { /// public func toReadOnly() -> Yosemite.SiteVisitStatsItem { return SiteVisitStatsItem(period: period ?? "", - visitors: Int(visitors)) + visitors: Int(visitors), + views: 0) // TODO-8363: Update Storage with views count } } diff --git a/Yosemite/YosemiteTests/Stores/StatsStoreV4Tests.swift b/Yosemite/YosemiteTests/Stores/StatsStoreV4Tests.swift index 2d08fec1ae6..824fea7cfa6 100644 --- a/Yosemite/YosemiteTests/Stores/StatsStoreV4Tests.swift +++ b/Yosemite/YosemiteTests/Stores/StatsStoreV4Tests.swift @@ -603,11 +603,11 @@ private extension StatsStoreV4Tests { func sampleSiteVisitStatsItem1() -> Networking.SiteVisitStatsItem { - return SiteVisitStatsItem(period: "2014-01-01", visitors: 1135) + return SiteVisitStatsItem(period: "2014-01-01", visitors: 1135, views: 0) } func sampleSiteVisitStatsItem2() -> Networking.SiteVisitStatsItem { - return SiteVisitStatsItem(period: "2015-01-01", visitors: 1629) + return SiteVisitStatsItem(period: "2015-01-01", visitors: 1629, views: 0) } func sampleSiteVisitStatsMutated() -> Networking.SiteVisitStats { @@ -619,11 +619,11 @@ private extension StatsStoreV4Tests { func sampleSiteVisitStatsItem1Mutated() -> Networking.SiteVisitStatsItem { - return SiteVisitStatsItem(period: "2014-01-01", visitors: 1140) + return SiteVisitStatsItem(period: "2014-01-01", visitors: 1140, views: 0) } func sampleSiteVisitStatsItem2Mutated() -> Networking.SiteVisitStatsItem { - return SiteVisitStatsItem(period: "2015-01-01", visitors: 1634) + return SiteVisitStatsItem(period: "2015-01-01", visitors: 1634, views: 0) } // MARK: - Top Earner Stats Sample