1
0
mirror of https://github.com/nicoverbruggen/phpmon.git synced 2025-11-05 12:30:07 +01:00

Improve tests

This commit is contained in:
2025-09-26 21:13:06 +02:00
parent 21296d09aa
commit af13913d9e
6 changed files with 42 additions and 56 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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")

View File

@@ -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'

View File

@@ -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)