Skip to content

Commit e0464dd

Browse files
authored
Create a XCTestCase subclass to DRY managing CoreDataStack mock (#18578)
Create a XCTestCase subclass to manage CoreDataStack mock implementation
2 parents c87dbc8 + 0588abc commit e0464dd

7 files changed

Lines changed: 26 additions & 28 deletions

File tree

WordPress/WordPress.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -933,6 +933,7 @@
933933
46F584B92624E6380010A723 /* BlockEditorSettings+GutenbergEditorSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46F584B72624E6380010A723 /* BlockEditorSettings+GutenbergEditorSettings.swift */; };
934934
46F58501262605930010A723 /* BlockEditorSettingsServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46F58500262605930010A723 /* BlockEditorSettingsServiceTests.swift */; };
935935
4A17C1A4281A823E0001FFE5 /* NSManagedObject+Fixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A17C1A3281A823E0001FFE5 /* NSManagedObject+Fixture.swift */; };
936+
4A266B91282B13A70089CF3D /* CoreDataTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A266B90282B13A70089CF3D /* CoreDataTestCase.swift */; };
936937
4A266B8F282B05210089CF3D /* JSONObjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A266B8E282B05210089CF3D /* JSONObjectTests.swift */; };
937938
4B2DD0F29CD6AC353C056D41 /* Pods_WordPressUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DCE7542239FBC709B90EA85 /* Pods_WordPressUITests.framework */; };
938939
4C8A715EBCE7E73AEE216293 /* Pods_WordPressShareExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F47DB4A8EC2E6844E213A3FA /* Pods_WordPressShareExtension.framework */; };
@@ -5735,6 +5736,7 @@
57355736
46F58500262605930010A723 /* BlockEditorSettingsServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockEditorSettingsServiceTests.swift; sourceTree = "<group>"; };
57365737
46F84612185A8B7E009D0DA5 /* PostContentProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PostContentProvider.h; sourceTree = "<group>"; };
57375738
4A17C1A3281A823E0001FFE5 /* NSManagedObject+Fixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Fixture.swift"; sourceTree = "<group>"; };
5739+
4A266B90282B13A70089CF3D /* CoreDataTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataTestCase.swift; sourceTree = "<group>"; };
57385740
4A266B8E282B05210089CF3D /* JSONObjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONObjectTests.swift; sourceTree = "<group>"; };
57395741
4D520D4E22972BC9002F5924 /* acknowledgements.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = acknowledgements.html; path = "../Pods/Target Support Files/Pods-Apps-WordPress/acknowledgements.html"; sourceTree = "<group>"; };
57405742
51A5F017948878F7E26979A0 /* Pods-Apps-WordPress.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Apps-WordPress.release.xcconfig"; path = "../Pods/Target Support Files/Pods-Apps-WordPress/Pods-Apps-WordPress.release.xcconfig"; sourceTree = "<group>"; };
@@ -11440,6 +11442,7 @@
1144011442
FAE8EE9B273AD0A800A65307 /* QuickStartSettingsTests.swift */,
1144111443
179501CC27A01D4100882787 /* PublicizeAuthorizationURLComponentsTests.swift */,
1144211444
80EF92922810FA5A0064A971 /* QuickStartFactoryTests.swift */,
11445+
4A266B90282B13A70089CF3D /* CoreDataTestCase.swift */,
1144311446
4A266B8E282B05210089CF3D /* JSONObjectTests.swift */,
1144411447
);
1144511448
name = Utility;
@@ -19825,6 +19828,7 @@
1982519828
8BC12F72231FEBA1004DDA72 /* PostCoordinatorTests.swift in Sources */,
1982619829
D8B6BEB7203E11F2007C8A19 /* Bundle+LoadFromNib.swift in Sources */,
1982719830
8B2D4F5527ECE376009B085C /* BlogDashboardPostsParserTests.swift in Sources */,
19831+
4A266B91282B13A70089CF3D /* CoreDataTestCase.swift in Sources */,
1982819832
24B1AE3124FEC79900B9F334 /* RemoteFeatureFlagTests.swift in Sources */,
1982919833
E135965D1E7152D1006C6606 /* RecentSitesServiceTests.swift in Sources */,
1983019834
D88A64AC208D9B09008AE9BC /* StockPhotosPageableTests.swift in Sources */,

WordPress/WordPressTest/Analytics/EditorAnalytics/PostEditorAnalyticsSessionTests.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import Foundation
22
@testable import WordPress
33

4-
class PostEditorAnalyticsSessionTests: XCTestCase {
4+
class PostEditorAnalyticsSessionTests: CoreDataTestCase {
55
enum PostContent {
66
static let classic = """
77
Text <strong>bold</strong> <em>italic</em>
@@ -14,14 +14,11 @@ class PostEditorAnalyticsSessionTests: XCTestCase {
1414
"""
1515
}
1616

17-
private var contextManager: ContextManagerMock!
1817
private var context: NSManagedObjectContext!
1918

20-
2119
override func setUp() {
22-
contextManager = ContextManagerMock()
2320
context = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
24-
context.parent = contextManager.mainContext
21+
context.parent = mainContext
2522
TestAnalyticsTracker.setup()
2623
}
2724

WordPress/WordPressTest/Aztec/AztecPostViewControllerAttachmentTests.swift

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,19 @@ import Aztec
44
import WordPressEditor
55
import Nimble
66

7-
class AztecPostViewControllerAttachmentTests: XCTestCase {
7+
class AztecPostViewControllerAttachmentTests: CoreDataTestCase {
88

9-
private var contextManager: ContextManagerMock!
109
private var context: NSManagedObjectContext!
1110

1211
override func setUp() {
1312
super.setUp()
1413

15-
contextManager = ContextManagerMock()
1614
context = contextManager.newDerivedContext()
1715
}
1816

1917
override func tearDown() {
2018
super.tearDown()
2119
context = nil
22-
contextManager = nil
2320
}
2421

2522
func testMediaUploadErrorsWillShowAnErrorMessageAndOverlay() {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import XCTest
2+
3+
/// A `XCTestCase` subclass which manages a mock implementation of `CoreDataStack`. Inherit
4+
/// from this class to use the `CoreDataStack` mock instance in your test case.
5+
class CoreDataTestCase: XCTestCase {
6+
7+
private(set) lazy var contextManager: ContextManagerMock = {
8+
ContextManagerMock()
9+
}()
10+
11+
var mainContext: NSManagedObjectContext {
12+
return contextManager.mainContext
13+
}
14+
15+
}

WordPress/WordPressTest/Dashboard/DashboardCardTests.swift

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,14 @@ class MockDefaultSectionProvider: DefaultSectionProvider {
99
}
1010
}
1111

12-
class ZDashboardCardTests: XCTestCase {
12+
class ZDashboardCardTests: CoreDataTestCase {
1313

14-
private var contextManager: ContextManagerMock!
1514
private var context: NSManagedObjectContext!
1615
private var blog: Blog!
1716

1817
override func setUp() {
1918
super.setUp()
2019

21-
contextManager = ContextManagerMock()
2220
contextManager.setUpAsSharedInstance()
2321
context = contextManager.newDerivedContext()
2422
blog = BlogBuilder(context).build()
@@ -28,7 +26,6 @@ class ZDashboardCardTests: XCTestCase {
2826
QuickStartTourGuide.shared.remove(from: blog)
2927
context = nil
3028
contextManager.tearDown()
31-
contextManager = nil
3229
blog = nil
3330
super.tearDown()
3431
}

WordPress/WordPressTest/MarkAsSpamActionTests.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import XCTest
22
@testable import WordPress
33

4-
final class MarkAsSpamActionTests: XCTestCase {
4+
final class MarkAsSpamActionTests: CoreDataTestCase {
55
private class TestableMarkAsSpam: MarkAsSpam {
66
let service: MockNotificationActionsService
77

@@ -23,7 +23,6 @@ final class MarkAsSpamActionTests: XCTestCase {
2323

2424
private var action: MarkAsSpam?
2525
let utility = NotificationUtility()
26-
private var testContextManager: ContextManagerMock!
2726

2827
private struct Constants {
2928
static let initialStatus: Bool = false
@@ -32,8 +31,7 @@ final class MarkAsSpamActionTests: XCTestCase {
3231
override func setUp() {
3332
super.setUp()
3433
utility.setUp()
35-
testContextManager = ContextManagerMock()
36-
action = TestableMarkAsSpam(on: Constants.initialStatus, coreDataStack: testContextManager)
34+
action = TestableMarkAsSpam(on: Constants.initialStatus, coreDataStack: contextManager)
3735
makeNetworkAvailable()
3836
}
3937

WordPress/WordPressTest/StatsTestCase.swift

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,7 @@ import CoreData
33
@testable import WordPress
44

55
// A thin wrapper round XCTestCase for Stats test to avoid repeating boilerplate.
6-
class StatsTestCase: XCTestCase {
7-
8-
fileprivate var manager: ContextManagerMock!
9-
10-
override func setUp() {
11-
manager = ContextManagerMock()
12-
}
13-
14-
var mainContext: NSManagedObjectContext {
15-
return manager.mainContext
16-
}
6+
class StatsTestCase: CoreDataTestCase {
177

188
@discardableResult func createStatsRecord(in context: NSManagedObjectContext,
199
type: StatsRecordType,

0 commit comments

Comments
 (0)