From 335238d683aee49063545d9627a3224f414f72ea Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Fri, 21 Mar 2025 23:13:04 -0300 Subject: [PATCH 01/23] Merge CellController initializers --- .../Shared UI/Controllers/CellController.swift | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/EssentialFeed/EssentialFeediOS/Shared UI/Controllers/CellController.swift b/EssentialFeed/EssentialFeediOS/Shared UI/Controllers/CellController.swift index 220fc03..1fd5778 100644 --- a/EssentialFeed/EssentialFeediOS/Shared UI/Controllers/CellController.swift +++ b/EssentialFeed/EssentialFeediOS/Shared UI/Controllers/CellController.swift @@ -11,18 +11,11 @@ public struct CellController { let delegate: UITableViewDelegate? let dataSourcePrefetching: UITableViewDataSourcePrefetching? - public init(id: AnyHashable, _ dataSource: UITableViewDataSource & UITableViewDelegate & UITableViewDataSourcePrefetching) { - self.id = id - self.dataSource = dataSource - self.delegate = dataSource - self.dataSourcePrefetching = dataSource - } - public init(id: AnyHashable, _ dataSource: UITableViewDataSource) { self.id = id self.dataSource = dataSource - self.delegate = nil - self.dataSourcePrefetching = nil + self.delegate = dataSource as? UITableViewDelegate + self.dataSourcePrefetching = dataSource as? UITableViewDataSourcePrefetching } } From 3a5de1e1bbee6a7c4d6c94563d1411f314c89ddd Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Fri, 21 Mar 2025 23:19:11 -0300 Subject: [PATCH 02/23] Improve coverage with distinct image data per index --- .../FeedAcceptanceTests.swift | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/EssentialApp/EssentialAppTests/FeedAcceptanceTests.swift b/EssentialApp/EssentialAppTests/FeedAcceptanceTests.swift index 85cc6d0..df6ff82 100644 --- a/EssentialApp/EssentialAppTests/FeedAcceptanceTests.swift +++ b/EssentialApp/EssentialAppTests/FeedAcceptanceTests.swift @@ -14,8 +14,8 @@ class FeedAcceptanceTests: XCTestCase { let feed = launch(httpClient: .online(response), store: .empty) XCTAssertEqual(feed.numberOfRenderedFeedImageViews(), 2) - XCTAssertEqual(feed.renderedFeedImageData(at: 0), makeImageData()) - XCTAssertEqual(feed.renderedFeedImageData(at: 1), makeImageData()) + XCTAssertEqual(feed.renderedFeedImageData(at: 0), makeImageData0()) + XCTAssertEqual(feed.renderedFeedImageData(at: 1), makeImageData1()) } func test_onLaunch_displaysCachedRemoteFeedWhenCustomerHasNoConnectivity() { @@ -27,8 +27,8 @@ class FeedAcceptanceTests: XCTestCase { let offlineFeed = launch(httpClient: .offline, store: sharedStore) XCTAssertEqual(offlineFeed.numberOfRenderedFeedImageViews(), 2) - XCTAssertEqual(offlineFeed.renderedFeedImageData(at: 0), makeImageData()) - XCTAssertEqual(offlineFeed.renderedFeedImageData(at: 1), makeImageData()) + XCTAssertEqual(offlineFeed.renderedFeedImageData(at: 0), makeImageData0()) + XCTAssertEqual(offlineFeed.renderedFeedImageData(at: 1), makeImageData1()) } func test_onLaunch_displaysEmptyFeedWhenCustomerHasNoConnectivityAndNoCache() { @@ -100,8 +100,8 @@ class FeedAcceptanceTests: XCTestCase { private func makeData(for url: URL) -> Data { switch url.path { - case "/image-1", "/image-2": - return makeImageData() + case "/image-0": return makeImageData0() + case "/image-1": return makeImageData1() case "/essential-feed/v1/feed": return makeFeedData() @@ -114,14 +114,13 @@ class FeedAcceptanceTests: XCTestCase { } } - private func makeImageData() -> Data { - return UIImage.make(withColor: .red).pngData()! - } + private func makeImageData0() -> Data { UIImage.make(withColor: .red).pngData()! } + private func makeImageData1() -> Data { UIImage.make(withColor: .green).pngData()! } private func makeFeedData() -> Data { return try! JSONSerialization.data(withJSONObject: ["items": [ - ["id": "2AB2AE66-A4B7-4A16-B374-51BBAC8DB086", "image": "http://feed.com/image-1"], - ["id": "A28F5FE3-27A7-44E9-8DF5-53742D0E4A5A", "image": "http://feed.com/image-2"] + ["id": "2AB2AE66-A4B7-4A16-B374-51BBAC8DB086", "image": "http://feed.com/image-0"], + ["id": "A28F5FE3-27A7-44E9-8DF5-53742D0E4A5A", "image": "http://feed.com/image-1"] ]]) } From 76a3635ec2b8257e6c7a0df2d250e4b2d9349884 Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Sat, 22 Mar 2025 00:04:25 -0300 Subject: [PATCH 03/23] Add "Load more" cell controller with loading indicator --- .../EssentialFeed.xcodeproj/project.pbxproj | 16 ++++++++ .../Controllers/LoadMoreCellController.swift | 25 +++++++++++++ .../Feed UI/Views/LoadMoreCell.swift | 35 ++++++++++++++++++ .../Feed UI/FeedSnapshotTests.swift | 22 +++++++++++ .../FEED_WITH_LOAD_MORE_INDICATOR_dark.png | Bin 0 -> 187852 bytes .../FEED_WITH_LOAD_MORE_INDICATOR_light.png | Bin 0 -> 163141 bytes 6 files changed, 98 insertions(+) create mode 100644 EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift create mode 100644 EssentialFeed/EssentialFeediOS/Feed UI/Views/LoadMoreCell.swift create mode 100644 EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_INDICATOR_dark.png create mode 100644 EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_INDICATOR_light.png diff --git a/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj b/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj index 806685b..cb0e253 100644 --- a/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj +++ b/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj @@ -112,6 +112,10 @@ 5BA598BE2CE1998D007B1795 /* XCTestCase+MemoryLeakTracking.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8BB9982C02719F00D40D42 /* XCTestCase+MemoryLeakTracking.swift */; }; 5BA598BF2CE19E50007B1795 /* FeedCacheTestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B034B422CA3A0C800FB65F8 /* FeedCacheTestHelpers.swift */; }; 5BA598C02CE19EE0007B1795 /* SharedTestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B034B442CA3A1A100FB65F8 /* SharedTestHelpers.swift */; }; + 5BA75FCE2D8E59590003DE6C /* LoadMoreCellController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA75FCD2D8E59590003DE6C /* LoadMoreCellController.swift */; }; + 5BA75FD02D8E5D720003DE6C /* LoadMoreCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA75FCF2D8E5D720003DE6C /* LoadMoreCell.swift */; }; + 5BA75FD32D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_dark.png in Resources */ = {isa = PBXBuildFile; fileRef = 5BA75FD12D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_dark.png */; }; + 5BA75FD42D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_light.png in Resources */ = {isa = PBXBuildFile; fileRef = 5BA75FD22D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_light.png */; }; 5BB735132D7CD33B00189186 /* UIImage+TestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB735122D7CD33B00189186 /* UIImage+TestHelpers.swift */; }; 5BB735152D7CD9F900189186 /* UITableView+HeaderSizing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB735142D7CD9F900189186 /* UITableView+HeaderSizing.swift */; }; 5BB735172D7D0BEE00189186 /* UIViewController+Snapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB735162D7D0BEE00189186 /* UIViewController+Snapshot.swift */; }; @@ -288,6 +292,10 @@ 5BA598BA2CE194BC007B1795 /* EssentialFeedCacheIntegrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EssentialFeedCacheIntegrationTests.swift; sourceTree = ""; }; 5BA598BD2CE1954B007B1795 /* EssentialFeedCacheIntegrationTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = EssentialFeedCacheIntegrationTests.xctestplan; sourceTree = ""; }; 5BA598EA2CFABE45007B1795 /* EssentialFeedAPIEndToEndTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = EssentialFeedAPIEndToEndTests.xctestplan; sourceTree = ""; }; + 5BA75FCD2D8E59590003DE6C /* LoadMoreCellController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadMoreCellController.swift; sourceTree = ""; }; + 5BA75FCF2D8E5D720003DE6C /* LoadMoreCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadMoreCell.swift; sourceTree = ""; }; + 5BA75FD12D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_dark.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FEED_WITH_LOAD_MORE_INDICATOR_dark.png; sourceTree = ""; }; + 5BA75FD22D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_light.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FEED_WITH_LOAD_MORE_INDICATOR_light.png; sourceTree = ""; }; 5BB735122D7CD33B00189186 /* UIImage+TestHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+TestHelpers.swift"; sourceTree = ""; }; 5BB735142D7CD9F900189186 /* UITableView+HeaderSizing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableView+HeaderSizing.swift"; sourceTree = ""; }; 5BB735162D7D0BEE00189186 /* UIViewController+Snapshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Snapshot.swift"; sourceTree = ""; }; @@ -513,6 +521,7 @@ isa = PBXGroup; children = ( 5B06826D2D0A5E59009749F3 /* FeedImageCellController.swift */, + 5BA75FCD2D8E59590003DE6C /* LoadMoreCellController.swift */, ); path = Controllers; sourceTree = ""; @@ -522,6 +531,7 @@ children = ( 5B74FD1B2D64A6DE007478DC /* Helpers */, 5B6992D62D03F23700DD47E9 /* FeedImageCell.swift */, + 5BA75FCF2D8E5D720003DE6C /* LoadMoreCell.swift */, 5B8AB34F2D51AA1B00CDDDEB /* Feed.storyboard */, 5B8AB3652D51AB6200CDDDEB /* Feed.xcassets */, ); @@ -692,6 +702,8 @@ 5B1926262D89031F006C9C65 /* FEED_WITH_CONTENT_light_extraExtraExtraLarge.png */, 5B1926272D89031F006C9C65 /* FEED_WITH_FAILED_IMAGE_LOADING_dark.png */, 5B1926282D89031F006C9C65 /* FEED_WITH_FAILED_IMAGE_LOADING_light.png */, + 5BA75FD12D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_dark.png */, + 5BA75FD22D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_light.png */, ); path = snapshots; sourceTree = ""; @@ -1128,6 +1140,8 @@ 5B1926312D89033F006C9C65 /* IMAGE_COMMENTS_light.png in Resources */, 5B1926322D89033F006C9C65 /* IMAGE_COMMENTS_light_extraExtraExtraLarge.png in Resources */, 5B1926332D89033F006C9C65 /* IMAGE_COMMENTS_dark.png in Resources */, + 5BA75FD32D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_dark.png in Resources */, + 5BA75FD42D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_light.png in Resources */, 5B1926292D89031F006C9C65 /* FEED_WITH_CONTENT_dark.png in Resources */, 5B19262A2D89031F006C9C65 /* FEED_WITH_CONTENT_light.png in Resources */, 5B19262B2D89031F006C9C65 /* FEED_WITH_CONTENT_light_extraExtraExtraLarge.png in Resources */, @@ -1251,7 +1265,9 @@ 5BB735152D7CD9F900189186 /* UITableView+HeaderSizing.swift in Sources */, 5B74FD1A2D649D0E007478DC /* ErrorView.swift in Sources */, 5B74FD1F2D64A821007478DC /* UIRefreshControl+Helpers.swift in Sources */, + 5BA75FD02D8E5D720003DE6C /* LoadMoreCell.swift in Sources */, 5B19263F2D891F7F006C9C65 /* UIView+Container.swift in Sources */, + 5BA75FCE2D8E59590003DE6C /* LoadMoreCellController.swift in Sources */, 5B73498B2D87CF38007F7D5D /* CellController.swift in Sources */, 5B8AB3682D52D73200CDDDEB /* UITableView+Dequeueing.swift in Sources */, 5B6992D92D0662B200DD47E9 /* UIView+Shimmering.swift in Sources */, diff --git a/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift b/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift new file mode 100644 index 0000000..4b2c478 --- /dev/null +++ b/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift @@ -0,0 +1,25 @@ +// +// Created by Rodrigo Porto. +// Copyright © 2025 PortoCode. All Rights Reserved. +// + +import UIKit +import EssentialFeed + +public class LoadMoreCellController: NSObject, UITableViewDataSource { + private let cell = LoadMoreCell() + + public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + 1 + } + + public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + cell + } +} + +extension LoadMoreCellController: ResourceLoadingView { + public func display(_ viewModel: ResourceLoadingViewModel) { + cell.isLoading = viewModel.isLoading + } +} diff --git a/EssentialFeed/EssentialFeediOS/Feed UI/Views/LoadMoreCell.swift b/EssentialFeed/EssentialFeediOS/Feed UI/Views/LoadMoreCell.swift new file mode 100644 index 0000000..7f0411c --- /dev/null +++ b/EssentialFeed/EssentialFeediOS/Feed UI/Views/LoadMoreCell.swift @@ -0,0 +1,35 @@ +// +// Created by Rodrigo Porto. +// Copyright © 2025 PortoCode. All Rights Reserved. +// + +import UIKit + +public class LoadMoreCell: UITableViewCell { + + private lazy var spinner: UIActivityIndicatorView = { + let spinner = UIActivityIndicatorView(style: .medium) + contentView.addSubview(spinner) + + spinner.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + spinner.centerXAnchor.constraint(equalTo: contentView.centerXAnchor), + spinner.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), + contentView.heightAnchor.constraint(greaterThanOrEqualToConstant: 40) + ]) + + return spinner + }() + + public var isLoading: Bool { + get { spinner.isAnimating } + set { + if newValue { + spinner.startAnimating() + } else { + spinner.stopAnimating() + } + } + } + +} diff --git a/EssentialFeed/EssentialFeediOSTests/Feed UI/FeedSnapshotTests.swift b/EssentialFeed/EssentialFeediOSTests/Feed UI/FeedSnapshotTests.swift index b4a259b..6a463c1 100644 --- a/EssentialFeed/EssentialFeediOSTests/Feed UI/FeedSnapshotTests.swift +++ b/EssentialFeed/EssentialFeediOSTests/Feed UI/FeedSnapshotTests.swift @@ -28,6 +28,15 @@ class FeedSnapshotTests: XCTestCase { assert(snapshot: sut.snapshot(for: .iPhone(style: .dark)), named: "FEED_WITH_FAILED_IMAGE_LOADING_dark") } + func test_feedWithLoadMoreIndicator() { + let sut = makeSUT() + + sut.display(feedWithLoadMoreIndicator()) + + assert(snapshot: sut.snapshot(for: .iPhone(style: .light)), named: "FEED_WITH_LOAD_MORE_INDICATOR_light") + assert(snapshot: sut.snapshot(for: .iPhone(style: .dark)), named: "FEED_WITH_LOAD_MORE_INDICATOR_dark") + } + // MARK: - Helpers private func makeSUT() -> ListViewController { @@ -70,6 +79,19 @@ class FeedSnapshotTests: XCTestCase { ] } + private func feedWithLoadMoreIndicator() -> [CellController] { + let stub = feedWithContent().last! + let cellController = FeedImageCellController(viewModel: stub.viewModel, delegate: stub, selection: {}) + stub.controller = cellController + + let loadMore = LoadMoreCellController() + loadMore.display(ResourceLoadingViewModel(isLoading: true)) + return [ + CellController(id: UUID(), cellController), + CellController(id: UUID(), loadMore) + ] + } + } private extension ListViewController { diff --git a/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_INDICATOR_dark.png b/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_INDICATOR_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7b8da0835fb4af301dbb3dc8c87cff4bf0f11c5c GIT binary patch literal 187852 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ν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

{QB%Orjed*j&X3t8~xjFo#13@OyR%T_wqyzSY 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 Ib`Lr6AMwV%p8x;= literal 0 HcmV?d00001 diff --git a/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_INDICATOR_light.png b/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_INDICATOR_light.png new file mode 100644 index 0000000000000000000000000000000000000000..9774c6749e75630e2318130da5ae81b09bd94e3e GIT binary patch literal 163141 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 MIQ&fb$>+EK3&P$Cv;Y7A literal 0 HcmV?d00001 From be094593986a9023256839fd1bfdf9e307841d80 Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Sat, 22 Mar 2025 00:33:56 -0300 Subject: [PATCH 04/23] Add "Load more" message label --- .../EssentialFeed.xcodeproj/project.pbxproj | 12 +++++++++ .../Controllers/LoadMoreCellController.swift | 6 ++++- .../Feed UI/Views/LoadMoreCell.swift | 25 ++++++++++++++++++ .../Feed UI/FeedSnapshotTests.swift | 24 +++++++++++++++-- .../FEED_WITH_LOAD_MORE_ERROR_dark.png | Bin 0 -> 193460 bytes ...H_LOAD_MORE_ERROR_extraExtraExtraLarge.png | Bin 0 -> 189925 bytes .../FEED_WITH_LOAD_MORE_ERROR_light.png | Bin 0 -> 169309 bytes 7 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_ERROR_dark.png create mode 100644 EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png create mode 100644 EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_ERROR_light.png diff --git a/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj b/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj index cb0e253..6051556 100644 --- a/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj +++ b/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj @@ -116,6 +116,9 @@ 5BA75FD02D8E5D720003DE6C /* LoadMoreCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA75FCF2D8E5D720003DE6C /* LoadMoreCell.swift */; }; 5BA75FD32D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_dark.png in Resources */ = {isa = PBXBuildFile; fileRef = 5BA75FD12D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_dark.png */; }; 5BA75FD42D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_light.png in Resources */ = {isa = PBXBuildFile; fileRef = 5BA75FD22D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_light.png */; }; + 5BA75FD82D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_light.png in Resources */ = {isa = PBXBuildFile; fileRef = 5BA75FD72D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_light.png */; }; + 5BA75FD92D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png in Resources */ = {isa = PBXBuildFile; fileRef = 5BA75FD62D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png */; }; + 5BA75FDA2D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_dark.png in Resources */ = {isa = PBXBuildFile; fileRef = 5BA75FD52D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_dark.png */; }; 5BB735132D7CD33B00189186 /* UIImage+TestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB735122D7CD33B00189186 /* UIImage+TestHelpers.swift */; }; 5BB735152D7CD9F900189186 /* UITableView+HeaderSizing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB735142D7CD9F900189186 /* UITableView+HeaderSizing.swift */; }; 5BB735172D7D0BEE00189186 /* UIViewController+Snapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB735162D7D0BEE00189186 /* UIViewController+Snapshot.swift */; }; @@ -296,6 +299,9 @@ 5BA75FCF2D8E5D720003DE6C /* LoadMoreCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadMoreCell.swift; sourceTree = ""; }; 5BA75FD12D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_dark.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FEED_WITH_LOAD_MORE_INDICATOR_dark.png; sourceTree = ""; }; 5BA75FD22D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_light.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FEED_WITH_LOAD_MORE_INDICATOR_light.png; sourceTree = ""; }; + 5BA75FD52D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_dark.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FEED_WITH_LOAD_MORE_ERROR_dark.png; sourceTree = ""; }; + 5BA75FD62D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png; sourceTree = ""; }; + 5BA75FD72D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_light.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FEED_WITH_LOAD_MORE_ERROR_light.png; sourceTree = ""; }; 5BB735122D7CD33B00189186 /* UIImage+TestHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+TestHelpers.swift"; sourceTree = ""; }; 5BB735142D7CD9F900189186 /* UITableView+HeaderSizing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableView+HeaderSizing.swift"; sourceTree = ""; }; 5BB735162D7D0BEE00189186 /* UIViewController+Snapshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Snapshot.swift"; sourceTree = ""; }; @@ -702,6 +708,9 @@ 5B1926262D89031F006C9C65 /* FEED_WITH_CONTENT_light_extraExtraExtraLarge.png */, 5B1926272D89031F006C9C65 /* FEED_WITH_FAILED_IMAGE_LOADING_dark.png */, 5B1926282D89031F006C9C65 /* FEED_WITH_FAILED_IMAGE_LOADING_light.png */, + 5BA75FD52D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_dark.png */, + 5BA75FD72D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_light.png */, + 5BA75FD62D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png */, 5BA75FD12D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_dark.png */, 5BA75FD22D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_light.png */, ); @@ -1142,6 +1151,9 @@ 5B1926332D89033F006C9C65 /* IMAGE_COMMENTS_dark.png in Resources */, 5BA75FD32D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_dark.png in Resources */, 5BA75FD42D8E5FE90003DE6C /* FEED_WITH_LOAD_MORE_INDICATOR_light.png in Resources */, + 5BA75FD82D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_light.png in Resources */, + 5BA75FD92D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png in Resources */, + 5BA75FDA2D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_dark.png in Resources */, 5B1926292D89031F006C9C65 /* FEED_WITH_CONTENT_dark.png in Resources */, 5B19262A2D89031F006C9C65 /* FEED_WITH_CONTENT_light.png in Resources */, 5B19262B2D89031F006C9C65 /* FEED_WITH_CONTENT_light_extraExtraExtraLarge.png in Resources */, diff --git a/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift b/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift index 4b2c478..6b67ff8 100644 --- a/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift +++ b/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift @@ -18,8 +18,12 @@ public class LoadMoreCellController: NSObject, UITableViewDataSource { } } -extension LoadMoreCellController: ResourceLoadingView { +extension LoadMoreCellController: ResourceLoadingView, ResourceErrorView { public func display(_ viewModel: ResourceLoadingViewModel) { cell.isLoading = viewModel.isLoading } + + public func display(_ viewModel: EssentialFeed.ResourceErrorViewModel) { + cell.message = viewModel.message + } } diff --git a/EssentialFeed/EssentialFeediOS/Feed UI/Views/LoadMoreCell.swift b/EssentialFeed/EssentialFeediOS/Feed UI/Views/LoadMoreCell.swift index 7f0411c..d203da0 100644 --- a/EssentialFeed/EssentialFeediOS/Feed UI/Views/LoadMoreCell.swift +++ b/EssentialFeed/EssentialFeediOS/Feed UI/Views/LoadMoreCell.swift @@ -21,6 +21,26 @@ public class LoadMoreCell: UITableViewCell { return spinner }() + private lazy var messageLabel: UILabel = { + let label = UILabel() + label.textColor = .tertiaryLabel + label.font = .preferredFont(forTextStyle: .footnote) + label.numberOfLines = 0 + label.textAlignment = .center + label.adjustsFontForContentSizeCategory = true + contentView.addSubview(label) + + label.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + label.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 8), + contentView.trailingAnchor.constraint(equalTo: label.trailingAnchor, constant: 8), + label.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 8), + contentView.bottomAnchor.constraint(equalTo: label.bottomAnchor, constant: 8) + ]) + + return label + }() + public var isLoading: Bool { get { spinner.isAnimating } set { @@ -32,4 +52,9 @@ public class LoadMoreCell: UITableViewCell { } } + public var message: String? { + get { messageLabel.text } + set { messageLabel.text = newValue } + } + } diff --git a/EssentialFeed/EssentialFeediOSTests/Feed UI/FeedSnapshotTests.swift b/EssentialFeed/EssentialFeediOSTests/Feed UI/FeedSnapshotTests.swift index 6a463c1..a1a1706 100644 --- a/EssentialFeed/EssentialFeediOSTests/Feed UI/FeedSnapshotTests.swift +++ b/EssentialFeed/EssentialFeediOSTests/Feed UI/FeedSnapshotTests.swift @@ -37,6 +37,16 @@ class FeedSnapshotTests: XCTestCase { assert(snapshot: sut.snapshot(for: .iPhone(style: .dark)), named: "FEED_WITH_LOAD_MORE_INDICATOR_dark") } + func test_feedWithLoadMoreError() { + let sut = makeSUT() + + sut.display(feedWithLoadMoreError()) + + assert(snapshot: sut.snapshot(for: .iPhone(style: .light)), named: "FEED_WITH_LOAD_MORE_ERROR_light") + assert(snapshot: sut.snapshot(for: .iPhone(style: .dark)), named: "FEED_WITH_LOAD_MORE_ERROR_dark") + assert(snapshot: sut.snapshot(for: .iPhone(style: .light, contentSize: .extraExtraExtraLarge)), named: "FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge") + } + // MARK: - Helpers private func makeSUT() -> ListViewController { @@ -80,12 +90,22 @@ class FeedSnapshotTests: XCTestCase { } private func feedWithLoadMoreIndicator() -> [CellController] { + let loadMore = LoadMoreCellController() + loadMore.display(ResourceLoadingViewModel(isLoading: true)) + return feedWith(loadMore: loadMore) + } + + private func feedWithLoadMoreError() -> [CellController] { + let loadMore = LoadMoreCellController() + loadMore.display(ResourceErrorViewModel(message: "This is a multiline\nerror message")) + return feedWith(loadMore: loadMore) + } + + private func feedWith(loadMore: LoadMoreCellController) -> [CellController] { let stub = feedWithContent().last! let cellController = FeedImageCellController(viewModel: stub.viewModel, delegate: stub, selection: {}) stub.controller = cellController - let loadMore = LoadMoreCellController() - loadMore.display(ResourceLoadingViewModel(isLoading: true)) return [ CellController(id: UUID(), cellController), CellController(id: UUID(), loadMore) diff --git a/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_ERROR_dark.png b/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_ERROR_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..2c8242ebeaa0c3f44b5ed78eb27e6aeec83ce704 GIT binary patch literal 193460 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ν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

{QB%Orjed*j&X3t8~xjFo#13@OyR%T_wqyzSY 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 NdxOvVvbB4E{y)bgoJarw literal 0 HcmV?d00001 diff --git a/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png b/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png new file mode 100644 index 0000000000000000000000000000000000000000..56552e0f18dd2801a345de229356390aaaa18f3b GIT binary patch literal 189925 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 L`vV30y{`QaN5Fjs literal 0 HcmV?d00001 diff --git a/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_ERROR_light.png b/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_ERROR_light.png new file mode 100644 index 0000000000000000000000000000000000000000..ef5bc48cc491ae7f8bb41b02dc90c6d0abeea346 GIT binary patch literal 169309 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 literal 0 HcmV?d00001 From 2daf9c316a299e961ffd71ebc4391fcc70c2c43f Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Sun, 23 Mar 2025 21:08:46 -0300 Subject: [PATCH 05/23] Make feed loader closure return Paginated --- EssentialApp/EssentialApp/FeedUIComposer.swift | 6 +++--- .../EssentialApp/FeedViewAdapter.swift | 4 ++-- EssentialApp/EssentialApp/SceneDelegate.swift | 6 +++++- .../FeedUIIntegrationTests+LoaderSpy.swift | 8 ++++---- .../EssentialFeed.xcodeproj/project.pbxproj | 4 ++++ .../EssentialFeed/Shared API/Paginated.swift | 18 ++++++++++++++++++ 6 files changed, 36 insertions(+), 10 deletions(-) create mode 100644 EssentialFeed/EssentialFeed/Shared API/Paginated.swift diff --git a/EssentialApp/EssentialApp/FeedUIComposer.swift b/EssentialApp/EssentialApp/FeedUIComposer.swift index 63b37eb..43e24d3 100644 --- a/EssentialApp/EssentialApp/FeedUIComposer.swift +++ b/EssentialApp/EssentialApp/FeedUIComposer.swift @@ -11,10 +11,10 @@ import EssentialFeediOS public final class FeedUIComposer { private init() {} - private typealias FeedPresentationAdapter = LoadResourcePresentationAdapter<[FeedImage], FeedViewAdapter> + private typealias FeedPresentationAdapter = LoadResourcePresentationAdapter, FeedViewAdapter> public static func feedComposedWith( - feedLoader: @escaping () -> AnyPublisher<[FeedImage], Error>, + feedLoader: @escaping () -> AnyPublisher, Error>, imageLoader: @escaping (URL) -> FeedImageDataLoader.Publisher, selection: @escaping (FeedImage) -> Void = { _ in } ) -> ListViewController { @@ -30,7 +30,7 @@ public final class FeedUIComposer { selection: selection), loadingView: WeakRefVirtualProxy(feedController), errorView: WeakRefVirtualProxy(feedController), - mapper: FeedPresenter.map) + mapper: { $0 }) return feedController } diff --git a/EssentialApp/EssentialApp/FeedViewAdapter.swift b/EssentialApp/EssentialApp/FeedViewAdapter.swift index 7270b1d..5f6c102 100644 --- a/EssentialApp/EssentialApp/FeedViewAdapter.swift +++ b/EssentialApp/EssentialApp/FeedViewAdapter.swift @@ -20,8 +20,8 @@ final class FeedViewAdapter: ResourceView { self.selection = selection } - func display(_ viewModel: FeedViewModel) { - controller?.display(viewModel.feed.map { model in + func display(_ viewModel: Paginated) { + controller?.display(viewModel.items.map { model in let adapter = ImageDataPresentationAdapter(loader: { [imageLoader] in imageLoader(model.url) }) diff --git a/EssentialApp/EssentialApp/SceneDelegate.swift b/EssentialApp/EssentialApp/SceneDelegate.swift index 1c3d667..c9a9005 100644 --- a/EssentialApp/EssentialApp/SceneDelegate.swift +++ b/EssentialApp/EssentialApp/SceneDelegate.swift @@ -71,7 +71,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { } } - private func makeRemoteFeedLoaderWithLocalFallback() -> AnyPublisher<[FeedImage], Error> { + private func makeRemoteFeedLoaderWithLocalFallback() -> AnyPublisher, Error> { let url = FeedEndpoint.get.url(baseURL: baseURL) return httpClient @@ -79,6 +79,10 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { .tryMap(FeedItemsMapper.map) .caching(to: localFeedLoader) .fallback(to: localFeedLoader.loadPublisher) + .map { + Paginated(items: $0) + } + .eraseToAnyPublisher() } private func makeLocalImageLoaderWithRemoteFallback(url: URL) -> FeedImageDataLoader.Publisher { diff --git a/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift b/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift index 05fc370..1b63bcc 100644 --- a/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift +++ b/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift @@ -14,20 +14,20 @@ extension FeedUIIntegrationTests { // MARK: - FeedLoader - private var feedRequests = [PassthroughSubject<[FeedImage], Error>]() + private var feedRequests = [PassthroughSubject, Error>]() var loadFeedCallCount: Int { return feedRequests.count } - func loadPublisher() -> AnyPublisher<[FeedImage], Error> { - let publisher = PassthroughSubject<[FeedImage], Error>() + func loadPublisher() -> AnyPublisher, Error> { + let publisher = PassthroughSubject, Error>() feedRequests.append(publisher) return publisher.eraseToAnyPublisher() } func completeFeedLoading(with feed: [FeedImage] = [], at index: Int = 0) { - feedRequests[index].send(feed) + feedRequests[index].send(Paginated(items: feed)) } func completeFeedLoadingWithError(at index: Int = 0) { diff --git a/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj b/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj index 6051556..35e0e96 100644 --- a/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj +++ b/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj @@ -119,6 +119,7 @@ 5BA75FD82D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_light.png in Resources */ = {isa = PBXBuildFile; fileRef = 5BA75FD72D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_light.png */; }; 5BA75FD92D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png in Resources */ = {isa = PBXBuildFile; fileRef = 5BA75FD62D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png */; }; 5BA75FDA2D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_dark.png in Resources */ = {isa = PBXBuildFile; fileRef = 5BA75FD52D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_dark.png */; }; + 5BA75FDC2D8E6EE80003DE6C /* Paginated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA75FDB2D8E6EE80003DE6C /* Paginated.swift */; }; 5BB735132D7CD33B00189186 /* UIImage+TestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB735122D7CD33B00189186 /* UIImage+TestHelpers.swift */; }; 5BB735152D7CD9F900189186 /* UITableView+HeaderSizing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB735142D7CD9F900189186 /* UITableView+HeaderSizing.swift */; }; 5BB735172D7D0BEE00189186 /* UIViewController+Snapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB735162D7D0BEE00189186 /* UIViewController+Snapshot.swift */; }; @@ -302,6 +303,7 @@ 5BA75FD52D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_dark.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FEED_WITH_LOAD_MORE_ERROR_dark.png; sourceTree = ""; }; 5BA75FD62D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png; sourceTree = ""; }; 5BA75FD72D8E65CC0003DE6C /* FEED_WITH_LOAD_MORE_ERROR_light.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FEED_WITH_LOAD_MORE_ERROR_light.png; sourceTree = ""; }; + 5BA75FDB2D8E6EE80003DE6C /* Paginated.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Paginated.swift; sourceTree = ""; }; 5BB735122D7CD33B00189186 /* UIImage+TestHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+TestHelpers.swift"; sourceTree = ""; }; 5BB735142D7CD9F900189186 /* UITableView+HeaderSizing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableView+HeaderSizing.swift"; sourceTree = ""; }; 5BB735162D7D0BEE00189186 /* UIViewController+Snapshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Snapshot.swift"; sourceTree = ""; }; @@ -565,6 +567,7 @@ isa = PBXGroup; children = ( 5B0E220A2BFE2FEA009FC3EB /* HTTPClient.swift */, + 5BA75FDB2D8E6EE80003DE6C /* Paginated.swift */, ); path = "Shared API"; sourceTree = ""; @@ -1188,6 +1191,7 @@ 5B73493E2D84FA14007F7D5D /* ResourceErrorView.swift in Sources */, 5B7349282D829960007F7D5D /* FeedImageDataMapper.swift in Sources */, 5BE36BA62CD5845700ACC57C /* FeedCachePolicy.swift in Sources */, + 5BA75FDC2D8E6EE80003DE6C /* Paginated.swift in Sources */, 5B7349192D824CC8007F7D5D /* ImageComment.swift in Sources */, 5BF9F30D2CDAD64700C8DB96 /* FeedStore.xcdatamodeld in Sources */, 5BDE3C672D6C225A005D520D /* CoreDataFeedStore+FeedStore.swift in Sources */, diff --git a/EssentialFeed/EssentialFeed/Shared API/Paginated.swift b/EssentialFeed/EssentialFeed/Shared API/Paginated.swift new file mode 100644 index 0000000..4a9aff1 --- /dev/null +++ b/EssentialFeed/EssentialFeed/Shared API/Paginated.swift @@ -0,0 +1,18 @@ +// +// Created by Rodrigo Porto. +// Copyright © 2025 PortoCode. All Rights Reserved. +// + +import Foundation + +public struct Paginated { + public typealias LoadMoreCompletion = (Result) -> Void + + public let items: [Item] + public let loadMore: ((@escaping LoadMoreCompletion) -> Void)? + + public init(items: [Item], loadMore: ((@escaping LoadMoreCompletion) -> Void)? = nil) { + self.items = items + self.loadMore = loadMore + } +} From f1ac0c9c4e8d556e5d3308defa56b4f69e861ded Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Sun, 23 Mar 2025 21:22:56 -0300 Subject: [PATCH 06/23] Add default presentation mapper when the Resource type matches the ResourceViewModel type --- EssentialApp/EssentialApp/FeedUIComposer.swift | 3 +-- .../Shared Presentation/LoadResourcePresenter.swift | 7 +++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/EssentialApp/EssentialApp/FeedUIComposer.swift b/EssentialApp/EssentialApp/FeedUIComposer.swift index 43e24d3..d67ce00 100644 --- a/EssentialApp/EssentialApp/FeedUIComposer.swift +++ b/EssentialApp/EssentialApp/FeedUIComposer.swift @@ -29,8 +29,7 @@ public final class FeedUIComposer { imageLoader: imageLoader, selection: selection), loadingView: WeakRefVirtualProxy(feedController), - errorView: WeakRefVirtualProxy(feedController), - mapper: { $0 }) + errorView: WeakRefVirtualProxy(feedController)) return feedController } diff --git a/EssentialFeed/EssentialFeed/Shared Presentation/LoadResourcePresenter.swift b/EssentialFeed/EssentialFeed/Shared Presentation/LoadResourcePresenter.swift index 2cdbeaf..449555b 100644 --- a/EssentialFeed/EssentialFeed/Shared Presentation/LoadResourcePresenter.swift +++ b/EssentialFeed/EssentialFeed/Shared Presentation/LoadResourcePresenter.swift @@ -34,6 +34,13 @@ public final class LoadResourcePresenter { self.mapper = mapper } + public init(resourceView: View, loadingView: ResourceLoadingView, errorView: ResourceErrorView) where Resource == View.ResourceViewModel { + self.resourceView = resourceView + self.loadingView = loadingView + self.errorView = errorView + self.mapper = { $0 } + } + public func didStartLoading() { errorView.display(.noError) loadingView.display(ResourceLoadingViewModel(isLoading: true)) From 86d9b0f95bf0e34a32ed7bd875933a7f99537283 Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Sun, 23 Mar 2025 21:26:42 -0300 Subject: [PATCH 07/23] Remove unused code --- EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj | 4 ---- .../EssentialFeed/Feed Presentation/FeedPresenter.swift | 4 ---- .../EssentialFeed/Feed Presentation/FeedViewModel.swift | 8 -------- .../Feed Presentation/FeedPresenterTests.swift | 8 -------- 4 files changed, 24 deletions(-) delete mode 100644 EssentialFeed/EssentialFeed/Feed Presentation/FeedViewModel.swift diff --git a/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj b/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj index 35e0e96..78300dd 100644 --- a/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj +++ b/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj @@ -83,7 +83,6 @@ 5B7AB8D72BF8BCE60034C68B /* FeedItemsMapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B7AB8D62BF8BCE60034C68B /* FeedItemsMapperTests.swift */; }; 5B8829032D6A7401006E0BD7 /* FeedPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8829022D6A7401006E0BD7 /* FeedPresenter.swift */; }; 5B8829042D6A7527006E0BD7 /* Feed.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 5B8828FF2D6A7137006E0BD7 /* Feed.xcstrings */; }; - 5B8829062D6A7A9A006E0BD7 /* FeedViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8829052D6A7A9A006E0BD7 /* FeedViewModel.swift */; }; 5B8829082D6A7B12006E0BD7 /* ResourceLoadingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8829072D6A7B12006E0BD7 /* ResourceLoadingViewModel.swift */; }; 5B88290A2D6A7B76006E0BD7 /* ResourceErrorViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8829092D6A7B76006E0BD7 /* ResourceErrorViewModel.swift */; }; 5B88290B2D6A8133006E0BD7 /* FeedLocalizationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8AB3732D5ECCBF00CDDDEB /* FeedLocalizationTests.swift */; }; @@ -269,7 +268,6 @@ 5B7AB8D62BF8BCE60034C68B /* FeedItemsMapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedItemsMapperTests.swift; sourceTree = ""; }; 5B8828FF2D6A7137006E0BD7 /* Feed.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Feed.xcstrings; sourceTree = ""; }; 5B8829022D6A7401006E0BD7 /* FeedPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedPresenter.swift; sourceTree = ""; }; - 5B8829052D6A7A9A006E0BD7 /* FeedViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedViewModel.swift; sourceTree = ""; }; 5B8829072D6A7B12006E0BD7 /* ResourceLoadingViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResourceLoadingViewModel.swift; sourceTree = ""; }; 5B8829092D6A7B76006E0BD7 /* ResourceErrorViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResourceErrorViewModel.swift; sourceTree = ""; }; 5B88290C2D6A82D3006E0BD7 /* FeedImagePresenterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedImagePresenterTests.swift; sourceTree = ""; }; @@ -812,7 +810,6 @@ children = ( 5B8829022D6A7401006E0BD7 /* FeedPresenter.swift */, 5B88290E2D6A94C3006E0BD7 /* FeedImagePresenter.swift */, - 5B8829052D6A7A9A006E0BD7 /* FeedViewModel.swift */, 5B8829102D6A964F006E0BD7 /* FeedImageViewModel.swift */, 5B8828FF2D6A7137006E0BD7 /* Feed.xcstrings */, ); @@ -1197,7 +1194,6 @@ 5BDE3C672D6C225A005D520D /* CoreDataFeedStore+FeedStore.swift in Sources */, 5B73494A2D85337A007F7D5D /* ImageCommentsPresenter.swift in Sources */, 5B034B392C9BD2C000FB65F8 /* LocalFeedImage.swift in Sources */, - 5B8829062D6A7A9A006E0BD7 /* FeedViewModel.swift in Sources */, 5B034B352C9A819900FB65F8 /* FeedStore.swift in Sources */, 5B034B332C9A804C00FB65F8 /* LocalFeedLoader.swift in Sources */, 5B7349162D81A28D007F7D5D /* ImageCommentsMapper.swift in Sources */, diff --git a/EssentialFeed/EssentialFeed/Feed Presentation/FeedPresenter.swift b/EssentialFeed/EssentialFeed/Feed Presentation/FeedPresenter.swift index b8f6900..064c6bc 100644 --- a/EssentialFeed/EssentialFeed/Feed Presentation/FeedPresenter.swift +++ b/EssentialFeed/EssentialFeed/Feed Presentation/FeedPresenter.swift @@ -13,8 +13,4 @@ public final class FeedPresenter { bundle: Bundle(for: FeedPresenter.self), comment: "Title for the feed view") } - - public static func map(_ feed: [FeedImage]) -> FeedViewModel { - FeedViewModel(feed: feed) - } } diff --git a/EssentialFeed/EssentialFeed/Feed Presentation/FeedViewModel.swift b/EssentialFeed/EssentialFeed/Feed Presentation/FeedViewModel.swift deleted file mode 100644 index 67302e7..0000000 --- a/EssentialFeed/EssentialFeed/Feed Presentation/FeedViewModel.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// Created by Rodrigo Porto. -// Copyright © 2025 PortoCode. All Rights Reserved. -// - -public struct FeedViewModel { - public let feed: [FeedImage] -} diff --git a/EssentialFeed/EssentialFeedTests/Feed Presentation/FeedPresenterTests.swift b/EssentialFeed/EssentialFeedTests/Feed Presentation/FeedPresenterTests.swift index f9e496b..e9825ee 100644 --- a/EssentialFeed/EssentialFeedTests/Feed Presentation/FeedPresenterTests.swift +++ b/EssentialFeed/EssentialFeedTests/Feed Presentation/FeedPresenterTests.swift @@ -12,14 +12,6 @@ class FeedPresenterTests: XCTestCase { XCTAssertEqual(FeedPresenter.title, localized("FEED_VIEW_TITLE")) } - func test_map_createsViewModel() { - let feed = uniqueImageFeed().models - - let viewModel = FeedPresenter.map(feed) - - XCTAssertEqual(viewModel.feed, feed) - } - // MARK: - Helpers private func localized(_ key: String, file: StaticString = #file, line: UInt = #line) -> String { From aca4a2c9f3f460c151282621025e47c553228ab9 Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Sun, 23 Mar 2025 22:07:14 -0300 Subject: [PATCH 08/23] Load more items on will display LoadMoreCell --- EssentialApp/EssentialApp/FeedViewAdapter.swift | 11 +++++++++-- .../EssentialAppTests/FeedUIIntegrationTests.swift | 11 +++++++++++ .../Helpers/FeedUIIntegrationTests+LoaderSpy.swift | 6 +++++- .../Helpers/ListViewController+TestHelpers.swift | 9 +++++++++ .../Feed UI/Controllers/LoadMoreCellController.swift | 11 ++++++++++- .../Shared UI/Controllers/ListViewController.swift | 8 +++++--- .../Feed UI/FeedSnapshotTests.swift | 4 ++-- 7 files changed, 51 insertions(+), 9 deletions(-) diff --git a/EssentialApp/EssentialApp/FeedViewAdapter.swift b/EssentialApp/EssentialApp/FeedViewAdapter.swift index 5f6c102..37397e3 100644 --- a/EssentialApp/EssentialApp/FeedViewAdapter.swift +++ b/EssentialApp/EssentialApp/FeedViewAdapter.swift @@ -21,7 +21,7 @@ final class FeedViewAdapter: ResourceView { } func display(_ viewModel: Paginated) { - controller?.display(viewModel.items.map { model in + let feed: [CellController] = viewModel.items.map { model in let adapter = ImageDataPresentationAdapter(loader: { [imageLoader] in imageLoader(model.url) }) @@ -40,7 +40,14 @@ final class FeedViewAdapter: ResourceView { mapper: UIImage.tryMake) return CellController(id: model, view) - }) + } + + let loadMore = LoadMoreCellController { + viewModel.loadMore?({ _ in }) + } + let loadMoreSection = [CellController(id: UUID(), loadMore)] + + controller?.display(feed, loadMoreSection) } } diff --git a/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift b/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift index ae76108..0904c1c 100644 --- a/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift +++ b/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift @@ -49,6 +49,17 @@ class FeedUIIntegrationTests: XCTestCase { XCTAssertEqual(loader.loadFeedCallCount, 3, "Expected yet another loading request once user initiates another reload") } + func test_loadMoreActions_requestMoreFromLoader() { + let (sut, loader) = makeSUT() + + sut.simulateAppearance() + loader.completeFeedLoading() + XCTAssertEqual(loader.loadMoreCallCount, 0, "Expected no requests before until load more action") + + sut.simulateLoadMoreFeedAction() + XCTAssertEqual(loader.loadMoreCallCount, 1, "Expected load more request") + } + func test_loadFeedActions_runsAutomaticallyOnlyOnFirstAppearance() { let (sut, loader) = makeSUT() XCTAssertEqual(loader.loadFeedCallCount, 0, "Expected no loading requests before view appears") diff --git a/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift b/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift index 1b63bcc..911cab5 100644 --- a/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift +++ b/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift @@ -20,6 +20,8 @@ extension FeedUIIntegrationTests { return feedRequests.count } + private(set) var loadMoreCallCount = 0 + func loadPublisher() -> AnyPublisher, Error> { let publisher = PassthroughSubject, Error>() feedRequests.append(publisher) @@ -27,7 +29,9 @@ extension FeedUIIntegrationTests { } func completeFeedLoading(with feed: [FeedImage] = [], at index: Int = 0) { - feedRequests[index].send(Paginated(items: feed)) + feedRequests[index].send(Paginated(items: feed, loadMore: { [weak self] _ in + self?.loadMoreCallCount += 1 + })) } func completeFeedLoadingWithError(at index: Int = 0) { diff --git a/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift b/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift index fa96c48..0e0141f 100644 --- a/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift +++ b/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift @@ -140,6 +140,14 @@ extension ListViewController { ds?.tableView?(tableView, cancelPrefetchingForRowsAt: [index]) } + func simulateLoadMoreFeedAction() { + guard let view = cell(row: 0, section: feedLoadMoreSection) else { return } + + let delegate = tableView.delegate + let index = IndexPath(row: 0, section: feedLoadMoreSection) + delegate?.tableView?(tableView, willDisplay: view, forRowAt: index) + } + func renderedFeedImageData(at index: Int) -> Data? { return simulateFeedImageViewVisible(at: index)?.renderedImage } @@ -153,4 +161,5 @@ extension ListViewController { } private var feedImagesSection: Int { 0 } + private var feedLoadMoreSection: Int { 1 } } diff --git a/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift b/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift index 6b67ff8..65c503f 100644 --- a/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift +++ b/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift @@ -6,8 +6,13 @@ import UIKit import EssentialFeed -public class LoadMoreCellController: NSObject, UITableViewDataSource { +public class LoadMoreCellController: NSObject, UITableViewDataSource, UITableViewDelegate { private let cell = LoadMoreCell() + private let callback: () -> Void + + public init(callback: @escaping () -> Void) { + self.callback = callback + } public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 1 @@ -16,6 +21,10 @@ public class LoadMoreCellController: NSObject, UITableViewDataSource { public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { cell } + + public func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { + callback() + } } extension LoadMoreCellController: ResourceLoadingView, ResourceErrorView { diff --git a/EssentialFeed/EssentialFeediOS/Shared UI/Controllers/ListViewController.swift b/EssentialFeed/EssentialFeediOS/Shared UI/Controllers/ListViewController.swift index f391c67..ca2aa90 100644 --- a/EssentialFeed/EssentialFeediOS/Shared UI/Controllers/ListViewController.swift +++ b/EssentialFeed/EssentialFeediOS/Shared UI/Controllers/ListViewController.swift @@ -63,10 +63,12 @@ public final class ListViewController: UITableViewController, UITableViewDataSou onRefresh?() } - public func display(_ cellControllers: [CellController]) { + public func display(_ sections: [CellController]...) { var snapshot = NSDiffableDataSourceSnapshot() - snapshot.appendSections([0]) - snapshot.appendItems(cellControllers, toSection: 0) + sections.enumerated().forEach { section, cellControllers in + snapshot.appendSections([section]) + snapshot.appendItems(cellControllers, toSection: section) + } dataSource.applySnapshotUsingReloadData(snapshot) } diff --git a/EssentialFeed/EssentialFeediOSTests/Feed UI/FeedSnapshotTests.swift b/EssentialFeed/EssentialFeediOSTests/Feed UI/FeedSnapshotTests.swift index a1a1706..d3404c7 100644 --- a/EssentialFeed/EssentialFeediOSTests/Feed UI/FeedSnapshotTests.swift +++ b/EssentialFeed/EssentialFeediOSTests/Feed UI/FeedSnapshotTests.swift @@ -90,13 +90,13 @@ class FeedSnapshotTests: XCTestCase { } private func feedWithLoadMoreIndicator() -> [CellController] { - let loadMore = LoadMoreCellController() + let loadMore = LoadMoreCellController(callback: {}) loadMore.display(ResourceLoadingViewModel(isLoading: true)) return feedWith(loadMore: loadMore) } private func feedWithLoadMoreError() -> [CellController] { - let loadMore = LoadMoreCellController() + let loadMore = LoadMoreCellController(callback: {}) loadMore.display(ResourceErrorViewModel(message: "This is a multiline\nerror message")) return feedWith(loadMore: loadMore) } From 455f226b0b539188c4c0ab617cff3e0e100d2281 Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Sun, 23 Mar 2025 23:15:14 -0300 Subject: [PATCH 09/23] Prevent load more action while loading more --- EssentialApp/EssentialApp/CombineHelpers.swift | 13 +++++++++++++ EssentialApp/EssentialApp/FeedViewAdapter.swift | 15 +++++++++++++-- .../FeedUIIntegrationTests.swift | 3 +++ .../Controllers/LoadMoreCellController.swift | 4 +++- 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/EssentialApp/EssentialApp/CombineHelpers.swift b/EssentialApp/EssentialApp/CombineHelpers.swift index 518eefc..57c55a1 100644 --- a/EssentialApp/EssentialApp/CombineHelpers.swift +++ b/EssentialApp/EssentialApp/CombineHelpers.swift @@ -7,6 +7,19 @@ import Foundation import Combine import EssentialFeed +public extension Paginated { + var loadMorePublisher: (() -> AnyPublisher)? { + guard let loadMore = loadMore else { return nil } + + return { + Deferred { + Future(loadMore) + } + .eraseToAnyPublisher() + } + } +} + public extension HTTPClient { typealias Publisher = AnyPublisher<(Data, HTTPURLResponse), Error> diff --git a/EssentialApp/EssentialApp/FeedViewAdapter.swift b/EssentialApp/EssentialApp/FeedViewAdapter.swift index 37397e3..8116a9a 100644 --- a/EssentialApp/EssentialApp/FeedViewAdapter.swift +++ b/EssentialApp/EssentialApp/FeedViewAdapter.swift @@ -13,6 +13,7 @@ final class FeedViewAdapter: ResourceView { private let selection: (FeedImage) -> Void private typealias ImageDataPresentationAdapter = LoadResourcePresentationAdapter> + private typealias LoadMorePresentationAdapter = LoadResourcePresentationAdapter, FeedViewAdapter> init(controller: ListViewController? = nil, imageLoader: @escaping (URL) -> FeedImageDataLoader.Publisher, selection: @escaping (FeedImage) -> Void) { self.controller = controller @@ -42,9 +43,19 @@ final class FeedViewAdapter: ResourceView { return CellController(id: model, view) } - let loadMore = LoadMoreCellController { - viewModel.loadMore?({ _ in }) + guard let loadMorePublisher = viewModel.loadMorePublisher else { + controller?.display(feed) + return } + + let loadMoreAdapter = LoadMorePresentationAdapter(loader: loadMorePublisher) + let loadMore = LoadMoreCellController(callback: loadMoreAdapter.loadResource) + + loadMoreAdapter.presenter = LoadResourcePresenter( + resourceView: self, + loadingView: WeakRefVirtualProxy(loadMore), + errorView: WeakRefVirtualProxy(loadMore)) + let loadMoreSection = [CellController(id: UUID(), loadMore)] controller?.display(feed, loadMoreSection) diff --git a/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift b/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift index 0904c1c..db08bc7 100644 --- a/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift +++ b/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift @@ -58,6 +58,9 @@ class FeedUIIntegrationTests: XCTestCase { sut.simulateLoadMoreFeedAction() XCTAssertEqual(loader.loadMoreCallCount, 1, "Expected load more request") + + sut.simulateLoadMoreFeedAction() + XCTAssertEqual(loader.loadMoreCallCount, 1, "Expected no request while loading more") } func test_loadFeedActions_runsAutomaticallyOnlyOnFirstAppearance() { diff --git a/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift b/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift index 65c503f..5090e6b 100644 --- a/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift +++ b/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift @@ -22,7 +22,9 @@ public class LoadMoreCellController: NSObject, UITableViewDataSource, UITableVie cell } - public func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { + public func tableView(_ tableView: UITableView, willDisplay: UITableViewCell, forRowAt indexPath: IndexPath) { + guard !cell.isLoading else { return } + callback() } } From 855e270ba59fe1fcfa7d61854f7c95fb4979205e Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Sun, 23 Mar 2025 23:35:51 -0300 Subject: [PATCH 10/23] Does not load more after loading last page --- .../EssentialApp/CombineHelpers.swift | 14 ++++++++++ .../FeedUIIntegrationTests.swift | 12 +++++++++ .../FeedUIIntegrationTests+LoaderSpy.swift | 26 ++++++++++++++++--- 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/EssentialApp/EssentialApp/CombineHelpers.swift b/EssentialApp/EssentialApp/CombineHelpers.swift index 57c55a1..1534fb0 100644 --- a/EssentialApp/EssentialApp/CombineHelpers.swift +++ b/EssentialApp/EssentialApp/CombineHelpers.swift @@ -8,6 +8,20 @@ import Combine import EssentialFeed public extension Paginated { + init(items: [Item], loadMorePublisher: (() -> AnyPublisher)?) { + self.init(items: items, loadMore: loadMorePublisher.map { publisher in + return { completion in + publisher().subscribe(Subscribers.Sink(receiveCompletion: { result in + if case let .failure(error) = result { + completion(.failure(error)) + } + }, receiveValue: { result in + completion(.success(result)) + })) + } + }) + } + var loadMorePublisher: (() -> AnyPublisher)? { guard let loadMore = loadMore else { return nil } diff --git a/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift b/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift index db08bc7..4f5d58d 100644 --- a/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift +++ b/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift @@ -61,6 +61,18 @@ class FeedUIIntegrationTests: XCTestCase { sut.simulateLoadMoreFeedAction() XCTAssertEqual(loader.loadMoreCallCount, 1, "Expected no request while loading more") + + loader.completeLoadMore(lastPage: false, at: 0) + sut.simulateLoadMoreFeedAction() + XCTAssertEqual(loader.loadMoreCallCount, 2, "Expected request after load more completed with more pages") + + loader.completeLoadMoreWithError(at: 1) + sut.simulateLoadMoreFeedAction() + XCTAssertEqual(loader.loadMoreCallCount, 3, "Expected request after load more failure") + + loader.completeLoadMore(lastPage: true, at: 2) + sut.simulateLoadMoreFeedAction() + XCTAssertEqual(loader.loadMoreCallCount, 3, "Expected no request after loading all pages") } func test_loadFeedActions_runsAutomaticallyOnlyOnFirstAppearance() { diff --git a/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift b/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift index 911cab5..01ec9c1 100644 --- a/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift +++ b/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift @@ -15,12 +15,15 @@ extension FeedUIIntegrationTests { // MARK: - FeedLoader private var feedRequests = [PassthroughSubject, Error>]() + private var loadMoreRequests = [PassthroughSubject, Error>]() var loadFeedCallCount: Int { return feedRequests.count } - private(set) var loadMoreCallCount = 0 + var loadMoreCallCount: Int { + return loadMoreRequests.count + } func loadPublisher() -> AnyPublisher, Error> { let publisher = PassthroughSubject, Error>() @@ -29,8 +32,10 @@ extension FeedUIIntegrationTests { } func completeFeedLoading(with feed: [FeedImage] = [], at index: Int = 0) { - feedRequests[index].send(Paginated(items: feed, loadMore: { [weak self] _ in - self?.loadMoreCallCount += 1 + feedRequests[index].send(Paginated(items: feed, loadMorePublisher: { [weak self] in + let publisher = PassthroughSubject, Error>() + self?.loadMoreRequests.append(publisher) + return publisher.eraseToAnyPublisher() })) } @@ -39,6 +44,21 @@ extension FeedUIIntegrationTests { feedRequests[index].send(completion: .failure(error)) } + func completeLoadMore(with feed: [FeedImage] = [], lastPage: Bool = false, at index: Int = 0) { + loadMoreRequests[index].send(Paginated( + items: feed, + loadMorePublisher: lastPage ? nil : { [weak self] in + let publisher = PassthroughSubject, Error>() + self?.loadMoreRequests.append(publisher) + return publisher.eraseToAnyPublisher() + })) + } + + func completeLoadMoreWithError(at index: Int = 0) { + let error = NSError(domain: "an error", code: 404) + loadMoreRequests[index].send(completion: .failure(error)) + } + // MARK: - FeedImageDataLoader private struct TaskSpy: FeedImageDataLoaderTask { From 7a3fbb6500f62264c618e2a670e579dafe6a09d1 Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Sun, 23 Mar 2025 23:54:07 -0300 Subject: [PATCH 11/23] Show loading more indicator while loading more --- .../FeedUIIntegrationTests.swift | 22 +++++++++++++++++++ .../ListViewController+TestHelpers.swift | 10 ++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift b/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift index 4f5d58d..63b85e7 100644 --- a/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift +++ b/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift @@ -102,6 +102,28 @@ class FeedUIIntegrationTests: XCTestCase { XCTAssertFalse(sut.isShowingLoadingIndicator, "Expected no loading indicator once user initiated loading completes with error") } + func test_loadingMoreIndicator_isVisibleWhileLoadingMore() { + let (sut, loader) = makeSUT() + + sut.simulateAppearance() + XCTAssertFalse(sut.isShowingLoadMoreFeedIndicator, "Expected no loading indicator once view is loaded") + + loader.completeFeedLoading(at: 0) + XCTAssertFalse(sut.isShowingLoadMoreFeedIndicator, "Expected no loading indicator once loading completes successfully") + + sut.simulateLoadMoreFeedAction() + XCTAssertTrue(sut.isShowingLoadMoreFeedIndicator, "Expected loading indicator on load more action") + + loader.completeLoadMore(at: 0) + XCTAssertFalse(sut.isShowingLoadMoreFeedIndicator, "Expected no loading indicator once user initiated loading completes successfully") + + sut.simulateLoadMoreFeedAction() + XCTAssertTrue(sut.isShowingLoadMoreFeedIndicator, "Expected loading indicator on second load more action") + + loader.completeLoadMoreWithError(at: 1) + XCTAssertFalse(sut.isShowingLoadMoreFeedIndicator, "Expected no loading indicator once user initiated loading completes with error") + } + func test_loadFeedCompletion_rendersSuccessfullyLoadedFeed() { let image0 = makeImage(description: "a description", location: "a location") let image1 = makeImage(description: nil, location: "another location") diff --git a/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift b/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift index 0e0141f..d3a3fc8 100644 --- a/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift +++ b/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift @@ -141,13 +141,21 @@ extension ListViewController { } func simulateLoadMoreFeedAction() { - guard let view = cell(row: 0, section: feedLoadMoreSection) else { return } + guard let view = loadMoreFeedCell() else { return } let delegate = tableView.delegate let index = IndexPath(row: 0, section: feedLoadMoreSection) delegate?.tableView?(tableView, willDisplay: view, forRowAt: index) } + var isShowingLoadMoreFeedIndicator: Bool { + return loadMoreFeedCell()?.isLoading == true + } + + private func loadMoreFeedCell() -> LoadMoreCell? { + cell(row: 0, section: feedLoadMoreSection) as? LoadMoreCell + } + func renderedFeedImageData(at index: Int) -> Data? { return simulateFeedImageViewVisible(at: index)?.renderedImage } From afb7309480654d9f0c38c2ddccdf51735400e53a Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Mon, 24 Mar 2025 00:09:38 -0300 Subject: [PATCH 12/23] Render items from "Load more" action --- .../FeedUIIntegrationTests.swift | 36 ++++++++++++++++--- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift b/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift index 63b85e7..4a4d63e 100644 --- a/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift +++ b/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift @@ -134,12 +134,16 @@ class FeedUIIntegrationTests: XCTestCase { sut.simulateAppearance() assertThat(sut, isRendering: []) - loader.completeFeedLoading(with: [image0], at: 0) - assertThat(sut, isRendering: [image0]) + loader.completeFeedLoading(with: [image0, image1], at: 0) + assertThat(sut, isRendering: [image0, image1]) - sut.simulateUserInitiatedReload() - loader.completeFeedLoading(with: [image0, image1, image2, image3], at: 1) + sut.simulateLoadMoreFeedAction() + loader.completeLoadMore(with: [image0, image1, image2, image3], at: 0) assertThat(sut, isRendering: [image0, image1, image2, image3]) + + sut.simulateUserInitiatedReload() + loader.completeFeedLoading(with: [image0, image1], at: 1) + assertThat(sut, isRendering: [image0, image1]) } func test_loadFeedCompletion_rendersSuccessfullyLoadedEmptyFeedAfterNonEmptyFeed() { @@ -148,7 +152,11 @@ class FeedUIIntegrationTests: XCTestCase { let (sut, loader) = makeSUT() sut.simulateAppearance() - loader.completeFeedLoading(with: [image0, image1], at: 0) + loader.completeFeedLoading(with: [image0], at: 0) + assertThat(sut, isRendering: [image0]) + + sut.simulateLoadMoreFeedAction() + loader.completeLoadMore(with: [image0, image1], at: 0) assertThat(sut, isRendering: [image0, image1]) sut.simulateUserInitiatedReload() @@ -167,6 +175,10 @@ class FeedUIIntegrationTests: XCTestCase { sut.simulateUserInitiatedReload() loader.completeFeedLoadingWithError(at: 1) assertThat(sut, isRendering: [image0]) + + sut.simulateLoadMoreFeedAction() + loader.completeLoadMoreWithError(at: 0) + assertThat(sut, isRendering: [image0]) } func test_loadFeedCompletion_dispatchesFromBackgroundToMainThread() { @@ -181,6 +193,20 @@ class FeedUIIntegrationTests: XCTestCase { wait(for: [exp], timeout: 1.0) } + func test_loadMoreCompletion_dispatchesFromBackgroundToMainThread() { + let (sut, loader) = makeSUT() + sut.simulateAppearance() + loader.completeFeedLoading(at: 0) + sut.simulateLoadMoreFeedAction() + + let exp = expectation(description: "Wait for background queue") + DispatchQueue.global().async { + loader.completeLoadMore() + exp.fulfill() + } + wait(for: [exp], timeout: 1.0) + } + func test_loadFeedCompletion_rendersErrorMessageOnErrorUntilNextReload() { let (sut, loader) = makeSUT() From 4a7c726a8bff52765b4608ea68feaae2742935e6 Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Mon, 24 Mar 2025 00:11:48 -0300 Subject: [PATCH 13/23] Render load more error message --- .../FeedUIIntegrationTests.swift | 15 +++++++++++++++ .../Helpers/ListViewController+TestHelpers.swift | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift b/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift index 4a4d63e..ffd8bf1 100644 --- a/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift +++ b/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift @@ -233,6 +233,21 @@ class FeedUIIntegrationTests: XCTestCase { XCTAssertEqual(sut.errorMessage, nil) } + func test_loadMoreCompletion_rendersErrorMessageOnError() { + let (sut, loader) = makeSUT() + sut.simulateAppearance() + loader.completeFeedLoading() + + sut.simulateLoadMoreFeedAction() + XCTAssertEqual(sut.loadMoreFeedErrorMessage, nil) + + loader.completeLoadMoreWithError() + XCTAssertEqual(sut.loadMoreFeedErrorMessage, loadError) + + sut.simulateLoadMoreFeedAction() + XCTAssertEqual(sut.loadMoreFeedErrorMessage, nil) + } + // MARK: - Image View Tests func test_feedImageView_loadsImageURLWhenVisible() { diff --git a/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift b/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift index d3a3fc8..5e62394 100644 --- a/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift +++ b/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift @@ -152,6 +152,10 @@ extension ListViewController { return loadMoreFeedCell()?.isLoading == true } + var loadMoreFeedErrorMessage: String? { + return loadMoreFeedCell()?.message + } + private func loadMoreFeedCell() -> LoadMoreCell? { cell(row: 0, section: feedLoadMoreSection) as? LoadMoreCell } From c61481c4792e2ddcb310812342c283f7b049463a Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Mon, 24 Mar 2025 19:59:03 -0300 Subject: [PATCH 14/23] Load more on error tap --- .../FeedUIIntegrationTests.swift | 16 ++++++++++++++++ .../Helpers/ListViewController+TestHelpers.swift | 6 ++++++ .../Controllers/LoadMoreCellController.swift | 8 ++++++++ 3 files changed, 30 insertions(+) diff --git a/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift b/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift index ffd8bf1..a30bea4 100644 --- a/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift +++ b/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift @@ -248,6 +248,22 @@ class FeedUIIntegrationTests: XCTestCase { XCTAssertEqual(sut.loadMoreFeedErrorMessage, nil) } + func test_tapOnLoadMoreErrorView_loadsMore() { + let (sut, loader) = makeSUT() + sut.simulateAppearance() + loader.completeFeedLoading() + + sut.simulateLoadMoreFeedAction() + XCTAssertEqual(loader.loadMoreCallCount, 1) + + sut.simulateTapOnLoadMoreFeedError() + XCTAssertEqual(loader.loadMoreCallCount, 1) + + loader.completeLoadMoreWithError() + sut.simulateTapOnLoadMoreFeedError() + XCTAssertEqual(loader.loadMoreCallCount, 2) + } + // MARK: - Image View Tests func test_feedImageView_loadsImageURLWhenVisible() { diff --git a/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift b/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift index 5e62394..5830838 100644 --- a/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift +++ b/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift @@ -148,6 +148,12 @@ extension ListViewController { delegate?.tableView?(tableView, willDisplay: view, forRowAt: index) } + func simulateTapOnLoadMoreFeedError() { + let delegate = tableView.delegate + let index = IndexPath(row: 0, section: feedLoadMoreSection) + delegate?.tableView?(tableView, didSelectRowAt: index) + } + var isShowingLoadMoreFeedIndicator: Bool { return loadMoreFeedCell()?.isLoading == true } diff --git a/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift b/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift index 5090e6b..0013cbb 100644 --- a/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift +++ b/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift @@ -23,6 +23,14 @@ public class LoadMoreCellController: NSObject, UITableViewDataSource, UITableVie } public func tableView(_ tableView: UITableView, willDisplay: UITableViewCell, forRowAt indexPath: IndexPath) { + reloadIfNeeded() + } + + public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + reloadIfNeeded() + } + + private func reloadIfNeeded() { guard !cell.isLoading else { return } callback() From 4464883c6f2db5cd33c2584ec0b38179121f78d7 Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Mon, 24 Mar 2025 20:08:28 -0300 Subject: [PATCH 15/23] Set FeedEndpoint limit to 10 --- EssentialFeed/EssentialFeed/Feed API/FeedEndpoint.swift | 9 ++++++++- .../EssentialFeedTests/Feed API/FeedEndpointTests.swift | 6 ++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/EssentialFeed/EssentialFeed/Feed API/FeedEndpoint.swift b/EssentialFeed/EssentialFeed/Feed API/FeedEndpoint.swift index 53bdd9f..b52ce9c 100644 --- a/EssentialFeed/EssentialFeed/Feed API/FeedEndpoint.swift +++ b/EssentialFeed/EssentialFeed/Feed API/FeedEndpoint.swift @@ -11,7 +11,14 @@ public enum FeedEndpoint { public func url(baseURL: URL) -> URL { switch self { case .get: - return baseURL.appendingPathComponent("/v1/feed") + var components = URLComponents() + components.scheme = baseURL.scheme + components.host = baseURL.host + components.path = baseURL.path + "/v1/feed" + components.queryItems = [ + URLQueryItem(name: "limit", value: "10") + ] + return components.url! } } } diff --git a/EssentialFeed/EssentialFeedTests/Feed API/FeedEndpointTests.swift b/EssentialFeed/EssentialFeedTests/Feed API/FeedEndpointTests.swift index 6e7c714..0941d5d 100644 --- a/EssentialFeed/EssentialFeedTests/Feed API/FeedEndpointTests.swift +++ b/EssentialFeed/EssentialFeedTests/Feed API/FeedEndpointTests.swift @@ -12,9 +12,11 @@ class FeedEndpointTests: XCTestCase { let baseURL = URL(string: "http://base-url.com")! let received = FeedEndpoint.get.url(baseURL: baseURL) - let expected = URL(string: "http://base-url.com/v1/feed")! - XCTAssertEqual(received, expected) + XCTAssertEqual(received.scheme, "http", "scheme") + XCTAssertEqual(received.host, "base-url.com", "host") + XCTAssertEqual(received.path, "/v1/feed", "path") + XCTAssertEqual(received.query, "limit=10", "query") } } From b690aff69e3558c35df43774cecc107a9c03e5c3 Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Mon, 24 Mar 2025 20:22:12 -0300 Subject: [PATCH 16/23] Add feed endpoint with "after_id" param --- EssentialApp/EssentialApp/SceneDelegate.swift | 2 +- .../EssentialFeed/Feed API/FeedEndpoint.swift | 9 +++++---- .../Feed API/FeedEndpointTests.swift | 15 ++++++++++++++- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/EssentialApp/EssentialApp/SceneDelegate.swift b/EssentialApp/EssentialApp/SceneDelegate.swift index c9a9005..80d10f6 100644 --- a/EssentialApp/EssentialApp/SceneDelegate.swift +++ b/EssentialApp/EssentialApp/SceneDelegate.swift @@ -72,7 +72,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { } private func makeRemoteFeedLoaderWithLocalFallback() -> AnyPublisher, Error> { - let url = FeedEndpoint.get.url(baseURL: baseURL) + let url = FeedEndpoint.get().url(baseURL: baseURL) return httpClient .getPublisher(url: url) diff --git a/EssentialFeed/EssentialFeed/Feed API/FeedEndpoint.swift b/EssentialFeed/EssentialFeed/Feed API/FeedEndpoint.swift index b52ce9c..bf59fbc 100644 --- a/EssentialFeed/EssentialFeed/Feed API/FeedEndpoint.swift +++ b/EssentialFeed/EssentialFeed/Feed API/FeedEndpoint.swift @@ -6,18 +6,19 @@ import Foundation public enum FeedEndpoint { - case get + case get(after: FeedImage? = nil) public func url(baseURL: URL) -> URL { switch self { - case .get: + case let .get(image): var components = URLComponents() components.scheme = baseURL.scheme components.host = baseURL.host components.path = baseURL.path + "/v1/feed" components.queryItems = [ - URLQueryItem(name: "limit", value: "10") - ] + URLQueryItem(name: "limit", value: "10"), + image.map { URLQueryItem(name: "after_id", value: $0.id.uuidString) }, + ].compactMap { $0 } return components.url! } } diff --git a/EssentialFeed/EssentialFeedTests/Feed API/FeedEndpointTests.swift b/EssentialFeed/EssentialFeedTests/Feed API/FeedEndpointTests.swift index 0941d5d..45cbbaf 100644 --- a/EssentialFeed/EssentialFeedTests/Feed API/FeedEndpointTests.swift +++ b/EssentialFeed/EssentialFeedTests/Feed API/FeedEndpointTests.swift @@ -11,7 +11,7 @@ class FeedEndpointTests: XCTestCase { func test_feed_endpointURL() { let baseURL = URL(string: "http://base-url.com")! - let received = FeedEndpoint.get.url(baseURL: baseURL) + let received = FeedEndpoint.get().url(baseURL: baseURL) XCTAssertEqual(received.scheme, "http", "scheme") XCTAssertEqual(received.host, "base-url.com", "host") @@ -19,4 +19,17 @@ class FeedEndpointTests: XCTestCase { XCTAssertEqual(received.query, "limit=10", "query") } + func test_feed_endpointURLAfterGivenImage() { + let image = uniqueImage() + let baseURL = URL(string: "http://base-url.com")! + + let received = FeedEndpoint.get(after: image).url(baseURL: baseURL) + + XCTAssertEqual(received.scheme, "http", "scheme") + XCTAssertEqual(received.host, "base-url.com", "host") + XCTAssertEqual(received.path, "/v1/feed", "path") + XCTAssertEqual(received.query?.contains("limit=10"), true, "limit query param") + XCTAssertEqual(received.query?.contains("after_id=\(image.id)"), true, "after_id query param") + } + } From c3c104feb4e78a6b2dd8666cabff7ef6c7606689 Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Mon, 24 Mar 2025 20:53:40 -0300 Subject: [PATCH 17/23] Load more items until last page --- EssentialApp/EssentialApp/SceneDelegate.swift | 20 ++++++++- .../FeedAcceptanceTests.swift | 41 +++++++++++++++++-- .../ListViewController+TestHelpers.swift | 4 ++ 3 files changed, 60 insertions(+), 5 deletions(-) diff --git a/EssentialApp/EssentialApp/SceneDelegate.swift b/EssentialApp/EssentialApp/SceneDelegate.swift index 80d10f6..0b2c675 100644 --- a/EssentialApp/EssentialApp/SceneDelegate.swift +++ b/EssentialApp/EssentialApp/SceneDelegate.swift @@ -79,12 +79,28 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { .tryMap(FeedItemsMapper.map) .caching(to: localFeedLoader) .fallback(to: localFeedLoader.loadPublisher) - .map { - Paginated(items: $0) + .map { items in + Paginated(items: items, loadMorePublisher: self.makeRemoteLoadMoreLoader(items: items, last: items.last)) } .eraseToAnyPublisher() } + private func makeRemoteLoadMoreLoader(items: [FeedImage], last: FeedImage?) -> (() -> AnyPublisher, Error>)? { + last.map { lastItem in + let url = FeedEndpoint.get(after: lastItem).url(baseURL: baseURL) + + return { [httpClient] in + httpClient + .getPublisher(url: url) + .tryMap(FeedItemsMapper.map) + .map { newItems in + let allItems = items + newItems + return Paginated(items: allItems, loadMorePublisher: self.makeRemoteLoadMoreLoader(items: allItems, last: newItems.last)) + }.eraseToAnyPublisher() + } + } + } + private func makeLocalImageLoaderWithRemoteFallback(url: URL) -> FeedImageDataLoader.Publisher { let localImageLoader = LocalFeedImageDataLoader(store: store) diff --git a/EssentialApp/EssentialAppTests/FeedAcceptanceTests.swift b/EssentialApp/EssentialAppTests/FeedAcceptanceTests.swift index df6ff82..72c045c 100644 --- a/EssentialApp/EssentialAppTests/FeedAcceptanceTests.swift +++ b/EssentialApp/EssentialAppTests/FeedAcceptanceTests.swift @@ -16,6 +16,23 @@ class FeedAcceptanceTests: XCTestCase { XCTAssertEqual(feed.numberOfRenderedFeedImageViews(), 2) XCTAssertEqual(feed.renderedFeedImageData(at: 0), makeImageData0()) XCTAssertEqual(feed.renderedFeedImageData(at: 1), makeImageData1()) + XCTAssertTrue(feed.canLoadMoreFeed) + + feed.simulateLoadMoreFeedAction() + + XCTAssertEqual(feed.numberOfRenderedFeedImageViews(), 3) + XCTAssertEqual(feed.renderedFeedImageData(at: 0), makeImageData0()) + XCTAssertEqual(feed.renderedFeedImageData(at: 1), makeImageData1()) + XCTAssertEqual(feed.renderedFeedImageData(at: 2), makeImageData2()) + XCTAssertTrue(feed.canLoadMoreFeed) + + feed.simulateLoadMoreFeedAction() + + XCTAssertEqual(feed.numberOfRenderedFeedImageViews(), 3) + XCTAssertEqual(feed.renderedFeedImageData(at: 0), makeImageData0()) + XCTAssertEqual(feed.renderedFeedImageData(at: 1), makeImageData1()) + XCTAssertEqual(feed.renderedFeedImageData(at: 2), makeImageData2()) + XCTAssertFalse(feed.canLoadMoreFeed) } func test_onLaunch_displaysCachedRemoteFeedWhenCustomerHasNoConnectivity() { @@ -102,9 +119,16 @@ class FeedAcceptanceTests: XCTestCase { switch url.path { case "/image-0": return makeImageData0() case "/image-1": return makeImageData1() + case "/image-2": return makeImageData2() - case "/essential-feed/v1/feed": - return makeFeedData() + case "/essential-feed/v1/feed" where url.query?.contains("after_id") == false: + return makeFirstFeedPageData() + + case "/essential-feed/v1/feed" where url.query?.contains("after_id=A28F5FE3-27A7-44E9-8DF5-53742D0E4A5A") == true: + return makeSecondFeedPageData() + + case "/essential-feed/v1/feed" where url.query?.contains("after_id=166FCDD7-C9F4-420A-B2D6-CE2EAFA3D82F") == true: + return makeLastEmptyFeedPageData() case "/essential-feed/v1/image/2AB2AE66-A4B7-4A16-B374-51BBAC8DB086/comments": return makeCommentsData() @@ -116,14 +140,25 @@ class FeedAcceptanceTests: XCTestCase { private func makeImageData0() -> Data { UIImage.make(withColor: .red).pngData()! } private func makeImageData1() -> Data { UIImage.make(withColor: .green).pngData()! } + private func makeImageData2() -> Data { UIImage.make(withColor: .blue).pngData()! } - private func makeFeedData() -> Data { + private func makeFirstFeedPageData() -> Data { return try! JSONSerialization.data(withJSONObject: ["items": [ ["id": "2AB2AE66-A4B7-4A16-B374-51BBAC8DB086", "image": "http://feed.com/image-0"], ["id": "A28F5FE3-27A7-44E9-8DF5-53742D0E4A5A", "image": "http://feed.com/image-1"] ]]) } + private func makeSecondFeedPageData() -> Data { + return try! JSONSerialization.data(withJSONObject: ["items": [ + ["id": "166FCDD7-C9F4-420A-B2D6-CE2EAFA3D82F", "image": "http://feed.com/image-2"], + ]]) + } + + private func makeLastEmptyFeedPageData() -> Data { + return try! JSONSerialization.data(withJSONObject: ["items": []]) + } + private func makeCommentsData() -> Data { return try! JSONSerialization.data(withJSONObject: ["items": [ [ diff --git a/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift b/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift index 5830838..77652b6 100644 --- a/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift +++ b/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift @@ -162,6 +162,10 @@ extension ListViewController { return loadMoreFeedCell()?.message } + var canLoadMoreFeed: Bool { + loadMoreFeedCell() != nil + } + private func loadMoreFeedCell() -> LoadMoreCell? { cell(row: 0, section: feedLoadMoreSection) as? LoadMoreCell } From b65cc716f2ec8d533d7f0545747a8a1f0a2f891c Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Mon, 24 Mar 2025 21:05:44 -0300 Subject: [PATCH 18/23] Cache page results --- EssentialApp/EssentialApp/CombineHelpers.swift | 12 ++++++++++-- EssentialApp/EssentialApp/SceneDelegate.swift | 5 +++-- .../EssentialAppTests/FeedAcceptanceTests.swift | 6 +++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/EssentialApp/EssentialApp/CombineHelpers.swift b/EssentialApp/EssentialApp/CombineHelpers.swift index 1534fb0..ff872f1 100644 --- a/EssentialApp/EssentialApp/CombineHelpers.swift +++ b/EssentialApp/EssentialApp/CombineHelpers.swift @@ -97,8 +97,12 @@ extension Publisher { } } -extension Publisher where Output == [FeedImage] { - func caching(to cache: FeedCache) -> AnyPublisher { +extension Publisher { + func caching(to cache: FeedCache) -> AnyPublisher where Output == [FeedImage] { + handleEvents(receiveOutput: cache.saveIgnoringResult).eraseToAnyPublisher() + } + + func caching(to cache: FeedCache) -> AnyPublisher where Output == Paginated { handleEvents(receiveOutput: cache.saveIgnoringResult).eraseToAnyPublisher() } } @@ -107,6 +111,10 @@ private extension FeedCache { func saveIgnoringResult(_ feed: [FeedImage]) { save(feed) { _ in } } + + func saveIgnoringResult(_ page: Paginated) { + saveIgnoringResult(page.items) + } } extension Publisher { diff --git a/EssentialApp/EssentialApp/SceneDelegate.swift b/EssentialApp/EssentialApp/SceneDelegate.swift index 0b2c675..d60a75c 100644 --- a/EssentialApp/EssentialApp/SceneDelegate.swift +++ b/EssentialApp/EssentialApp/SceneDelegate.swift @@ -89,14 +89,15 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { last.map { lastItem in let url = FeedEndpoint.get(after: lastItem).url(baseURL: baseURL) - return { [httpClient] in + return { [httpClient, localFeedLoader] in httpClient .getPublisher(url: url) .tryMap(FeedItemsMapper.map) .map { newItems in let allItems = items + newItems return Paginated(items: allItems, loadMorePublisher: self.makeRemoteLoadMoreLoader(items: allItems, last: newItems.last)) - }.eraseToAnyPublisher() + } + .caching(to: localFeedLoader) } } } diff --git a/EssentialApp/EssentialAppTests/FeedAcceptanceTests.swift b/EssentialApp/EssentialAppTests/FeedAcceptanceTests.swift index 72c045c..1cad5c2 100644 --- a/EssentialApp/EssentialAppTests/FeedAcceptanceTests.swift +++ b/EssentialApp/EssentialAppTests/FeedAcceptanceTests.swift @@ -37,15 +37,19 @@ class FeedAcceptanceTests: XCTestCase { func test_onLaunch_displaysCachedRemoteFeedWhenCustomerHasNoConnectivity() { let sharedStore = InMemoryFeedStore.empty + let onlineFeed = launch(httpClient: .online(response), store: sharedStore) onlineFeed.simulateFeedImageViewVisible(at: 0) onlineFeed.simulateFeedImageViewVisible(at: 1) + onlineFeed.simulateLoadMoreFeedAction() + onlineFeed.simulateFeedImageViewVisible(at: 2) let offlineFeed = launch(httpClient: .offline, store: sharedStore) - XCTAssertEqual(offlineFeed.numberOfRenderedFeedImageViews(), 2) + XCTAssertEqual(offlineFeed.numberOfRenderedFeedImageViews(), 3) XCTAssertEqual(offlineFeed.renderedFeedImageData(at: 0), makeImageData0()) XCTAssertEqual(offlineFeed.renderedFeedImageData(at: 1), makeImageData1()) + XCTAssertEqual(offlineFeed.renderedFeedImageData(at: 2), makeImageData2()) } func test_onLaunch_displaysEmptyFeedWhenCustomerHasNoConnectivityAndNoCache() { From b4e948d27c628894a00dda54e5fa232ecf840dbc Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Mon, 24 Mar 2025 21:26:32 -0300 Subject: [PATCH 19/23] Extract logic into helper methods --- EssentialApp/EssentialApp/SceneDelegate.swift | 46 ++++++++++--------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/EssentialApp/EssentialApp/SceneDelegate.swift b/EssentialApp/EssentialApp/SceneDelegate.swift index d60a75c..79f47c9 100644 --- a/EssentialApp/EssentialApp/SceneDelegate.swift +++ b/EssentialApp/EssentialApp/SceneDelegate.swift @@ -72,34 +72,38 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { } private func makeRemoteFeedLoaderWithLocalFallback() -> AnyPublisher, Error> { - let url = FeedEndpoint.get().url(baseURL: baseURL) + makeRemoteFeedLoader() + .caching(to: localFeedLoader) + .fallback(to: localFeedLoader.loadPublisher) + .map(makeFirstPage) + .eraseToAnyPublisher() + } + + private func makeRemoteLoadMoreLoader(items: [FeedImage], last: FeedImage?) -> AnyPublisher, Error> { + makeRemoteFeedLoader(after: last) + .map { newItems in + (items + newItems, newItems.last) + }.map(makePage) + .caching(to: localFeedLoader) + } + + private func makeRemoteFeedLoader(after: FeedImage? = nil) -> AnyPublisher<[FeedImage], Error> { + let url = FeedEndpoint.get(after: after).url(baseURL: baseURL) return httpClient .getPublisher(url: url) .tryMap(FeedItemsMapper.map) - .caching(to: localFeedLoader) - .fallback(to: localFeedLoader.loadPublisher) - .map { items in - Paginated(items: items, loadMorePublisher: self.makeRemoteLoadMoreLoader(items: items, last: items.last)) - } .eraseToAnyPublisher() } - private func makeRemoteLoadMoreLoader(items: [FeedImage], last: FeedImage?) -> (() -> AnyPublisher, Error>)? { - last.map { lastItem in - let url = FeedEndpoint.get(after: lastItem).url(baseURL: baseURL) - - return { [httpClient, localFeedLoader] in - httpClient - .getPublisher(url: url) - .tryMap(FeedItemsMapper.map) - .map { newItems in - let allItems = items + newItems - return Paginated(items: allItems, loadMorePublisher: self.makeRemoteLoadMoreLoader(items: allItems, last: newItems.last)) - } - .caching(to: localFeedLoader) - } - } + private func makeFirstPage(items: [FeedImage]) -> Paginated { + makePage(items: items, last: items.last) + } + + private func makePage(items: [FeedImage], last: FeedImage?) -> Paginated { + Paginated(items: items, loadMorePublisher: last.map { last in + { self.makeRemoteLoadMoreLoader(items: items, last: last) } + }) } private func makeLocalImageLoaderWithRemoteFallback(url: URL) -> FeedImageDataLoader.Publisher { From 3a663de8ced2295c9ab773deea9625dc6fea9b97 Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Mon, 24 Mar 2025 21:29:56 -0300 Subject: [PATCH 20/23] Remove cell selection style --- .../Feed UI/Controllers/LoadMoreCellController.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift b/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift index 0013cbb..0e9794f 100644 --- a/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift +++ b/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift @@ -19,7 +19,8 @@ public class LoadMoreCellController: NSObject, UITableViewDataSource, UITableVie } public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - cell + cell.selectionStyle = .none + return cell } public func tableView(_ tableView: UITableView, willDisplay: UITableViewCell, forRowAt indexPath: IndexPath) { From 2540ad377026bc96c307cc2513c9eeb675c909cc Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Mon, 24 Mar 2025 21:36:16 -0300 Subject: [PATCH 21/23] Automatically load more items on scroll after an error --- .../Feed UI/Controllers/LoadMoreCellController.swift | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift b/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift index 0e9794f..de4d4ed 100644 --- a/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift +++ b/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift @@ -9,6 +9,7 @@ import EssentialFeed public class LoadMoreCellController: NSObject, UITableViewDataSource, UITableViewDelegate { private let cell = LoadMoreCell() private let callback: () -> Void + private var offsetObserver: NSKeyValueObservation? public init(callback: @escaping () -> Void) { self.callback = callback @@ -25,6 +26,16 @@ public class LoadMoreCellController: NSObject, UITableViewDataSource, UITableVie public func tableView(_ tableView: UITableView, willDisplay: UITableViewCell, forRowAt indexPath: IndexPath) { reloadIfNeeded() + + offsetObserver = tableView.observe(\.contentOffset, options: .new) { [weak self] (tableView, _) in + guard tableView.isDragging else { return } + + self?.reloadIfNeeded() + } + } + + public func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) { + offsetObserver = nil } public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { From d88b0b5a484635a58e5d61787c1fe530643b3d1c Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Mon, 24 Mar 2025 21:44:24 -0300 Subject: [PATCH 22/23] Fetch current items from cache when needed instead of keeping them in memory all the time --- EssentialApp/EssentialApp/SceneDelegate.swift | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/EssentialApp/EssentialApp/SceneDelegate.swift b/EssentialApp/EssentialApp/SceneDelegate.swift index 79f47c9..72ef3eb 100644 --- a/EssentialApp/EssentialApp/SceneDelegate.swift +++ b/EssentialApp/EssentialApp/SceneDelegate.swift @@ -79,10 +79,11 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { .eraseToAnyPublisher() } - private func makeRemoteLoadMoreLoader(items: [FeedImage], last: FeedImage?) -> AnyPublisher, Error> { - makeRemoteFeedLoader(after: last) - .map { newItems in - (items + newItems, newItems.last) + private func makeRemoteLoadMoreLoader(last: FeedImage?) -> AnyPublisher, Error> { + localFeedLoader.loadPublisher() + .zip(makeRemoteFeedLoader(after: last)) + .map { (cachedItems, newItems) in + (cachedItems + newItems, newItems.last) }.map(makePage) .caching(to: localFeedLoader) } @@ -102,7 +103,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { private func makePage(items: [FeedImage], last: FeedImage?) -> Paginated { Paginated(items: items, loadMorePublisher: last.map { last in - { self.makeRemoteLoadMoreLoader(items: items, last: last) } + { self.makeRemoteLoadMoreLoader(last: last) } }) } From 0c5cdfc4f28a519dcdcef1aa9bacb5fab2759c5a Mon Sep 17 00:00:00 2001 From: Rodrigo Porto Date: Mon, 24 Mar 2025 22:05:58 -0300 Subject: [PATCH 23/23] Group "Load more" tests --- .../FeedUIIntegrationTests.swift | 126 +++++++++--------- .../FeedUIIntegrationTests+LoaderSpy.swift | 33 ++--- 2 files changed, 82 insertions(+), 77 deletions(-) diff --git a/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift b/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift index a30bea4..5420a6d 100644 --- a/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift +++ b/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift @@ -49,32 +49,6 @@ class FeedUIIntegrationTests: XCTestCase { XCTAssertEqual(loader.loadFeedCallCount, 3, "Expected yet another loading request once user initiates another reload") } - func test_loadMoreActions_requestMoreFromLoader() { - let (sut, loader) = makeSUT() - - sut.simulateAppearance() - loader.completeFeedLoading() - XCTAssertEqual(loader.loadMoreCallCount, 0, "Expected no requests before until load more action") - - sut.simulateLoadMoreFeedAction() - XCTAssertEqual(loader.loadMoreCallCount, 1, "Expected load more request") - - sut.simulateLoadMoreFeedAction() - XCTAssertEqual(loader.loadMoreCallCount, 1, "Expected no request while loading more") - - loader.completeLoadMore(lastPage: false, at: 0) - sut.simulateLoadMoreFeedAction() - XCTAssertEqual(loader.loadMoreCallCount, 2, "Expected request after load more completed with more pages") - - loader.completeLoadMoreWithError(at: 1) - sut.simulateLoadMoreFeedAction() - XCTAssertEqual(loader.loadMoreCallCount, 3, "Expected request after load more failure") - - loader.completeLoadMore(lastPage: true, at: 2) - sut.simulateLoadMoreFeedAction() - XCTAssertEqual(loader.loadMoreCallCount, 3, "Expected no request after loading all pages") - } - func test_loadFeedActions_runsAutomaticallyOnlyOnFirstAppearance() { let (sut, loader) = makeSUT() XCTAssertEqual(loader.loadFeedCallCount, 0, "Expected no loading requests before view appears") @@ -102,28 +76,6 @@ class FeedUIIntegrationTests: XCTestCase { XCTAssertFalse(sut.isShowingLoadingIndicator, "Expected no loading indicator once user initiated loading completes with error") } - func test_loadingMoreIndicator_isVisibleWhileLoadingMore() { - let (sut, loader) = makeSUT() - - sut.simulateAppearance() - XCTAssertFalse(sut.isShowingLoadMoreFeedIndicator, "Expected no loading indicator once view is loaded") - - loader.completeFeedLoading(at: 0) - XCTAssertFalse(sut.isShowingLoadMoreFeedIndicator, "Expected no loading indicator once loading completes successfully") - - sut.simulateLoadMoreFeedAction() - XCTAssertTrue(sut.isShowingLoadMoreFeedIndicator, "Expected loading indicator on load more action") - - loader.completeLoadMore(at: 0) - XCTAssertFalse(sut.isShowingLoadMoreFeedIndicator, "Expected no loading indicator once user initiated loading completes successfully") - - sut.simulateLoadMoreFeedAction() - XCTAssertTrue(sut.isShowingLoadMoreFeedIndicator, "Expected loading indicator on second load more action") - - loader.completeLoadMoreWithError(at: 1) - XCTAssertFalse(sut.isShowingLoadMoreFeedIndicator, "Expected no loading indicator once user initiated loading completes with error") - } - func test_loadFeedCompletion_rendersSuccessfullyLoadedFeed() { let image0 = makeImage(description: "a description", location: "a location") let image1 = makeImage(description: nil, location: "another location") @@ -193,20 +145,6 @@ class FeedUIIntegrationTests: XCTestCase { wait(for: [exp], timeout: 1.0) } - func test_loadMoreCompletion_dispatchesFromBackgroundToMainThread() { - let (sut, loader) = makeSUT() - sut.simulateAppearance() - loader.completeFeedLoading(at: 0) - sut.simulateLoadMoreFeedAction() - - let exp = expectation(description: "Wait for background queue") - DispatchQueue.global().async { - loader.completeLoadMore() - exp.fulfill() - } - wait(for: [exp], timeout: 1.0) - } - func test_loadFeedCompletion_rendersErrorMessageOnErrorUntilNextReload() { let (sut, loader) = makeSUT() @@ -233,6 +171,70 @@ class FeedUIIntegrationTests: XCTestCase { XCTAssertEqual(sut.errorMessage, nil) } + // MARK: - Load More Tests + + func test_loadMoreActions_requestMoreFromLoader() { + let (sut, loader) = makeSUT() + + sut.simulateAppearance() + loader.completeFeedLoading() + XCTAssertEqual(loader.loadMoreCallCount, 0, "Expected no requests before until load more action") + + sut.simulateLoadMoreFeedAction() + XCTAssertEqual(loader.loadMoreCallCount, 1, "Expected load more request") + + sut.simulateLoadMoreFeedAction() + XCTAssertEqual(loader.loadMoreCallCount, 1, "Expected no request while loading more") + + loader.completeLoadMore(lastPage: false, at: 0) + sut.simulateLoadMoreFeedAction() + XCTAssertEqual(loader.loadMoreCallCount, 2, "Expected request after load more completed with more pages") + + loader.completeLoadMoreWithError(at: 1) + sut.simulateLoadMoreFeedAction() + XCTAssertEqual(loader.loadMoreCallCount, 3, "Expected request after load more failure") + + loader.completeLoadMore(lastPage: true, at: 2) + sut.simulateLoadMoreFeedAction() + XCTAssertEqual(loader.loadMoreCallCount, 3, "Expected no request after loading all pages") + } + + func test_loadingMoreIndicator_isVisibleWhileLoadingMore() { + let (sut, loader) = makeSUT() + + sut.simulateAppearance() + XCTAssertFalse(sut.isShowingLoadMoreFeedIndicator, "Expected no loading indicator once view is loaded") + + loader.completeFeedLoading(at: 0) + XCTAssertFalse(sut.isShowingLoadMoreFeedIndicator, "Expected no loading indicator once loading completes successfully") + + sut.simulateLoadMoreFeedAction() + XCTAssertTrue(sut.isShowingLoadMoreFeedIndicator, "Expected loading indicator on load more action") + + loader.completeLoadMore(at: 0) + XCTAssertFalse(sut.isShowingLoadMoreFeedIndicator, "Expected no loading indicator once user initiated loading completes successfully") + + sut.simulateLoadMoreFeedAction() + XCTAssertTrue(sut.isShowingLoadMoreFeedIndicator, "Expected loading indicator on second load more action") + + loader.completeLoadMoreWithError(at: 1) + XCTAssertFalse(sut.isShowingLoadMoreFeedIndicator, "Expected no loading indicator once user initiated loading completes with error") + } + + func test_loadMoreCompletion_dispatchesFromBackgroundToMainThread() { + let (sut, loader) = makeSUT() + sut.simulateAppearance() + loader.completeFeedLoading(at: 0) + sut.simulateLoadMoreFeedAction() + + let exp = expectation(description: "Wait for background queue") + DispatchQueue.global().async { + loader.completeLoadMore() + exp.fulfill() + } + wait(for: [exp], timeout: 1.0) + } + func test_loadMoreCompletion_rendersErrorMessageOnError() { let (sut, loader) = makeSUT() sut.simulateAppearance() diff --git a/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift b/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift index 01ec9c1..49e4cb5 100644 --- a/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift +++ b/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift @@ -15,16 +15,11 @@ extension FeedUIIntegrationTests { // MARK: - FeedLoader private var feedRequests = [PassthroughSubject, Error>]() - private var loadMoreRequests = [PassthroughSubject, Error>]() var loadFeedCallCount: Int { return feedRequests.count } - var loadMoreCallCount: Int { - return loadMoreRequests.count - } - func loadPublisher() -> AnyPublisher, Error> { let publisher = PassthroughSubject, Error>() feedRequests.append(publisher) @@ -33,30 +28,38 @@ extension FeedUIIntegrationTests { func completeFeedLoading(with feed: [FeedImage] = [], at index: Int = 0) { feedRequests[index].send(Paginated(items: feed, loadMorePublisher: { [weak self] in - let publisher = PassthroughSubject, Error>() - self?.loadMoreRequests.append(publisher) - return publisher.eraseToAnyPublisher() + self?.loadMorePublisher() ?? Empty().eraseToAnyPublisher() })) } func completeFeedLoadingWithError(at index: Int = 0) { - let error = NSError(domain: "an error", code: 404) - feedRequests[index].send(completion: .failure(error)) + feedRequests[index].send(completion: .failure(anyNSError())) + } + + // MARK: - LoadMoreFeedLoader + + private var loadMoreRequests = [PassthroughSubject, Error>]() + + var loadMoreCallCount: Int { + return loadMoreRequests.count + } + + func loadMorePublisher() -> AnyPublisher, Error> { + let publisher = PassthroughSubject, Error>() + loadMoreRequests.append(publisher) + return publisher.eraseToAnyPublisher() } func completeLoadMore(with feed: [FeedImage] = [], lastPage: Bool = false, at index: Int = 0) { loadMoreRequests[index].send(Paginated( items: feed, loadMorePublisher: lastPage ? nil : { [weak self] in - let publisher = PassthroughSubject, Error>() - self?.loadMoreRequests.append(publisher) - return publisher.eraseToAnyPublisher() + self?.loadMorePublisher() ?? Empty().eraseToAnyPublisher() })) } func completeLoadMoreWithError(at index: Int = 0) { - let error = NSError(domain: "an error", code: 404) - loadMoreRequests[index].send(completion: .failure(error)) + loadMoreRequests[index].send(completion: .failure(anyNSError())) } // MARK: - FeedImageDataLoader