@@ -9,8 +9,8 @@ import EssentialFeediOS
99
1010class FeedAcceptanceTests : XCTestCase {
1111
12- func test_onLaunch_displaysRemoteFeedWhenCustomerHasConnectivity( ) {
13- let feed = launch ( httpClient: . online( response) , store: . empty)
12+ func test_onLaunch_displaysRemoteFeedWhenCustomerHasConnectivity( ) throws {
13+ let feed = try launch ( httpClient: . online( response) , store: . empty)
1414
1515 XCTAssertEqual ( feed. numberOfRenderedFeedImageViews ( ) , 2 )
1616 XCTAssertEqual ( feed. renderedFeedImageData ( at: 0 ) , makeImageData0 ( ) )
@@ -34,8 +34,8 @@ class FeedAcceptanceTests: XCTestCase {
3434 XCTAssertFalse ( feed. canLoadMoreFeed)
3535 }
3636
37- func test_onLaunch_displaysCachedRemoteFeedWhenCustomerHasNoConnectivity( ) {
38- let sharedStore = InMemoryFeedStore . empty
37+ func test_onLaunch_displaysCachedRemoteFeedWhenCustomerHasNoConnectivity( ) throws {
38+ let sharedStore = try CoreDataFeedStore . empty
3939
4040 let onlineFeed = launch ( httpClient: . online( response) , store: sharedStore)
4141 onlineFeed. simulateFeedImageViewVisible ( at: 0 )
@@ -51,30 +51,30 @@ class FeedAcceptanceTests: XCTestCase {
5151 XCTAssertEqual ( offlineFeed. renderedFeedImageData ( at: 2 ) , makeImageData2 ( ) )
5252 }
5353
54- func test_onLaunch_displaysEmptyFeedWhenCustomerHasNoConnectivityAndNoCache( ) {
55- let feed = launch ( httpClient: . offline, store: . empty)
54+ func test_onLaunch_displaysEmptyFeedWhenCustomerHasNoConnectivityAndNoCache( ) throws {
55+ let feed = try launch ( httpClient: . offline, store: . empty)
5656
5757 XCTAssertEqual ( feed. numberOfRenderedFeedImageViews ( ) , 0 )
5858 }
5959
60- func test_onEnteringBackground_deletesExpiredFeedCache( ) {
61- let store = InMemoryFeedStore . withExpiredFeedCache
60+ func test_onEnteringBackground_deletesExpiredFeedCache( ) throws {
61+ let store = try CoreDataFeedStore . withExpiredFeedCache
6262
6363 enterBackground ( with: store)
6464
65- XCTAssertNil ( store. feedCache , " Expected to delete expired cache " )
65+ XCTAssertNil ( try store. retrieve ( ) , " Expected to delete expired cache " )
6666 }
6767
68- func test_onEnteringBackground_keepsNonExpiredFeedCache( ) {
69- let store = InMemoryFeedStore . withNonExpiredFeedCache
68+ func test_onEnteringBackground_keepsNonExpiredFeedCache( ) throws {
69+ let store = try CoreDataFeedStore . withNonExpiredFeedCache
7070
7171 enterBackground ( with: store)
7272
73- XCTAssertNotNil ( store. feedCache , " Expected to keep non-expired cache " )
73+ XCTAssertNotNil ( try store. retrieve ( ) , " Expected to keep non-expired cache " )
7474 }
7575
76- func test_onFeedImageSelection_displaysComments( ) {
77- let comments = showCommentsForFirstImage ( )
76+ func test_onFeedImageSelection_displaysComments( ) throws {
77+ let comments = try showCommentsForFirstImage ( )
7878
7979 XCTAssertEqual ( comments. numberOfRenderedComments ( ) , 1 )
8080 XCTAssertEqual ( comments. commentMessage ( at: 0 ) , makeCommentMessage ( ) )
@@ -84,9 +84,9 @@ class FeedAcceptanceTests: XCTestCase {
8484
8585 private func launch(
8686 httpClient: HTTPClientStub = . offline,
87- store: InMemoryFeedStore = . empty
87+ store: CoreDataFeedStore
8888 ) -> ListViewController {
89- let sut = SceneDelegate ( httpClient: httpClient, store: store, scheduler : . immediateOnMainThread )
89+ let sut = SceneDelegate ( httpClient: httpClient, store: store)
9090 sut. window = UIWindow ( frame: CGRect ( x: 0 , y: 0 , width: 390 , height: 1 ) )
9191 sut. configureWindow ( )
9292
@@ -96,13 +96,13 @@ class FeedAcceptanceTests: XCTestCase {
9696 return vc
9797 }
9898
99- private func enterBackground( with store: InMemoryFeedStore ) {
100- let sut = SceneDelegate ( httpClient: HTTPClientStub . offline, store: store, scheduler : . immediateOnMainThread )
99+ private func enterBackground( with store: CoreDataFeedStore ) {
100+ let sut = SceneDelegate ( httpClient: HTTPClientStub . offline, store: store)
101101 sut. sceneWillResignActive ( UIApplication . shared. connectedScenes. first!)
102102 }
103103
104- private func showCommentsForFirstImage( ) -> ListViewController {
105- let feed = launch ( httpClient: . online( response) , store: . empty)
104+ private func showCommentsForFirstImage( ) throws -> ListViewController {
105+ let feed = try launch ( httpClient: . online( response) , store: . empty)
106106
107107 feed. simulateTapOnFeedImage ( at: 0 )
108108 RunLoop . current. run ( until: Date ( ) )
@@ -180,3 +180,27 @@ class FeedAcceptanceTests: XCTestCase {
180180 }
181181
182182}
183+
184+ extension CoreDataFeedStore {
185+ static var empty : CoreDataFeedStore {
186+ get throws {
187+ try CoreDataFeedStore ( storeURL: URL ( fileURLWithPath: " /dev/null " ) , contextQueue: . main)
188+ }
189+ }
190+
191+ static var withExpiredFeedCache : CoreDataFeedStore {
192+ get throws {
193+ let store = try CoreDataFeedStore . empty
194+ try store. insert ( [ ] , timestamp: . distantPast)
195+ return store
196+ }
197+ }
198+
199+ static var withNonExpiredFeedCache : CoreDataFeedStore {
200+ get throws {
201+ let store = try CoreDataFeedStore . empty
202+ try store. insert ( [ ] , timestamp: Date ( ) )
203+ return store
204+ }
205+ }
206+ }
0 commit comments