Skip to content

Commit 15f88d6

Browse files
authored
Merge pull request #5304 from woocommerce/merge/7.8-beta-3-into-develop
Merge 7.8 beta 3 into develop
2 parents 98f731a + 2daefac commit 15f88d6

File tree

22 files changed

+370
-218
lines changed

22 files changed

+370
-218
lines changed

Networking/Networking.xcodeproj/project.pbxproj

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,11 @@
6969
02E7FFCF25621C7900C53030 /* shipping-label-print.json in Resources */ = {isa = PBXBuildFile; fileRef = 02E7FFCE25621C7900C53030 /* shipping-label-print.json */; };
7070
02F096C22406691100C0C1D5 /* media-library.json in Resources */ = {isa = PBXBuildFile; fileRef = 02F096C12406691100C0C1D5 /* media-library.json */; };
7171
077F39C8269F2C7E00ABEADC /* SystemPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077F39C7269F2C7E00ABEADC /* SystemPlugin.swift */; };
72-
077F39D426A58DE700ABEADC /* SystemPluginsMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077F39D326A58DE700ABEADC /* SystemPluginsMapper.swift */; };
73-
077F39D626A58E4500ABEADC /* SystemPluginsRemote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077F39D526A58E4500ABEADC /* SystemPluginsRemote.swift */; };
74-
077F39D826A58EB600ABEADC /* systemPlugins.json in Resources */ = {isa = PBXBuildFile; fileRef = 077F39D726A58EB600ABEADC /* systemPlugins.json */; };
75-
077F39DA26A58ED700ABEADC /* SystemPluginsRemoteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077F39D926A58ED700ABEADC /* SystemPluginsRemoteTests.swift */; };
76-
077F39E626A5D15800ABEADC /* SystemPluginsMapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077F39DB26A58F4800ABEADC /* SystemPluginsMapperTests.swift */; };
72+
077F39D426A58DE700ABEADC /* SystemStatusMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077F39D326A58DE700ABEADC /* SystemStatusMapper.swift */; };
73+
077F39D626A58E4500ABEADC /* SystemStatusRemote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077F39D526A58E4500ABEADC /* SystemStatusRemote.swift */; };
74+
077F39D826A58EB600ABEADC /* systemStatus.json in Resources */ = {isa = PBXBuildFile; fileRef = 077F39D726A58EB600ABEADC /* systemStatus.json */; };
75+
077F39DA26A58ED700ABEADC /* SystemStatusRemoteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077F39D926A58ED700ABEADC /* SystemStatusRemoteTests.swift */; };
76+
077F39E626A5D15800ABEADC /* SystemStatusMapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077F39DB26A58F4800ABEADC /* SystemStatusMapperTests.swift */; };
7777
21DB5B99C4107CF69C0A57EC /* Pods_NetworkingTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69314EDE650855CAF927057E /* Pods_NetworkingTests.framework */; };
7878
24F98C522502E79800F49B68 /* FeatureFlagsRemote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24F98C512502E79800F49B68 /* FeatureFlagsRemote.swift */; };
7979
24F98C542502E8DD00F49B68 /* Bundle+Woo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24F98C532502E8DD00F49B68 /* Bundle+Woo.swift */; };
@@ -142,6 +142,7 @@
142142
31104E142630DDA700587C1E /* wcpay-account-wrong-json.json in Resources */ = {isa = PBXBuildFile; fileRef = 31104E132630DDA700587C1E /* wcpay-account-wrong-json.json */; };
143143
311976E02602BD4B006AC56C /* SitePluginsMapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 311976DF2602BD4B006AC56C /* SitePluginsMapperTests.swift */; };
144144
314703082670222500EF253A /* PaymentGatewayAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 314703072670222500EF253A /* PaymentGatewayAccount.swift */; };
145+
3148977027232982007A86BD /* SystemStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3148976F27232982007A86BD /* SystemStatus.swift */; };
145146
3158A49F2729F3F600C3CFA8 /* wcpay-account-live-live.json in Resources */ = {isa = PBXBuildFile; fileRef = 3158A49E2729F3F600C3CFA8 /* wcpay-account-live-live.json */; };
146147
3158A4A12729F40F00C3CFA8 /* wcpay-account-live-test.json in Resources */ = {isa = PBXBuildFile; fileRef = 3158A4A02729F40F00C3CFA8 /* wcpay-account-live-test.json */; };
147148
3158A4A32729F42500C3CFA8 /* wcpay-account-dev-test.json in Resources */ = {isa = PBXBuildFile; fileRef = 3158A4A22729F42500C3CFA8 /* wcpay-account-dev-test.json */; };
@@ -636,11 +637,11 @@
636637
02E7FFCE25621C7900C53030 /* shipping-label-print.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "shipping-label-print.json"; sourceTree = "<group>"; };
637638
02F096C12406691100C0C1D5 /* media-library.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "media-library.json"; sourceTree = "<group>"; };
638639
077F39C7269F2C7E00ABEADC /* SystemPlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemPlugin.swift; sourceTree = "<group>"; };
639-
077F39D326A58DE700ABEADC /* SystemPluginsMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemPluginsMapper.swift; sourceTree = "<group>"; };
640-
077F39D526A58E4500ABEADC /* SystemPluginsRemote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemPluginsRemote.swift; sourceTree = "<group>"; };
641-
077F39D726A58EB600ABEADC /* systemPlugins.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = systemPlugins.json; sourceTree = "<group>"; };
642-
077F39D926A58ED700ABEADC /* SystemPluginsRemoteTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemPluginsRemoteTests.swift; sourceTree = "<group>"; };
643-
077F39DB26A58F4800ABEADC /* SystemPluginsMapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemPluginsMapperTests.swift; sourceTree = "<group>"; };
640+
077F39D326A58DE700ABEADC /* SystemStatusMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemStatusMapper.swift; sourceTree = "<group>"; };
641+
077F39D526A58E4500ABEADC /* SystemStatusRemote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemStatusRemote.swift; sourceTree = "<group>"; };
642+
077F39D726A58EB600ABEADC /* systemStatus.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = systemStatus.json; sourceTree = "<group>"; };
643+
077F39D926A58ED700ABEADC /* SystemStatusRemoteTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemStatusRemoteTests.swift; sourceTree = "<group>"; };
644+
077F39DB26A58F4800ABEADC /* SystemStatusMapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemStatusMapperTests.swift; sourceTree = "<group>"; };
644645
24F98C512502E79800F49B68 /* FeatureFlagsRemote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureFlagsRemote.swift; sourceTree = "<group>"; };
645646
24F98C532502E8DD00F49B68 /* Bundle+Woo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Bundle+Woo.swift"; sourceTree = "<group>"; };
646647
24F98C552502EA4800F49B68 /* FeatureFlag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureFlag.swift; sourceTree = "<group>"; };
@@ -707,6 +708,7 @@
707708
31104E132630DDA700587C1E /* wcpay-account-wrong-json.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "wcpay-account-wrong-json.json"; sourceTree = "<group>"; };
708709
311976DF2602BD4B006AC56C /* SitePluginsMapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SitePluginsMapperTests.swift; sourceTree = "<group>"; };
709710
314703072670222500EF253A /* PaymentGatewayAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentGatewayAccount.swift; sourceTree = "<group>"; };
711+
3148976F27232982007A86BD /* SystemStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemStatus.swift; sourceTree = "<group>"; };
710712
3158A49E2729F3F600C3CFA8 /* wcpay-account-live-live.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "wcpay-account-live-live.json"; sourceTree = "<group>"; };
711713
3158A4A02729F40F00C3CFA8 /* wcpay-account-live-test.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "wcpay-account-live-test.json"; sourceTree = "<group>"; };
712714
3158A4A22729F42500C3CFA8 /* wcpay-account-dev-test.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "wcpay-account-dev-test.json"; sourceTree = "<group>"; };
@@ -1348,7 +1350,7 @@
13481350
02E7FFCA256218F600C53030 /* ShippingLabelRemoteTests.swift */,
13491351
D800DA0925EFEB9C001E13CE /* WCPayRemoteTests.swift */,
13501352
FE28F6EB268436C9004465C7 /* UserRemoteTests.swift */,
1351-
077F39D926A58ED700ABEADC /* SystemPluginsRemoteTests.swift */,
1353+
077F39D926A58ED700ABEADC /* SystemStatusRemoteTests.swift */,
13521354
);
13531355
path = Remote;
13541356
sourceTree = "<group>";
@@ -1473,7 +1475,7 @@
14731475
029BA4EF255D7282006171FD /* ShippingLabelRemote.swift */,
14741476
D8EDFE1D25EE87F1003D2213 /* WCPayRemote.swift */,
14751477
FE28F6E5268429B6004465C7 /* UserRemote.swift */,
1476-
077F39D526A58E4500ABEADC /* SystemPluginsRemote.swift */,
1478+
077F39D526A58E4500ABEADC /* SystemStatusRemote.swift */,
14771479
);
14781480
path = Remote;
14791481
sourceTree = "<group>";
@@ -1551,6 +1553,8 @@
15511553
74046E1C217A6989007DD7BF /* SiteSetting.swift */,
15521554
74159624224D4045003C21CF /* SiteSettingGroup.swift */,
15531555
CE50345F21B5799F007573C6 /* SitePlan.swift */,
1556+
077F39C7269F2C7E00ABEADC /* SystemPlugin.swift */,
1557+
3148976F27232982007A86BD /* SystemStatus.swift */,
15541558
450106842399A7CB00E24722 /* TaxClass.swift */,
15551559
3192F21F260D33BB0067FEF9 /* WCPayAccount.swift */,
15561560
3192F223260D34C40067FEF9 /* WCPayAccountStatusEnum.swift */,
@@ -1559,7 +1563,6 @@
15591563
31054705262E278100C5C02B /* WCPayPaymentIntent.swift */,
15601564
3105470B262E27F000C5C02B /* WCPayPaymentIntentStatusEnum.swift */,
15611565
FE28F6E126840DED004465C7 /* User.swift */,
1562-
077F39C7269F2C7E00ABEADC /* SystemPlugin.swift */,
15631566
);
15641567
path = Model;
15651568
sourceTree = "<group>";
@@ -1736,7 +1739,7 @@
17361739
3105472B262E303400C5C02B /* wcpay-payment-intent-unknown-status.json */,
17371740
31054733262E36AB00C5C02B /* wcpay-payment-intent-error.json */,
17381741
31B8D6B526583970008E3DB2 /* wcpay-account-implicitly-not-eligible.json */,
1739-
077F39D726A58EB600ABEADC /* systemPlugins.json */,
1742+
077F39D726A58EB600ABEADC /* systemStatus.json */,
17401743
);
17411744
path = Responses;
17421745
sourceTree = "<group>";
@@ -1810,7 +1813,7 @@
18101813
CC0786602677B2DA00BA9AC1 /* ShippingLabelPurchaseMapper.swift */,
18111814
CC0786C4267BAF0F00BA9AC1 /* ShippingLabelStatusMapper.swift */,
18121815
FE28F6E326842848004465C7 /* UserMapper.swift */,
1813-
077F39D326A58DE700ABEADC /* SystemPluginsMapper.swift */,
1816+
077F39D326A58DE700ABEADC /* SystemStatusMapper.swift */,
18141817
);
18151818
path = Mapper;
18161819
sourceTree = "<group>";
@@ -1875,7 +1878,7 @@
18751878
children = (
18761879
B505F6D220BEE3A500BB1B69 /* AccountMapperTests.swift */,
18771880
9387A6EF226E3F15001B53D7 /* AccountSettingsMapperTests.swift */,
1878-
077F39DB26A58F4800ABEADC /* SystemPluginsMapperTests.swift */,
1881+
077F39DB26A58F4800ABEADC /* SystemStatusMapperTests.swift */,
18791882
2685C0D9263B551300D9EE97 /* AddOnGroupMapperTests.swift */,
18801883
74AB0AC921948CE4008220CD /* CommentResultMapperTests.swift */,
18811884
45150A9F26837357006922EA /* CountryListMapperTests.swift */,
@@ -2118,7 +2121,7 @@
21182121
31054728262E2FEE00C5C02B /* wcpay-payment-intent-canceled.json in Resources */,
21192122
24F98C622502EFF600F49B68 /* feature-flags-load-all.json in Resources */,
21202123
B58D10C82114D21D00107ED4 /* generic_error.json in Resources */,
2121-
077F39D826A58EB600ABEADC /* systemPlugins.json in Resources */,
2124+
077F39D826A58EB600ABEADC /* systemStatus.json in Resources */,
21222125
CE50346721B5DCBE007573C6 /* site-plan.json in Resources */,
21232126
743E84F322172D0A00FAC9D7 /* shipment_tracking_empty.json in Resources */,
21242127
B505F6D520BEE4E700BB1B69 /* me.json in Resources */,
@@ -2465,7 +2468,7 @@
24652468
261CF1B8255AE62D0090D8D3 /* PaymentGatewayRemote.swift in Sources */,
24662469
CE0A0F1522396BF00075ED8D /* ProductAttribute.swift in Sources */,
24672470
026CF620237D69D6009563D4 /* ProductVariationsRemote.swift in Sources */,
2468-
077F39D626A58E4500ABEADC /* SystemPluginsRemote.swift in Sources */,
2471+
077F39D626A58E4500ABEADC /* SystemStatusRemote.swift in Sources */,
24692472
4599FC5E24A62AA70056157A /* ProductTagsRemote.swift in Sources */,
24702473
FE28F6E226840DED004465C7 /* User.swift in Sources */,
24712474
7426CA0F21AF2C90004E9FFC /* SiteAPI.swift in Sources */,
@@ -2490,6 +2493,7 @@
24902493
CE430676234BA7920073CBFF /* RefundListMapper.swift in Sources */,
24912494
45551F122523E7F1007EF104 /* UserAgent.swift in Sources */,
24922495
45CDAFAB2434CA9300F83C22 /* ProductCatalogVisibility.swift in Sources */,
2496+
3148977027232982007A86BD /* SystemStatus.swift in Sources */,
24932497
B557DA1820979D51005962F4 /* Credentials.swift in Sources */,
24942498
CE583A0E2109154500D73C1C /* OrderNoteMapper.swift in Sources */,
24952499
318E8FD526C31F9500F519D7 /* WCPayCustomer.swift in Sources */,
@@ -2555,7 +2559,7 @@
25552559
B557DA0B20975D7E005962F4 /* WooAPIVersion.swift in Sources */,
25562560
45150A9E26836A57006922EA /* CountryListMapper.swift in Sources */,
25572561
CE6BFEE82236D133005C79FB /* ProductDimensions.swift in Sources */,
2558-
077F39D426A58DE700ABEADC /* SystemPluginsMapper.swift in Sources */,
2562+
077F39D426A58DE700ABEADC /* SystemStatusMapper.swift in Sources */,
25592563
45152811257A81730076B03C /* ProductAttributeMapper.swift in Sources */,
25602564
B505F6D120BEE39600BB1B69 /* AccountRemote.swift in Sources */,
25612565
B567AF2B20A0FA4200AB6C62 /* OrderListMapper.swift in Sources */,
@@ -2614,7 +2618,7 @@
26142618
B5C6FCC820A32E4800A4F8E4 /* DateFormatterWooTests.swift in Sources */,
26152619
74C8F06A20EEBC8C00B6EDC9 /* OrderMapperTests.swift in Sources */,
26162620
45152835257A8F490076B03C /* ProductAttributeListMapperTests.swift in Sources */,
2617-
077F39DA26A58ED700ABEADC /* SystemPluginsRemoteTests.swift in Sources */,
2621+
077F39DA26A58ED700ABEADC /* SystemStatusRemoteTests.swift in Sources */,
26182622
31D27C952602B737002EDB1D /* SitePluginsRemoteTests.swift in Sources */,
26192623
74AB5B4D21AF354E00859C12 /* SiteAPIMapperTests.swift in Sources */,
26202624
93D8BC01226BC20600AD2EB3 /* AccountSettingsRemoteTests.swift in Sources */,
@@ -2647,7 +2651,7 @@
26472651
020C907F24C7D359001E2BEB /* ProductVariationMapperTests.swift in Sources */,
26482652
74ABA1D5213F26B300FFAD30 /* TopEarnerStatsMapperTests.swift in Sources */,
26492653
74AB5B5121AF426D00859C12 /* SiteAPIRemoteTests.swift in Sources */,
2650-
077F39E626A5D15800ABEADC /* SystemPluginsMapperTests.swift in Sources */,
2654+
077F39E626A5D15800ABEADC /* SystemStatusMapperTests.swift in Sources */,
26512655
4599FC6624A633A10056157A /* ProductTagsRemoteTests.swift in Sources */,
26522656
B567AF2F20A0FB8F00AB6C62 /* AuthenticatedRequestTests.swift in Sources */,
26532657
B5C6FCCD20A34B8300A4F8E4 /* OrderListMapperTests.swift in Sources */,

Networking/Networking/Mapper/SystemPluginsMapper.swift

Lines changed: 0 additions & 43 deletions
This file was deleted.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import Foundation
2+
3+
/// Mapper: System Status
4+
///
5+
struct SystemStatusMapper: Mapper {
6+
7+
/// Site Identifier associated to the system plugins that will be parsed.
8+
/// We're injecting this field via `JSONDecoder.userInfo` because the remote endpoints don't return the SiteID in the system plugin endpoint.
9+
///
10+
let siteID: Int64
11+
12+
/// (Attempts) to convert a dictionary into [SystemPlugin].
13+
///
14+
func map(response: Data) throws -> [SystemPlugin] {
15+
let decoder = JSONDecoder()
16+
decoder.userInfo = [
17+
.siteID: siteID
18+
]
19+
20+
let systemStatus = try decoder.decode(SystemStatusEnvelope.self, from: response).systemStatus
21+
22+
/// For now, we're going to override the networkActivated Bool in each plugin to convey active or inactive -- in order to
23+
/// avoid a core data change to add a Bool for activated
24+
/// This will be undone in #5269
25+
let activePlugins = systemStatus.activePlugins.map {
26+
$0.overrideNetworkActivated(isNetworkActivated: true)
27+
}
28+
let inactivePlugins = systemStatus.inactivePlugins.map {
29+
$0.overrideNetworkActivated(isNetworkActivated: false)
30+
}
31+
32+
return activePlugins + inactivePlugins
33+
}
34+
}
35+
36+
/// System Status endpoint returns the requested account in the `data` key. This entity
37+
/// allows us to parse it with JSONDecoder.
38+
///
39+
private struct SystemStatusEnvelope: Decodable {
40+
let systemStatus: SystemStatus
41+
42+
private enum CodingKeys: String, CodingKey {
43+
case systemStatus = "data"
44+
}
45+
}

Networking/Networking/Model/SystemPlugin.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,22 @@ public struct SystemPlugin: Decodable, GeneratedFakeable, GeneratedCopiable {
8888
}
8989
}
9090

91+
extension SystemPlugin {
92+
func overrideNetworkActivated(isNetworkActivated: Bool) -> SystemPlugin {
93+
SystemPlugin(
94+
siteID: self.siteID,
95+
plugin: self.plugin,
96+
name: self.name,
97+
version: self.version,
98+
versionLatest: self.versionLatest,
99+
url: self.url,
100+
authorName: self.authorName,
101+
authorUrl: self.authorUrl,
102+
networkActivated: isNetworkActivated
103+
)
104+
}
105+
}
106+
91107
/// Defines all of the SystemPlugin CodingKeys.
92108
///
93109
private extension SystemPlugin {
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/// Represent a System Status.
2+
/// Note: We are only decoding the active and inactive plugins portions at the moment.
3+
///
4+
public struct SystemStatus: Decodable {
5+
let activePlugins: [SystemPlugin]
6+
let inactivePlugins: [SystemPlugin]
7+
8+
public init(
9+
activePlugins: [SystemPlugin],
10+
inactivePlugins: [SystemPlugin]
11+
) {
12+
self.activePlugins = activePlugins
13+
self.inactivePlugins = inactivePlugins
14+
}
15+
16+
/// The public initializer for System Status.
17+
///
18+
public init(from decoder: Decoder) throws {
19+
let container = try decoder.container(keyedBy: CodingKeys.self)
20+
let activePlugins = try container.decode([SystemPlugin].self, forKey: .activePlugins)
21+
let inactivePlugins = try container.decode([SystemPlugin].self, forKey: .inactivePlugins)
22+
23+
self.init(
24+
activePlugins: activePlugins,
25+
inactivePlugins: inactivePlugins
26+
)
27+
}
28+
}
29+
30+
private extension SystemStatus {
31+
enum CodingKeys: String, CodingKey {
32+
case activePlugins = "active_plugins"
33+
case inactivePlugins = "inactive_plugins"
34+
}
35+
}

0 commit comments

Comments
 (0)