mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-12-21 03:10:06 +01:00
✅ Improve tests
This commit is contained in:
@@ -3880,7 +3880,7 @@
|
|||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_FILE = "";
|
INFOPLIST_FILE = "";
|
||||||
MACOSX_DEPLOYMENT_TARGET = 12.4;
|
MACOSX_DEPLOYMENT_TARGET = 13.5;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.feature-tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.feature-tests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
@@ -3898,7 +3898,7 @@
|
|||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_FILE = "";
|
INFOPLIST_FILE = "";
|
||||||
MACOSX_DEPLOYMENT_TARGET = 12.4;
|
MACOSX_DEPLOYMENT_TARGET = 13.5;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.feature-tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.feature-tests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
@@ -3915,7 +3915,7 @@
|
|||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 12.4;
|
MACOSX_DEPLOYMENT_TARGET = 13.5;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.ui-tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.ui-tests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
@@ -3933,7 +3933,7 @@
|
|||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 12.4;
|
MACOSX_DEPLOYMENT_TARGET = 13.5;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.ui-tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.ui-tests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
@@ -4100,7 +4100,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
"@loader_path/../Frameworks",
|
"@loader_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 12.4;
|
MACOSX_DEPLOYMENT_TARGET = 13.5;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.unit-tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.unit-tests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
@@ -4116,7 +4116,7 @@
|
|||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_FILE = "";
|
INFOPLIST_FILE = "";
|
||||||
MACOSX_DEPLOYMENT_TARGET = 12.4;
|
MACOSX_DEPLOYMENT_TARGET = 13.5;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.feature-tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.feature-tests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
@@ -4133,7 +4133,7 @@
|
|||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 12.4;
|
MACOSX_DEPLOYMENT_TARGET = 13.5;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.ui-tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.ui-tests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
@@ -4293,7 +4293,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
"@loader_path/../Frameworks",
|
"@loader_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 12.4;
|
MACOSX_DEPLOYMENT_TARGET = 13.5;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.unit-tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.unit-tests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
@@ -4309,7 +4309,7 @@
|
|||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_FILE = "";
|
INFOPLIST_FILE = "";
|
||||||
MACOSX_DEPLOYMENT_TARGET = 12.4;
|
MACOSX_DEPLOYMENT_TARGET = 13.5;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.feature-tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.feature-tests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
@@ -4326,7 +4326,7 @@
|
|||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 12.4;
|
MACOSX_DEPLOYMENT_TARGET = 13.5;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.ui-tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.ui-tests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
@@ -4349,7 +4349,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
"@loader_path/../Frameworks",
|
"@loader_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 12.4;
|
MACOSX_DEPLOYMENT_TARGET = 13.5;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.unit-tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.unit-tests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
@@ -4369,7 +4369,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
"@loader_path/../Frameworks",
|
"@loader_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 12.4;
|
MACOSX_DEPLOYMENT_TARGET = 13.5;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.unit-tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.unit-tests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
|
|||||||
@@ -140,6 +140,12 @@ public struct TestableConfiguration: Codable {
|
|||||||
Log.info("Applying fake Valet domain interactor...")
|
Log.info("Applying fake Valet domain interactor...")
|
||||||
ValetInteractor.useFake()
|
ValetInteractor.useFake()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clear volatile app state for tests
|
||||||
|
UserDefaults.standard.removeObject(forKey: PersistentAppState.lastAutomaticUpdateCheck.rawValue)
|
||||||
|
|
||||||
|
// Set variable to tell app we're testin'
|
||||||
|
App.hasLoadedTestableConfiguration = true
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Persist and load
|
// MARK: Persist and load
|
||||||
|
|||||||
@@ -14,6 +14,9 @@ class App {
|
|||||||
/** The static app instance. Accessible at any time. */
|
/** The static app instance. Accessible at any time. */
|
||||||
static let shared = App()
|
static let shared = App()
|
||||||
|
|
||||||
|
/** Use to determine whether a loaded testable configuration is being used. */
|
||||||
|
static var hasLoadedTestableConfiguration: Bool = false
|
||||||
|
|
||||||
/** Retrieve the version number from the main info dictionary, Info.plist. */
|
/** Retrieve the version number from the main info dictionary, Info.plist. */
|
||||||
static var version: String {
|
static var version: String {
|
||||||
let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String
|
let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String
|
||||||
|
|||||||
@@ -24,13 +24,11 @@ struct CaskFile {
|
|||||||
return self.properties["version"]!
|
return self.properties["version"]!
|
||||||
}
|
}
|
||||||
|
|
||||||
public static func from(url: URL) async -> CaskFile? {
|
private static func loadFromApi(_ url: URL) async -> String {
|
||||||
var string: String?
|
if App.hasLoadedTestableConfiguration {
|
||||||
|
return await Shell.pipe("curl -s --max-time 10 '\(url.absoluteString)'").out
|
||||||
if url.scheme == "file" {
|
|
||||||
string = try? String(contentsOf: url)
|
|
||||||
} else {
|
} else {
|
||||||
string = await Shell.pipe("""
|
return await Shell.pipe("""
|
||||||
curl -s --max-time 10 \
|
curl -s --max-time 10 \
|
||||||
-H "User-Agent: phpmon \(App.shortVersion)" \
|
-H "User-Agent: phpmon \(App.shortVersion)" \
|
||||||
-H "X-phpmon-version: \(App.bundleVersion)" \
|
-H "X-phpmon-version: \(App.bundleVersion)" \
|
||||||
@@ -39,6 +37,16 @@ struct CaskFile {
|
|||||||
'\(url.absoluteString)'
|
'\(url.absoluteString)'
|
||||||
""").out
|
""").out
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static func from(url: URL) async -> CaskFile? {
|
||||||
|
var string: String?
|
||||||
|
|
||||||
|
if url.scheme == "file" {
|
||||||
|
string = try? String(contentsOf: url)
|
||||||
|
} else {
|
||||||
|
string = await CaskFile.loadFromApi(url)
|
||||||
|
}
|
||||||
|
|
||||||
guard let string else {
|
guard let string else {
|
||||||
Log.err("The content of the URL for the CaskFile could not be retrieved")
|
Log.err("The content of the URL for the CaskFile could not be retrieved")
|
||||||
|
|||||||
@@ -138,14 +138,7 @@ class TestableConfigurations {
|
|||||||
: .instant(ShellStrings.shared.brewServicesAsRoot),
|
: .instant(ShellStrings.shared.brewServicesAsRoot),
|
||||||
"/opt/homebrew/bin/brew services info --all --json"
|
"/opt/homebrew/bin/brew services info --all --json"
|
||||||
: .instant(ShellStrings.shared.brewServicesAsUser),
|
: .instant(ShellStrings.shared.brewServicesAsUser),
|
||||||
"""
|
"curl -s --max-time 10 '\(Constants.Urls.UpdateCheckEndpoint.absoluteString)'"
|
||||||
curl -s --max-time 10 \
|
|
||||||
-H "User-Agent: phpmon \(App.shortVersion)" \
|
|
||||||
-H "X-phpmon-version: \(App.bundleVersion)" \
|
|
||||||
-H "X-phpmon-os-version: \(App.macVersion)" \
|
|
||||||
-H "X-phpmon-bundle-id: \(App.identifier)" \
|
|
||||||
'\(Constants.Urls.UpdateCheckEndpoint.absoluteString)'
|
|
||||||
"""
|
|
||||||
: .delayed(0.5, """
|
: .delayed(0.5, """
|
||||||
cask 'phpmon-dev' do
|
cask 'phpmon-dev' do
|
||||||
depends_on formula: 'gnu-sed'
|
depends_on formula: 'gnu-sed'
|
||||||
|
|||||||
@@ -32,14 +32,7 @@ final class UpdateCheckTest: UITestCase {
|
|||||||
|
|
||||||
// Ensure an update is available
|
// Ensure an update is available
|
||||||
configuration.shellOutput[
|
configuration.shellOutput[
|
||||||
"""
|
"curl -s --max-time 10 '\(Constants.Urls.UpdateCheckEndpoint.absoluteString)'"
|
||||||
curl -s --max-time 10 \
|
|
||||||
-H "User-Agent: phpmon \(App.shortVersion)" \
|
|
||||||
-H "X-phpmon-version: \(App.bundleVersion)" \
|
|
||||||
-H "X-phpmon-os-version: \(App.macVersion)" \
|
|
||||||
-H "X-phpmon-bundle-id: \(App.identifier)" \
|
|
||||||
'\(Constants.Urls.UpdateCheckEndpoint.absoluteString)'
|
|
||||||
"""
|
|
||||||
] = .delayed(0.5, """
|
] = .delayed(0.5, """
|
||||||
cask 'phpmon-dev' do
|
cask 'phpmon-dev' do
|
||||||
depends_on formula: 'gnu-sed'
|
depends_on formula: 'gnu-sed'
|
||||||
@@ -57,8 +50,9 @@ final class UpdateCheckTest: UITestCase {
|
|||||||
|
|
||||||
let app = launch(openMenu: false, with: configuration)
|
let app = launch(openMenu: false, with: configuration)
|
||||||
|
|
||||||
// Expect to see the content of the appropriate alert box
|
// Expect to see the content of the appropriate alert box, but this may take a while; if this test fails try increasing the timeout
|
||||||
assertExists(app.staticTexts["updater.alerts.newer_version_available.title".localized("99.0.0 (9999)")], 3.0)
|
let timeout: TimeInterval = 10.0
|
||||||
|
assertExists(app.staticTexts["updater.alerts.newer_version_available.title".localized("99.0.0 (9999)")], timeout)
|
||||||
assertExists(app.buttons["updater.alerts.buttons.install".localized])
|
assertExists(app.buttons["updater.alerts.buttons.install".localized])
|
||||||
assertExists(app.buttons["updater.alerts.buttons.dismiss".localized])
|
assertExists(app.buttons["updater.alerts.buttons.dismiss".localized])
|
||||||
}
|
}
|
||||||
@@ -70,16 +64,7 @@ final class UpdateCheckTest: UITestCase {
|
|||||||
configuration.preferenceOverrides[.automaticBackgroundUpdateCheck] = false
|
configuration.preferenceOverrides[.automaticBackgroundUpdateCheck] = false
|
||||||
|
|
||||||
// Ensure an update is available
|
// Ensure an update is available
|
||||||
configuration.shellOutput[
|
configuration.shellOutput["curl -s --max-time 10 '\(Constants.Urls.UpdateCheckEndpoint.absoluteString)'"] = .delayed(0.5, """
|
||||||
"""
|
|
||||||
curl -s --max-time 10 \
|
|
||||||
-H "User-Agent: phpmon \(App.shortVersion)" \
|
|
||||||
-H "X-phpmon-version: \(App.bundleVersion)" \
|
|
||||||
-H "X-phpmon-os-version: \(App.macVersion)" \
|
|
||||||
-H "X-phpmon-bundle-id: \(App.identifier)" \
|
|
||||||
'\(Constants.Urls.UpdateCheckEndpoint.absoluteString)'
|
|
||||||
"""
|
|
||||||
] = .delayed(0.5, """
|
|
||||||
cask 'phpmon-dev' do
|
cask 'phpmon-dev' do
|
||||||
depends_on formula: 'gnu-sed'
|
depends_on formula: 'gnu-sed'
|
||||||
|
|
||||||
@@ -117,16 +102,7 @@ final class UpdateCheckTest: UITestCase {
|
|||||||
configuration.preferenceOverrides[.automaticBackgroundUpdateCheck] = false
|
configuration.preferenceOverrides[.automaticBackgroundUpdateCheck] = false
|
||||||
|
|
||||||
// Ensure an update is available
|
// Ensure an update is available
|
||||||
configuration.shellOutput[
|
configuration.shellOutput["curl -s --max-time 10 '\(Constants.Urls.UpdateCheckEndpoint.absoluteString)'"] = .delayed(0.5, "404 PAGE NOT FOUND")
|
||||||
"""
|
|
||||||
curl -s --max-time 10 \
|
|
||||||
-H "User-Agent: phpmon \(App.shortVersion)" \
|
|
||||||
-H "X-phpmon-version: \(App.bundleVersion)" \
|
|
||||||
-H "X-phpmon-os-version: \(App.macVersion)" \
|
|
||||||
-H "X-phpmon-bundle-id: \(App.identifier)" \
|
|
||||||
'\(Constants.Urls.UpdateCheckEndpoint.absoluteString)'
|
|
||||||
"""
|
|
||||||
] = .delayed(0.5, "404 PAGE NOT FOUND")
|
|
||||||
|
|
||||||
// Wait for the menu to open and search for updates
|
// Wait for the menu to open and search for updates
|
||||||
let app = launch(openMenu: true, with: configuration)
|
let app = launch(openMenu: true, with: configuration)
|
||||||
|
|||||||
Reference in New Issue
Block a user