Skip to content

Commit eb9d13e

Browse files
committed
Merge branch 'develop' into feature/96-authenticator-appearance
2 parents d384b73 + 1d4bde1 commit eb9d13e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+1648
-2975
lines changed

Networking/Networking.xcodeproj/project.pbxproj

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@
99
/* Begin PBXBuildFile section */
1010
21DB5B99C4107CF69C0A57EC /* Pods_NetworkingTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69314EDE650855CAF927057E /* Pods_NetworkingTests.framework */; };
1111
6647C0161DAC6AB6570C53A7 /* Pods_Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3F25DC15EC1D7C631169CB5 /* Pods_Networking.framework */; };
12+
741B950120EBC8A700DD6E2D /* OrderCouponLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 741B950020EBC8A700DD6E2D /* OrderCouponLine.swift */; };
13+
74C8F06420EEB44800B6EDC9 /* OrderNote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74C8F06320EEB44800B6EDC9 /* OrderNote.swift */; };
14+
74C8F06620EEB76400B6EDC9 /* order-notes.json in Resources */ = {isa = PBXBuildFile; fileRef = 74C8F06520EEB76400B6EDC9 /* order-notes.json */; };
15+
74C8F06820EEB7BD00B6EDC9 /* OrderNotesMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74C8F06720EEB7BC00B6EDC9 /* OrderNotesMapper.swift */; };
16+
74C8F06A20EEBC8C00B6EDC9 /* OrderMapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74C8F06920EEBC8C00B6EDC9 /* OrderMapperTests.swift */; };
17+
74C8F06C20EEBD5D00B6EDC9 /* broken-order.json in Resources */ = {isa = PBXBuildFile; fileRef = 74C8F06B20EEBD5D00B6EDC9 /* broken-order.json */; };
18+
74C8F06E20EEC1E800B6EDC9 /* OrderNotesMapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74C8F06D20EEC1E700B6EDC9 /* OrderNotesMapperTests.swift */; };
19+
74C8F07020EEC3A800B6EDC9 /* broken-notes.json in Resources */ = {isa = PBXBuildFile; fileRef = 74C8F06F20EEC3A800B6EDC9 /* broken-notes.json */; };
1220
B505F6CD20BEE37E00BB1B69 /* AccountMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B505F6CC20BEE37E00BB1B69 /* AccountMapper.swift */; };
1321
B505F6CF20BEE38B00BB1B69 /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = B505F6CE20BEE38B00BB1B69 /* Account.swift */; };
1422
B505F6D120BEE39600BB1B69 /* AccountRemote.swift in Sources */ = {isa = PBXBuildFile; fileRef = B505F6D020BEE39600BB1B69 /* AccountRemote.swift */; };
@@ -39,6 +47,9 @@
3947
B567AF2F20A0FB8F00AB6C62 /* AuthenticatedRequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B567AF2C20A0FB8F00AB6C62 /* AuthenticatedRequestTests.swift */; };
4048
B567AF3020A0FB8F00AB6C62 /* DotcomRequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B567AF2D20A0FB8F00AB6C62 /* DotcomRequestTests.swift */; };
4149
B567AF3120A0FB8F00AB6C62 /* JetpackRequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B567AF2E20A0FB8F00AB6C62 /* JetpackRequestTests.swift */; };
50+
B56C1EB620EA757B00D749F9 /* SiteListMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56C1EB520EA757B00D749F9 /* SiteListMapper.swift */; };
51+
B56C1EB820EA76F500D749F9 /* Site.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56C1EB720EA76F500D749F9 /* Site.swift */; };
52+
B56C1EBA20EA7D2C00D749F9 /* sites.json in Resources */ = {isa = PBXBuildFile; fileRef = B56C1EB920EA7D2C00D749F9 /* sites.json */; };
4253
B5969E1520A47F99005E9DF1 /* RemoteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5969E1420A47F99005E9DF1 /* RemoteTests.swift */; };
4354
B5BB1D0C20A2050300112D92 /* DateFormatter+Woo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BB1D0B20A2050300112D92 /* DateFormatter+Woo.swift */; };
4455
B5BB1D1020A237FB00112D92 /* Address.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BB1D0F20A237FB00112D92 /* Address.swift */; };
@@ -48,7 +59,7 @@
4859
B5C6FCCF20A3592900A4F8E4 /* OrderItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C6FCCE20A3592900A4F8E4 /* OrderItem.swift */; };
4960
B5C6FCD420A373BB00A4F8E4 /* OrderMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C6FCD320A373BA00A4F8E4 /* OrderMapper.swift */; };
5061
B5C6FCD620A3768900A4F8E4 /* order.json in Resources */ = {isa = PBXBuildFile; fileRef = B5C6FCD520A3768900A4F8E4 /* order.json */; };
51-
CE20179320E3EFA7005B4C18 /* broken-order.json in Resources */ = {isa = PBXBuildFile; fileRef = CE20179220E3EFA7005B4C18 /* broken-order.json */; };
62+
CE20179320E3EFA7005B4C18 /* broken-orders.json in Resources */ = {isa = PBXBuildFile; fileRef = CE20179220E3EFA7005B4C18 /* broken-orders.json */; };
5263
/* End PBXBuildFile section */
5364

5465
/* Begin PBXContainerItemProxy section */
@@ -63,6 +74,14 @@
6374

6475
/* Begin PBXFileReference section */
6576
69314EDE650855CAF927057E /* Pods_NetworkingTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NetworkingTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
77+
741B950020EBC8A700DD6E2D /* OrderCouponLine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderCouponLine.swift; sourceTree = "<group>"; };
78+
74C8F06320EEB44800B6EDC9 /* OrderNote.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderNote.swift; sourceTree = "<group>"; };
79+
74C8F06520EEB76400B6EDC9 /* order-notes.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "order-notes.json"; sourceTree = "<group>"; };
80+
74C8F06720EEB7BC00B6EDC9 /* OrderNotesMapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderNotesMapper.swift; sourceTree = "<group>"; };
81+
74C8F06920EEBC8C00B6EDC9 /* OrderMapperTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderMapperTests.swift; sourceTree = "<group>"; };
82+
74C8F06B20EEBD5D00B6EDC9 /* broken-order.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "broken-order.json"; sourceTree = "<group>"; };
83+
74C8F06D20EEC1E700B6EDC9 /* OrderNotesMapperTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderNotesMapperTests.swift; sourceTree = "<group>"; };
84+
74C8F06F20EEC3A800B6EDC9 /* broken-notes.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "broken-notes.json"; sourceTree = "<group>"; };
6685
753D6504FF01F09F6A33B73E /* Pods-Networking.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Networking.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-Networking/Pods-Networking.debug.xcconfig"; sourceTree = "<group>"; };
6786
B505F6CC20BEE37E00BB1B69 /* AccountMapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountMapper.swift; sourceTree = "<group>"; };
6887
B505F6CE20BEE38B00BB1B69 /* Account.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = "<group>"; };
@@ -97,6 +116,9 @@
97116
B567AF2C20A0FB8F00AB6C62 /* AuthenticatedRequestTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthenticatedRequestTests.swift; sourceTree = "<group>"; };
98117
B567AF2D20A0FB8F00AB6C62 /* DotcomRequestTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DotcomRequestTests.swift; sourceTree = "<group>"; };
99118
B567AF2E20A0FB8F00AB6C62 /* JetpackRequestTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JetpackRequestTests.swift; sourceTree = "<group>"; };
119+
B56C1EB520EA757B00D749F9 /* SiteListMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteListMapper.swift; sourceTree = "<group>"; };
120+
B56C1EB720EA76F500D749F9 /* Site.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Site.swift; sourceTree = "<group>"; };
121+
B56C1EB920EA7D2C00D749F9 /* sites.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = sites.json; sourceTree = "<group>"; };
100122
B5969E1420A47F99005E9DF1 /* RemoteTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteTests.swift; sourceTree = "<group>"; };
101123
B5BB1D0B20A2050300112D92 /* DateFormatter+Woo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DateFormatter+Woo.swift"; sourceTree = "<group>"; };
102124
B5BB1D0F20A237FB00112D92 /* Address.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Address.swift; sourceTree = "<group>"; };
@@ -108,7 +130,7 @@
108130
B5C6FCD520A3768900A4F8E4 /* order.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = order.json; sourceTree = "<group>"; };
109131
BD9439D9B8F2C1ED2EADAA51 /* Pods-NetworkingTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NetworkingTests.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-NetworkingTests/Pods-NetworkingTests.debug.xcconfig"; sourceTree = "<group>"; };
110132
C8F9A8CC6F90A8C9B5EF2EE2 /* Pods-Networking.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Networking.release.xcconfig"; path = "../Pods/Target Support Files/Pods-Networking/Pods-Networking.release.xcconfig"; sourceTree = "<group>"; };
111-
CE20179220E3EFA7005B4C18 /* broken-order.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "broken-order.json"; sourceTree = "<group>"; };
133+
CE20179220E3EFA7005B4C18 /* broken-orders.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "broken-orders.json"; sourceTree = "<group>"; };
112134
F3F25DC15EC1D7C631169CB5 /* Pods_Networking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Networking.framework; sourceTree = BUILT_PRODUCTS_DIR; };
113135
F6CEE1CA2AD376C0C28AE9F6 /* Pods-NetworkingTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NetworkingTests.release.xcconfig"; path = "../Pods/Target Support Files/Pods-NetworkingTests/Pods-NetworkingTests.release.xcconfig"; sourceTree = "<group>"; };
114136
/* End PBXFileReference section */
@@ -278,8 +300,11 @@
278300
B505F6CE20BEE38B00BB1B69 /* Account.swift */,
279301
B5BB1D0F20A237FB00112D92 /* Address.swift */,
280302
B557DA1C20979E7D005962F4 /* Order.swift */,
281-
B5BB1D1120A255EC00112D92 /* OrderStatus.swift */,
303+
741B950020EBC8A700DD6E2D /* OrderCouponLine.swift */,
282304
B5C6FCCE20A3592900A4F8E4 /* OrderItem.swift */,
305+
74C8F06320EEB44800B6EDC9 /* OrderNote.swift */,
306+
B5BB1D1120A255EC00112D92 /* OrderStatus.swift */,
307+
B56C1EB720EA76F500D749F9 /* Site.swift */,
283308
);
284309
path = Model;
285310
sourceTree = "<group>";
@@ -290,7 +315,11 @@
290315
B505F6D420BEE4E600BB1B69 /* me.json */,
291316
B559EBA920A0B5CD00836CD4 /* orders-load-all.json */,
292317
B5C6FCD520A3768900A4F8E4 /* order.json */,
293-
CE20179220E3EFA7005B4C18 /* broken-order.json */,
318+
CE20179220E3EFA7005B4C18 /* broken-orders.json */,
319+
74C8F06B20EEBD5D00B6EDC9 /* broken-order.json */,
320+
74C8F06520EEB76400B6EDC9 /* order-notes.json */,
321+
74C8F06F20EEC3A800B6EDC9 /* broken-notes.json */,
322+
B56C1EB920EA7D2C00D749F9 /* sites.json */,
294323
);
295324
path = Responses;
296325
sourceTree = "<group>";
@@ -302,6 +331,8 @@
302331
B505F6CC20BEE37E00BB1B69 /* AccountMapper.swift */,
303332
B5C6FCD320A373BA00A4F8E4 /* OrderMapper.swift */,
304333
B567AF2A20A0FA4200AB6C62 /* OrderListMapper.swift */,
334+
B56C1EB520EA757B00D749F9 /* SiteListMapper.swift */,
335+
74C8F06720EEB7BC00B6EDC9 /* OrderNotesMapper.swift */,
305336
);
306337
path = Mapper;
307338
sourceTree = "<group>";
@@ -327,6 +358,8 @@
327358
children = (
328359
B505F6D220BEE3A500BB1B69 /* AccountMapperTests.swift */,
329360
B5C6FCCC20A34B8300A4F8E4 /* OrderListMapperTests.swift */,
361+
74C8F06920EEBC8C00B6EDC9 /* OrderMapperTests.swift */,
362+
74C8F06D20EEC1E700B6EDC9 /* OrderNotesMapperTests.swift */,
330363
);
331364
path = Mapper;
332365
sourceTree = "<group>";
@@ -444,10 +477,14 @@
444477
isa = PBXResourcesBuildPhase;
445478
buildActionMask = 2147483647;
446479
files = (
480+
74C8F06620EEB76400B6EDC9 /* order-notes.json in Resources */,
481+
74C8F06C20EEBD5D00B6EDC9 /* broken-order.json in Resources */,
447482
B505F6D520BEE4E700BB1B69 /* me.json in Resources */,
448483
B5C6FCD620A3768900A4F8E4 /* order.json in Resources */,
449484
B559EBAA20A0B5CD00836CD4 /* orders-load-all.json in Resources */,
450-
CE20179320E3EFA7005B4C18 /* broken-order.json in Resources */,
485+
B56C1EBA20EA7D2C00D749F9 /* sites.json in Resources */,
486+
CE20179320E3EFA7005B4C18 /* broken-orders.json in Resources */,
487+
74C8F07020EEC3A800B6EDC9 /* broken-notes.json in Resources */,
451488
);
452489
runOnlyForDeploymentPostprocessing = 0;
453490
};
@@ -517,11 +554,15 @@
517554
isa = PBXSourcesBuildPhase;
518555
buildActionMask = 2147483647;
519556
files = (
557+
B56C1EB620EA757B00D749F9 /* SiteListMapper.swift in Sources */,
520558
B557DA1A20979D66005962F4 /* Settings.swift in Sources */,
559+
741B950120EBC8A700DD6E2D /* OrderCouponLine.swift in Sources */,
560+
74C8F06420EEB44800B6EDC9 /* OrderNote.swift in Sources */,
521561
B5BB1D0C20A2050300112D92 /* DateFormatter+Woo.swift in Sources */,
522562
B567AF2520A0CCA300AB6C62 /* AuthenticatedRequest.swift in Sources */,
523563
B505F6EA20BEFC3700BB1B69 /* MockupNetwork.swift in Sources */,
524564
B557DA0220975500005962F4 /* JetpackRequest.swift in Sources */,
565+
B56C1EB820EA76F500D749F9 /* Site.swift in Sources */,
525566
B505F6CD20BEE37E00BB1B69 /* AccountMapper.swift in Sources */,
526567
B557DA0D20975DB1005962F4 /* WordPressAPIVersion.swift in Sources */,
527568
B557DA1D20979E7D005962F4 /* Order.swift in Sources */,
@@ -533,6 +574,7 @@
533574
B5C6FCCF20A3592900A4F8E4 /* OrderItem.swift in Sources */,
534575
B505F6EC20BEFDC200BB1B69 /* Loader.swift in Sources */,
535576
B5BB1D1220A255EC00112D92 /* OrderStatus.swift in Sources */,
577+
74C8F06820EEB7BD00B6EDC9 /* OrderNotesMapper.swift in Sources */,
536578
B5BB1D1020A237FB00112D92 /* Address.swift in Sources */,
537579
B557DA0420975500005962F4 /* OrdersRemote.swift in Sources */,
538580
B5C6FCD420A373BB00A4F8E4 /* OrderMapper.swift in Sources */,
@@ -550,10 +592,12 @@
550592
files = (
551593
B505F6D320BEE3A500BB1B69 /* AccountMapperTests.swift in Sources */,
552594
B5C6FCC820A32E4800A4F8E4 /* DateFormatterWooTests.swift in Sources */,
595+
74C8F06A20EEBC8C00B6EDC9 /* OrderMapperTests.swift in Sources */,
553596
B567AF3120A0FB8F00AB6C62 /* JetpackRequestTests.swift in Sources */,
554597
B505F6D720BEE58800BB1B69 /* AccountRemoteTests.swift in Sources */,
555598
B518662A20A09C6F00037A38 /* OrdersRemoteTests.swift in Sources */,
556599
B5969E1520A47F99005E9DF1 /* RemoteTests.swift in Sources */,
600+
74C8F06E20EEC1E800B6EDC9 /* OrderNotesMapperTests.swift in Sources */,
557601
B567AF2F20A0FB8F00AB6C62 /* AuthenticatedRequestTests.swift in Sources */,
558602
B5C6FCCD20A34B8300A4F8E4 /* OrderListMapperTests.swift in Sources */,
559603
B518663520A0A2E800037A38 /* Constants.swift in Sources */,
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import Foundation
2+
3+
4+
/// Mapper: OrderNotes
5+
///
6+
class OrderNotesMapper: Mapper {
7+
8+
/// (Attempts) to convert a dictionary into [OrderNote].
9+
///
10+
func map(response: Data) throws -> [OrderNote] {
11+
let decoder = JSONDecoder()
12+
decoder.dateDecodingStrategy = .formatted(DateFormatter.Defaults.dateTimeFormatter)
13+
14+
return try decoder.decode(OrderNotesEnvelope.self, from: response).orderNotes
15+
}
16+
}
17+
18+
19+
/// OrderNote Disposable Entity:
20+
/// `Load Order Notes` endpoint returns all of its notes within the `data` key. This entity
21+
/// allows us to do parse all the things with JSONDecoder.
22+
///
23+
private struct OrderNotesEnvelope: Decodable {
24+
let orderNotes: [OrderNote]
25+
26+
private enum CodingKeys: String, CodingKey {
27+
case orderNotes = "data"
28+
}
29+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import Foundation
2+
3+
4+
/// Mapper: SiteList
5+
///
6+
class SiteListMapper: Mapper {
7+
8+
/// (Attempts) to convert a dictionary into [Site].
9+
///
10+
func map(response: Data) throws -> [Site] {
11+
let decoder = JSONDecoder()
12+
decoder.dateDecodingStrategy = .formatted(DateFormatter.Defaults.dateTimeFormatter)
13+
14+
return try decoder.decode(SiteListEnvelope.self, from: response).sites
15+
}
16+
}
17+
18+
19+
/// SiteList Disposable Entity:
20+
/// `Load All Sites` endpoint returns all of its orders within the `sites` key. This entity
21+
/// allows us to do parse all the things with JSONDecoder.
22+
///
23+
private struct SiteListEnvelope: Decodable {
24+
let sites: [Site]
25+
26+
private enum CodingKeys: String, CodingKey {
27+
case sites = "sites"
28+
}
29+
}

0 commit comments

Comments
 (0)