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