diff --git a/AutoCat2.xcodeproj/project.pbxproj b/AutoCat2.xcodeproj/project.pbxproj index 1b5d0fb..d017fc2 100644 --- a/AutoCat2.xcodeproj/project.pbxproj +++ b/AutoCat2.xcodeproj/project.pbxproj @@ -31,6 +31,8 @@ 7A28283327E7263B0049BDBF /* UIStackView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A28283227E7263B0049BDBF /* UIStackView.swift */; }; 7A28283627E74C110049BDBF /* SwiftEntryKit in Frameworks */ = {isa = PBXBuildFile; productRef = 7A28283527E74C110049BDBF /* SwiftEntryKit */; }; 7A28283827E74D930049BDBF /* CheckController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A28283727E74D930049BDBF /* CheckController.swift */; }; + 7A2B6CD427FCE93C00519F1E /* TestSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A2B6CD327FCE93C00519F1E /* TestSettings.swift */; }; + 7A2B6CD727FCED0500519F1E /* XCUIApplication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A2B6CD527FCEC8600519F1E /* XCUIApplication.swift */; }; 7A36E55C27FB55570025AACB /* Testing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A36E55B27FB55570025AACB /* Testing.swift */; }; 7A36E55D27FB5A220025AACB /* ApiMethodMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A558AAA27FA3CCF001A18EE /* ApiMethodMock.swift */; }; 7A36E55E27FB5A260025AACB /* LoginMethodMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A558AA927FA3CCF001A18EE /* LoginMethodMock.swift */; }; @@ -160,6 +162,8 @@ 7A28283027E721A70049BDBF /* UIView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIView.swift; sourceTree = ""; }; 7A28283227E7263B0049BDBF /* UIStackView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIStackView.swift; sourceTree = ""; }; 7A28283727E74D930049BDBF /* CheckController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckController.swift; sourceTree = ""; }; + 7A2B6CD327FCE93C00519F1E /* TestSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestSettings.swift; sourceTree = ""; }; + 7A2B6CD527FCEC8600519F1E /* XCUIApplication.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XCUIApplication.swift; sourceTree = ""; }; 7A36E55B27FB55570025AACB /* Testing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Testing.swift; sourceTree = ""; }; 7A36E56227FB5BEB0025AACB /* TestError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestError.swift; sourceTree = ""; }; 7A49F49F27D4061900AEAAE0 /* AutoCat2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AutoCat2.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -337,12 +341,21 @@ path = ACTabBar; sourceTree = ""; }; + 7A2B6CD827FCED6D00519F1E /* Extensions */ = { + isa = PBXGroup; + children = ( + 7A2B6CD527FCEC8600519F1E /* XCUIApplication.swift */, + ); + path = Extensions; + sourceTree = ""; + }; 7A36E55A27FB54610025AACB /* Testing */ = { isa = PBXGroup; children = ( 7A558AA727FA3CCF001A18EE /* Api */, 7A36E55B27FB55570025AACB /* Testing.swift */, 7A36E56227FB5BEB0025AACB /* TestError.swift */, + 7A2B6CD327FCE93C00519F1E /* TestSettings.swift */, ); path = Testing; sourceTree = ""; @@ -401,6 +414,7 @@ 7A49F4C227D4061B00AEAAE0 /* AutoCat2UITests */ = { isa = PBXGroup; children = ( + 7A2B6CD827FCED6D00519F1E /* Extensions */, 7A49F4C327D4061B00AEAAE0 /* AutoCat2UITests.swift */, 7A49F4C527D4061B00AEAAE0 /* AutoCat2UITestsLaunchTests.swift */, ); @@ -815,6 +829,7 @@ buildActionMask = 2147483647; files = ( 7A49F4C627D4061B00AEAAE0 /* AutoCat2UITestsLaunchTests.swift in Sources */, + 7A2B6CD727FCED0500519F1E /* XCUIApplication.swift in Sources */, 7A49F4C427D4061B00AEAAE0 /* AutoCat2UITests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -850,6 +865,7 @@ 7A49F51527D40C6100AEAAE0 /* AutoCat2.xcdatamodeld in Sources */, 929EDE7F27F89C3000E55F65 /* VEngine.swift in Sources */, 929EDE8727F8E11E00E55F65 /* VOsago.swift in Sources */, + 7A2B6CD427FCE93C00519F1E /* TestSettings.swift in Sources */, 7A49F50E27D406CB00AEAAE0 /* User.swift in Sources */, 7A36E56127FB5A330025AACB /* ApiMethodMockProtocol.swift in Sources */, 7A36E56027FB5A2F0025AACB /* MockURLProtocol.swift in Sources */, diff --git a/AutoCat2.xcodeproj/xcuserdata/selim.xcuserdatad/xcschemes/xcschememanagement.plist b/AutoCat2.xcodeproj/xcuserdata/selim.xcuserdatad/xcschemes/xcschememanagement.plist index 6e1ef2e..7c5d819 100644 --- a/AutoCat2.xcodeproj/xcuserdata/selim.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/AutoCat2.xcodeproj/xcuserdata/selim.xcuserdatad/xcschemes/xcschememanagement.plist @@ -9,57 +9,59 @@ orderHint 0 - AutoCat2.xcscheme_^#shared#^_ - - orderHint - 1 - AutoCatCore.xcscheme_^#shared#^_ orderHint - 7 + 1 DifferenceKit (Playground) 1.xcscheme isShown - + orderHint - 2 + 3 DifferenceKit (Playground) 2.xcscheme isShown - + orderHint - 3 + 4 DifferenceKit (Playground).xcscheme isShown - + orderHint - 1 + 2 SwiftDate (Playground) 1.xcscheme isShown - + orderHint - 5 + 6 SwiftDate (Playground) 2.xcscheme isShown - + orderHint - 6 + 7 SwiftDate (Playground).xcscheme isShown - + orderHint - 4 + 5 + + AutoCat2UITests.testExample.xcscheme + + isShown + + orderHint + 8 SuppressBuildableAutocreation @@ -67,7 +69,7 @@ 7A49F4D627D4064500AEAAE0 primary - + diff --git a/AutoCat2/Components/TableView/CoreDataSource.swift b/AutoCat2/Components/TableView/CoreDataSource.swift index a75aeda..0781f1c 100644 --- a/AutoCat2/Components/TableView/CoreDataSource.swift +++ b/AutoCat2/Components/TableView/CoreDataSource.swift @@ -24,7 +24,6 @@ class CoreDataSource, Item> private let fetchedResults: NSFetchedResultsController private var sections: [DateSection] = [] @@ -32,13 +31,6 @@ class CoreDataSource { fetchRequest.sortDescriptors = [] self.fetchedResults = NSFetchedResultsController(fetchRequest: fetchRequest, @@ -51,7 +43,7 @@ class CoreDataSource, didChangeContentWith snapshot: NSDiffableDataSourceSnapshotReference) { -// -// let snapshotBridged = snapshot as NSDiffableDataSourceSnapshot, Item> -// dataSource.apply(snapshotBridged) -// } + func controllerWillChangeContent(_ controller: NSFetchedResultsController) { } diff --git a/AutoCat2/Controllers/MainTabController.swift b/AutoCat2/Controllers/MainTabController.swift index fb8ce4a..148dd69 100644 --- a/AutoCat2/Controllers/MainTabController.swift +++ b/AutoCat2/Controllers/MainTabController.swift @@ -25,6 +25,7 @@ class MainTabController: UITabBarController, UITabBarControllerDelegate { settingsController.tabBarItem = UITabBarItem(title: "Settings", image: UIImage(systemName: "gear"), selectedImage: nil) addController.tabBarItem = UITabBarItem(title: "New", image: UIImage(systemName: "plus"), selectedImage: nil) + addController.tabBarItem.accessibilityIdentifier = "NewCheckButton" self.viewControllers = [historyNavController, addController, settingsController] } diff --git a/AutoCat2UITests/AutoCat2UITests.swift b/AutoCat2UITests/AutoCat2UITests.swift index 4176a50..7bf4770 100644 --- a/AutoCat2UITests/AutoCat2UITests.swift +++ b/AutoCat2UITests/AutoCat2UITests.swift @@ -29,16 +29,6 @@ class AutoCat2UITests: XCTestCase { app.launchEnvironment["testKind"] = Testing.TestKind.addNumberSuccess.rawValue app.launch() - let loginButton = app.buttons["loginButton"] - guard loginButton.waitForExistence(timeout: 5) else { - XCTFail("Login button not found") - return - } - - app.textFields["emailTextField"].tap() - app.textFields["emailTextField"].typeText(testLogin) - app.secureTextFields["passwordTextField"].tap() - app.secureTextFields["passwordTextField"].typeText(testPassword) - loginButton.tap() + app.auth(login: testLogin, password: testPassword) } } diff --git a/AutoCat2UITests/Extensions/XCUIApplication.swift b/AutoCat2UITests/Extensions/XCUIApplication.swift new file mode 100644 index 0000000..014d882 --- /dev/null +++ b/AutoCat2UITests/Extensions/XCUIApplication.swift @@ -0,0 +1,30 @@ +// +// XCUIApplication.swift +// AutoCat2UITests +// +// Created by Selim Mustafaev on 06.04.2022. +// + +import Foundation +import XCTest + +extension XCUIApplication { + + func auth(login: String, password: String) { + + let loginButton = buttons["loginButton"] + guard loginButton.waitForExistence(timeout: 3) else { + XCTFail("Login button not found") + return + } + + textFields["emailTextField"].tap() + textFields["emailTextField"].typeText(login) + secureTextFields["passwordTextField"].tap() + secureTextFields["passwordTextField"].typeText(password) + loginButton.tap() + + let newButtonFound = buttons["NewCheckButton"].waitForExistence(timeout: 3) + XCTAssert(newButtonFound, "New button not found") + } +} diff --git a/AutoCatCore/Models/Settings.swift b/AutoCatCore/Models/Settings.swift index 29bcbd6..471c1f7 100644 --- a/AutoCatCore/Models/Settings.swift +++ b/AutoCatCore/Models/Settings.swift @@ -13,9 +13,8 @@ public protocol SettingsProtocol { public class Settings: ObservableObject, SettingsProtocol { private let defaults: UserDefaults - public static let shared = Settings() + public static var shared: SettingsProtocol = Testing.isUITesting ? TestSettings() : Settings() - @Published public var user: User { didSet { if let json = try? JSONEncoder().encode(self.user) { diff --git a/AutoCatCore/Services/StorageService.swift b/AutoCatCore/Services/StorageService.swift index 204b0ce..1b44328 100644 --- a/AutoCatCore/Services/StorageService.swift +++ b/AutoCatCore/Services/StorageService.swift @@ -18,7 +18,6 @@ public class StorageService: StorageServiceProtocol { if let instance = StorageService.instance { return instance } else { - print("!!!!!!!!!!!!!!!!!!!!!!!!! StorageService init") let service = StorageService() try await service.loadPersistentStores() StorageService.instance = service diff --git a/AutoCatCore/Testing/TestSettings.swift b/AutoCatCore/Testing/TestSettings.swift new file mode 100644 index 0000000..637f7e4 --- /dev/null +++ b/AutoCatCore/Testing/TestSettings.swift @@ -0,0 +1,18 @@ +// +// TestSettings.swift +// AutoCatCore +// +// Created by Selim Mustafaev on 06.04.2022. +// + +import Foundation + +public class TestSettings: SettingsProtocol { + + public var user: User = User() + public var recognizeAlternativeOrder: Bool = false + public var recognizeShortenedNumbers: Bool = false + public var defaultRegion: String = "" + public var recordBeep: Bool = false + public var showDebugInfo: Bool = false +}