Skip to content

Commit 07f0d2d

Browse files
authored
Merge pull request #80 from essentialdevelopercom/feature/promote-in-memory-store
Replace NullStore with InMemoryFeedStore
2 parents 9f2fa04 + 001455e commit 07f0d2d

11 files changed

Lines changed: 322 additions & 143 deletions

File tree

EssentialApp/EssentialApp.xcodeproj/project.pbxproj

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
0835BF6D24850F9800A793D2 /* CombineHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0835BF6C24850F9800A793D2 /* CombineHelpers.swift */; };
2828
08367CD82486FB51009CD536 /* UIView+TestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08367CD72486FB51009CD536 /* UIView+TestHelpers.swift */; };
2929
0851CDAC239AB13100C19B1D /* HTTPClientStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0851CDAB239AB13100C19B1D /* HTTPClientStub.swift */; };
30-
0851CDAE239AB19000C19B1D /* InMemoryFeedStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0851CDAD239AB19000C19B1D /* InMemoryFeedStore.swift */; };
3130
088B441925309AA300D75AAD /* CommentsUIIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088B441825309AA300D75AAD /* CommentsUIIntegrationTests.swift */; };
3231
088B441C25309B6E00D75AAD /* CommentsUIComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088B441B25309B6E00D75AAD /* CommentsUIComposer.swift */; };
3332
0895DA87234B3B950031BB2D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0895DA86234B3B950031BB2D /* AppDelegate.swift */; };
@@ -38,7 +37,6 @@
3837
0895DAAC234B3F7E0031BB2D /* EssentialFeed.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0895DAA9234B3F7E0031BB2D /* EssentialFeed.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3938
0895DAAD234B3F7E0031BB2D /* EssentialFeediOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0895DAAA234B3F7E0031BB2D /* EssentialFeediOS.framework */; };
4039
0895DAAE234B3F7E0031BB2D /* EssentialFeediOS.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0895DAAA234B3F7E0031BB2D /* EssentialFeediOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
41-
08CF92F62555A15B006B7E7D /* NullStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08CF92F52555A15B006B7E7D /* NullStore.swift */; };
4240
/* End PBXBuildFile section */
4341

4442
/* Begin PBXContainerItemProxy section */
@@ -87,7 +85,6 @@
8785
0835BF6C24850F9800A793D2 /* CombineHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CombineHelpers.swift; sourceTree = "<group>"; };
8886
08367CD72486FB51009CD536 /* UIView+TestHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+TestHelpers.swift"; sourceTree = "<group>"; };
8987
0851CDAB239AB13100C19B1D /* HTTPClientStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPClientStub.swift; sourceTree = "<group>"; };
90-
0851CDAD239AB19000C19B1D /* InMemoryFeedStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InMemoryFeedStore.swift; sourceTree = "<group>"; };
9188
088B441825309AA300D75AAD /* CommentsUIIntegrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentsUIIntegrationTests.swift; sourceTree = "<group>"; };
9289
088B441B25309B6E00D75AAD /* CommentsUIComposer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentsUIComposer.swift; sourceTree = "<group>"; };
9390
0895DA83234B3B950031BB2D /* EssentialApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = EssentialApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -103,7 +100,6 @@
103100
08B5033725346BAC003FF218 /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/LaunchScreen.strings; sourceTree = "<group>"; };
104101
08B5033925346BE1003FF218 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/LaunchScreen.strings"; sourceTree = "<group>"; };
105102
08B5033B25346BFE003FF218 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/LaunchScreen.strings; sourceTree = "<group>"; };
106-
08CF92F52555A15B006B7E7D /* NullStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NullStore.swift; sourceTree = "<group>"; };
107103
/* End PBXFileReference section */
108104

109105
/* Begin PBXFrameworksBuildPhase section */
@@ -141,7 +137,6 @@
141137
082C00032359E46C008927D3 /* XCTestCase+MemoryLeakTracking.swift */,
142138
082C00052359E4C6008927D3 /* SharedTestHelpers.swift */,
143139
0851CDAB239AB13100C19B1D /* HTTPClientStub.swift */,
144-
0851CDAD239AB19000C19B1D /* InMemoryFeedStore.swift */,
145140
);
146141
path = Helpers;
147142
sourceTree = "<group>";
@@ -171,7 +166,6 @@
171166
children = (
172167
0895DA86234B3B950031BB2D /* AppDelegate.swift */,
173168
0895DA88234B3B950031BB2D /* SceneDelegate.swift */,
174-
08CF92F52555A15B006B7E7D /* NullStore.swift */,
175169
0835BF6C24850F9800A793D2 /* CombineHelpers.swift */,
176170
08073B42238D2DF900A75DC6 /* FeedUIComposer.swift */,
177171
088B441B25309B6E00D75AAD /* CommentsUIComposer.swift */,
@@ -315,7 +309,6 @@
315309
08073B44238D2DFA00A75DC6 /* FeedUIComposer.swift in Sources */,
316310
0895DA87234B3B950031BB2D /* AppDelegate.swift in Sources */,
317311
08073B45238D2DFA00A75DC6 /* LoadResourcePresentationAdapter.swift in Sources */,
318-
08CF92F62555A15B006B7E7D /* NullStore.swift in Sources */,
319312
08073B48238D2DFA00A75DC6 /* WeakRefVirtualProxy.swift in Sources */,
320313
0895DA89234B3B950031BB2D /* SceneDelegate.swift in Sources */,
321314
08073B49238D2DFA00A75DC6 /* FeedViewAdapter.swift in Sources */,
@@ -336,7 +329,6 @@
336329
0832C9D0238D2811002314C9 /* SceneDelegateTests.swift in Sources */,
337330
08073B5B238D2E1000A75DC6 /* ListViewController+TestHelpers.swift in Sources */,
338331
08073B53238D2E1000A75DC6 /* UIButton+TestHelpers.swift in Sources */,
339-
0851CDAE239AB19000C19B1D /* InMemoryFeedStore.swift in Sources */,
340332
08073B59238D2E1000A75DC6 /* UIImage+TestHelpers.swift in Sources */,
341333
0851CDAC239AB13100C19B1D /* HTTPClientStub.swift in Sources */,
342334
08073B5A238D2E1000A75DC6 /* UIRefreshControl+TestHelpers.swift in Sources */,

EssentialApp/EssentialApp/NullStore.swift

Lines changed: 0 additions & 22 deletions
This file was deleted.

EssentialApp/EssentialApp/SceneDelegate.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
1818

1919
return DispatchQueue(
2020
label: "com.essentialdeveloper.infra.queue",
21-
qos: .userInitiated,
22-
attributes: .concurrent
21+
qos: .userInitiated
2322
).eraseToAnyScheduler()
2423
}()
2524

@@ -38,7 +37,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
3837
} catch {
3938
assertionFailure("Failed to instantiate CoreData store with error: \(error.localizedDescription)")
4039
logger.fault("Failed to instantiate CoreData store with error: \(error.localizedDescription)")
41-
return NullStore()
40+
return InMemoryFeedStore()
4241
}
4342
}()
4443

EssentialApp/EssentialAppTests/Helpers/InMemoryFeedStore.swift

Lines changed: 0 additions & 53 deletions
This file was deleted.

EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@
8686
087546942272387900542C32 /* XCTestCase+FailableDeleteFeedStoreSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 087546932272387900542C32 /* XCTestCase+FailableDeleteFeedStoreSpecs.swift */; };
8787
08805A19233A9F8600509F19 /* URLProtocolStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08805A18233A9F8600509F19 /* URLProtocolStub.swift */; };
8888
0886893A221DAA34007BC3E7 /* LocalFeedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08868939221DAA34007BC3E7 /* LocalFeedImage.swift */; };
89+
088887B12BB3229900E3723E /* InMemoryFeedStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088887B02BB3229900E3723E /* InMemoryFeedStore.swift */; };
90+
088887B32BB322F600E3723E /* InMemoryFeedStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088887B22BB322F600E3723E /* InMemoryFeedStoreTests.swift */; };
91+
088887B62BB40BA100E3723E /* FeedImageDataStoreSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088887B52BB40BA100E3723E /* FeedImageDataStoreSpecs.swift */; };
92+
088887B82BB40C2700E3723E /* XCTestCase+FeedImageDataStoreSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088887B72BB40C2700E3723E /* XCTestCase+FeedImageDataStoreSpecs.swift */; };
8993
08897BE623390F4E0029F5E4 /* FeedImageDataLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08FC5AA922D5F47900148E12 /* FeedImageDataLoader.swift */; };
9094
08897BE8233910040029F5E4 /* FeedImageDataMapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08897BE7233910040029F5E4 /* FeedImageDataMapperTests.swift */; };
9195
08897BEF233A1C8E0029F5E4 /* HTTPURLResponse+StatusCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08897BEE233A1C8E0029F5E4 /* HTTPURLResponse+StatusCode.swift */; };
@@ -117,6 +121,7 @@
117121
08DB54FC254465BA00B98C3A /* FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png in Resources */ = {isa = PBXBuildFile; fileRef = 08DB54F9254465BA00B98C3A /* FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png */; };
118122
08DB5510254467FC00B98C3A /* Paginated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DB550F254467FC00B98C3A /* Paginated.swift */; };
119123
08DDC13A21BEA99E00F490ED /* FeedItemsMapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08DDC13921BEA99E00F490ED /* FeedItemsMapperTests.swift */; };
124+
08E53C692BB41454002F3D93 /* InMemoryFeedImageDataStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08E53C682BB41454002F3D93 /* InMemoryFeedImageDataStoreTests.swift */; };
120125
08E546CC24F9631300C64FAE /* FeedImageDataMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08E546CB24F9631300C64FAE /* FeedImageDataMapper.swift */; };
121126
08E5941522523FCC00E2D213 /* FeedCachePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08E5941422523FCC00E2D213 /* FeedCachePolicy.swift */; };
122127
08EF9D17250BB0E4004539C2 /* LoadResourcePresenterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08EF9D16250BB0E4004539C2 /* LoadResourcePresenterTests.swift */; };
@@ -247,6 +252,10 @@
247252
087546932272387900542C32 /* XCTestCase+FailableDeleteFeedStoreSpecs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCTestCase+FailableDeleteFeedStoreSpecs.swift"; sourceTree = "<group>"; };
248253
08805A18233A9F8600509F19 /* URLProtocolStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLProtocolStub.swift; sourceTree = "<group>"; };
249254
08868939221DAA34007BC3E7 /* LocalFeedImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalFeedImage.swift; sourceTree = "<group>"; };
255+
088887B02BB3229900E3723E /* InMemoryFeedStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InMemoryFeedStore.swift; sourceTree = "<group>"; };
256+
088887B22BB322F600E3723E /* InMemoryFeedStoreTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InMemoryFeedStoreTests.swift; sourceTree = "<group>"; };
257+
088887B52BB40BA100E3723E /* FeedImageDataStoreSpecs.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeedImageDataStoreSpecs.swift; sourceTree = "<group>"; };
258+
088887B72BB40C2700E3723E /* XCTestCase+FeedImageDataStoreSpecs.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "XCTestCase+FeedImageDataStoreSpecs.swift"; sourceTree = "<group>"; };
250259
08897BE7233910040029F5E4 /* FeedImageDataMapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedImageDataMapperTests.swift; sourceTree = "<group>"; };
251260
08897BEE233A1C8E0029F5E4 /* HTTPURLResponse+StatusCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HTTPURLResponse+StatusCode.swift"; sourceTree = "<group>"; };
252261
0889B0F92530B0AA00FEAB5A /* ImageCommentsEndpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageCommentsEndpoint.swift; sourceTree = "<group>"; };
@@ -280,6 +289,7 @@
280289
08DB54F9254465BA00B98C3A /* FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png; sourceTree = "<group>"; };
281290
08DB550F254467FC00B98C3A /* Paginated.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Paginated.swift; sourceTree = "<group>"; };
282291
08DDC13921BEA99E00F490ED /* FeedItemsMapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedItemsMapperTests.swift; sourceTree = "<group>"; };
292+
08E53C682BB41454002F3D93 /* InMemoryFeedImageDataStoreTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InMemoryFeedImageDataStoreTests.swift; sourceTree = "<group>"; };
283293
08E546CB24F9631300C64FAE /* FeedImageDataMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedImageDataMapper.swift; sourceTree = "<group>"; };
284294
08E5941422523FCC00E2D213 /* FeedCachePolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedCachePolicy.swift; sourceTree = "<group>"; };
285295
08EF9D16250BB0E4004539C2 /* LoadResourcePresenterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadResourcePresenterTests.swift; sourceTree = "<group>"; };
@@ -533,6 +543,7 @@
533543
08285AF7228C16D7000A8987 /* Infrastructure */ = {
534544
isa = PBXGroup;
535545
children = (
546+
08E53C6A2BB4165A002F3D93 /* InMemory */,
536547
08285AF8228C16E5000A8987 /* CoreData */,
537548
);
538549
path = Infrastructure;
@@ -702,6 +713,15 @@
702713
path = FeedStoreSpecs;
703714
sourceTree = "<group>";
704715
};
716+
088887B42BB40B8800E3723E /* FeedImageDataStoreSpecs */ = {
717+
isa = PBXGroup;
718+
children = (
719+
088887B52BB40BA100E3723E /* FeedImageDataStoreSpecs.swift */,
720+
088887B72BB40C2700E3723E /* XCTestCase+FeedImageDataStoreSpecs.swift */,
721+
);
722+
path = FeedImageDataStoreSpecs;
723+
sourceTree = "<group>";
724+
};
705725
08897BE9233939AA0029F5E4 /* Helpers */ = {
706726
isa = PBXGroup;
707727
children = (
@@ -732,13 +752,16 @@
732752
children = (
733753
086BE48222327254004CDC26 /* Helpers */,
734754
08754695227238B100542C32 /* FeedStoreSpecs */,
755+
088887B42BB40B8800E3723E /* FeedImageDataStoreSpecs */,
735756
089C40D32216C37400DE552E /* CacheFeedUseCaseTests.swift */,
736757
086BE480223270A3004CDC26 /* LoadFeedFromCacheUseCaseTests.swift */,
737758
081C0DAE22491A2400AC754E /* ValidateFeedCacheUseCaseTests.swift */,
738-
08285AEE228BF7E3000A8987 /* CoreDataFeedStoreTests.swift */,
739759
08C4E983233E037200D939F8 /* LoadFeedImageDataFromCacheUseCaseTests.swift */,
740760
086044FD233E1A90005ECD22 /* CacheFeedImageDataUseCaseTests.swift */,
761+
08285AEE228BF7E3000A8987 /* CoreDataFeedStoreTests.swift */,
741762
086044FF233E2294005ECD22 /* CoreDataFeedImageDataStoreTests.swift */,
763+
088887B22BB322F600E3723E /* InMemoryFeedStoreTests.swift */,
764+
08E53C682BB41454002F3D93 /* InMemoryFeedImageDataStoreTests.swift */,
742765
);
743766
path = "Feed Cache";
744767
sourceTree = "<group>";
@@ -817,6 +840,14 @@
817840
path = EssentialFeediOSTests;
818841
sourceTree = "<group>";
819842
};
843+
08E53C6A2BB4165A002F3D93 /* InMemory */ = {
844+
isa = PBXGroup;
845+
children = (
846+
088887B02BB3229900E3723E /* InMemoryFeedStore.swift */,
847+
);
848+
path = InMemory;
849+
sourceTree = "<group>";
850+
};
820851
08EF9D15250BB0C2004539C2 /* Shared Presentation */ = {
821852
isa = PBXGroup;
822853
children = (
@@ -1172,6 +1203,7 @@
11721203
080F9A372531DDC600EAD475 /* FeedEndpoint.swift in Sources */,
11731204
080EDF0C21B6DAE800813479 /* FeedImage.swift in Sources */,
11741205
0889B0FA2530B0AA00FEAB5A /* ImageCommentsEndpoint.swift in Sources */,
1206+
088887B12BB3229900E3723E /* InMemoryFeedStore.swift in Sources */,
11751207
0804862E236345A40087ED48 /* FeedImageDataCache.swift in Sources */,
11761208
08C4E988233E13CC00D939F8 /* FeedImageDataStore.swift in Sources */,
11771209
087148B6232BEAAF00D6BE1A /* FeedPresenter.swift in Sources */,
@@ -1199,6 +1231,7 @@
11991231
080F9A2F2531DD6200EAD475 /* ImageCommentsEndpointTests.swift in Sources */,
12001232
08805A19233A9F8600509F19 /* URLProtocolStub.swift in Sources */,
12011233
081C0DAF22491A2400AC754E /* ValidateFeedCacheUseCaseTests.swift in Sources */,
1234+
08E53C692BB41454002F3D93 /* InMemoryFeedImageDataStoreTests.swift in Sources */,
12021235
087148AC232BDF6900D6BE1A /* FeedPresenterTests.swift in Sources */,
12031236
08897BE8233910040029F5E4 /* FeedImageDataMapperTests.swift in Sources */,
12041237
08DDC13A21BEA99E00F490ED /* FeedItemsMapperTests.swift in Sources */,
@@ -1209,19 +1242,22 @@
12091242
087148BE232BEDFD00D6BE1A /* FeedLocalizationTests.swift in Sources */,
12101243
082DB86421F763F900A71F69 /* URLSessionHTTPClientTests.swift in Sources */,
12111244
08C4E984233E037200D939F8 /* LoadFeedImageDataFromCacheUseCaseTests.swift in Sources */,
1245+
088887B62BB40BA100E3723E /* FeedImageDataStoreSpecs.swift in Sources */,
12121246
08346CEB24F93B0A00A9F17C /* ImageCommentsMapperTests.swift in Sources */,
12131247
086BE4842232725E004CDC26 /* FeedStoreSpy.swift in Sources */,
12141248
081C0DB322491EEF00AC754E /* SharedTestHelpers.swift in Sources */,
12151249
089C40D42216C37400DE552E /* CacheFeedUseCaseTests.swift in Sources */,
12161250
08EF9D1E250BB77A004539C2 /* SharedLocalizationTests.swift in Sources */,
12171251
086044FC233E1A3B005ECD22 /* FeedImageDataStoreSpy.swift in Sources */,
1252+
088887B32BB322F600E3723E /* InMemoryFeedStoreTests.swift in Sources */,
12181253
08EF9D33250BCA28004539C2 /* ImageCommentsLocalizationTests.swift in Sources */,
12191254
08604500233E2294005ECD22 /* CoreDataFeedImageDataStoreTests.swift in Sources */,
12201255
087546942272387900542C32 /* XCTestCase+FailableDeleteFeedStoreSpecs.swift in Sources */,
12211256
08754690227237C900542C32 /* XCTestCase+FailableRetrieveFeedStoreSpecs.swift in Sources */,
12221257
086BE481223270A3004CDC26 /* LoadFeedFromCacheUseCaseTests.swift in Sources */,
12231258
080F9A3F2531DDFB00EAD475 /* FeedEndpointTests.swift in Sources */,
12241259
0875468C2272340500542C32 /* FeedStoreSpecs.swift in Sources */,
1260+
088887B82BB40C2700E3723E /* XCTestCase+FeedImageDataStoreSpecs.swift in Sources */,
12251261
08EF9D17250BB0E4004539C2 /* LoadResourcePresenterTests.swift in Sources */,
12261262
0844768F21FCB24E00439BE9 /* XCTestCase+MemoryLeakTracking.swift in Sources */,
12271263
08285AEF228BF7E3000A8987 /* CoreDataFeedStoreTests.swift in Sources */,

0 commit comments

Comments
 (0)