mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-08-07 03:50:08 +02:00
🚀 Version 5.8.0
This commit is contained in:
@ -16,26 +16,14 @@ final class DomainsListTest: UITestCase {
|
||||
|
||||
override func tearDownWithError() throws {}
|
||||
|
||||
private func openMenu() -> XCPMApplication {
|
||||
let app = XCPMApplication()
|
||||
app.withConfiguration(TestableConfigurations.working)
|
||||
app.launch()
|
||||
|
||||
// Note: If this fails here, make sure the menu bar item can be displayed
|
||||
// If you use Bartender or something like this, this item may be hidden and tests will fail
|
||||
app.statusItems.firstMatch.click()
|
||||
|
||||
return app
|
||||
}
|
||||
|
||||
final func test_can_always_open_domains_list() throws {
|
||||
let app = openMenu()
|
||||
let app = launch(openMenu: true)
|
||||
|
||||
app.menuItems["mi_domain_list".localized].click()
|
||||
}
|
||||
|
||||
final func test_can_filter_domains_list() throws {
|
||||
let app = openMenu()
|
||||
let app = launch(openMenu: true)
|
||||
|
||||
app.menuItems["mi_domain_list".localized].click()
|
||||
|
||||
@ -58,7 +46,7 @@ final class DomainsListTest: UITestCase {
|
||||
}
|
||||
|
||||
final func test_can_tap_add_domain_button() throws {
|
||||
let app = openMenu()
|
||||
let app = launch(openMenu: true)
|
||||
|
||||
app.menuItems["mi_domain_list".localized].click()
|
||||
|
||||
|
@ -10,9 +10,33 @@ import XCTest
|
||||
|
||||
class UITestCase: XCTestCase {
|
||||
|
||||
/** Launches the app and opens the menu. */
|
||||
public func launch(
|
||||
openMenu: Bool = false,
|
||||
with configuration: TestableConfiguration? = nil
|
||||
) -> XCPMApplication {
|
||||
let app = XCPMApplication()
|
||||
let config = configuration ?? TestableConfigurations.working
|
||||
app.withConfiguration(config)
|
||||
app.launch()
|
||||
|
||||
// Note: If this fails here, make sure the menu bar item can be displayed
|
||||
// If you use Bartender or something like this, this item may be hidden and tests will fail
|
||||
if openMenu {
|
||||
app.statusItems.firstMatch.click()
|
||||
}
|
||||
|
||||
return app
|
||||
}
|
||||
|
||||
/** Checks if a single element exists. */
|
||||
public func assertExists(_ element: XCUIElement, _ timeout: TimeInterval = 0.05) {
|
||||
XCTAssert(element.waitForExistence(timeout: timeout))
|
||||
XCTAssertTrue(element.waitForExistence(timeout: timeout))
|
||||
}
|
||||
|
||||
/** Checks if a single element fails to exist. */
|
||||
public func assertNotExists(_ element: XCUIElement, _ timeout: TimeInterval = 0.05) {
|
||||
XCTAssertFalse(element.waitForExistence(timeout: timeout))
|
||||
}
|
||||
|
||||
/** Checks if all elements exist. */
|
||||
|
121
tests/ui/UpdateCheckTest.swift
Normal file
121
tests/ui/UpdateCheckTest.swift
Normal file
@ -0,0 +1,121 @@
|
||||
//
|
||||
// UpdateCheckTest.swift
|
||||
// UI Tests
|
||||
//
|
||||
// Created by Nico Verbruggen on 13/03/2023.
|
||||
// Copyright © 2023 Nico Verbruggen. All rights reserved.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
|
||||
final class UpdateCheckTest: UITestCase {
|
||||
|
||||
override func setUpWithError() throws {
|
||||
continueAfterFailure = false
|
||||
}
|
||||
|
||||
override func tearDownWithError() throws {}
|
||||
|
||||
final func test_can_check_for_updates_with_no_new_update() throws {
|
||||
let app = launch(openMenu: true)
|
||||
app.menuItems["mi_check_for_updates".localized].click()
|
||||
|
||||
assertExists(app.staticTexts["updater.alerts.is_latest_version.title".localized], 1.0)
|
||||
assertExists(app.buttons["generic.ok".localized])
|
||||
}
|
||||
|
||||
final func test_will_prompt_at_launch_new_version_available() throws {
|
||||
var configuration = TestableConfigurations.working
|
||||
|
||||
// Ensure automatic check is enabled
|
||||
configuration.preferenceOverrides[.automaticBackgroundUpdateCheck] = true
|
||||
|
||||
// Ensure an update is available
|
||||
configuration.shellOutput[
|
||||
"curl -s --max-time 10 '\(Constants.Urls.DevBuildCaskFile.absoluteString)'"
|
||||
] = .delayed(0.5, """
|
||||
cask 'phpmon-dev' do
|
||||
depends_on formula: 'gnu-sed'
|
||||
|
||||
version '99.0.0_9999'
|
||||
sha256 '1cb147bd1b1fbd52971d90dff577465b644aee7c878f15ede57f46e8f217067a'
|
||||
|
||||
url 'https://github.com/nicoverbruggen/phpmon/releases/download/v99.0/phpmon-dev.zip'
|
||||
appcast 'https://github.com/nicoverbruggen/phpmon/releases.atom'
|
||||
name 'PHP Monitor DEV'
|
||||
homepage 'https://phpmon.app'
|
||||
|
||||
app 'PHP Monitor DEV.app', target: "PHP Monitor DEV.app"
|
||||
end
|
||||
""")
|
||||
|
||||
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)")], 2)
|
||||
assertExists(app.buttons["updater.alerts.buttons.install".localized])
|
||||
assertExists(app.buttons["updater.alerts.buttons.dismiss".localized])
|
||||
}
|
||||
|
||||
final func test_will_require_manual_search_for_update() throws {
|
||||
var configuration = TestableConfigurations.working
|
||||
|
||||
// Ensure automatic check is disabled
|
||||
configuration.preferenceOverrides[.automaticBackgroundUpdateCheck] = false
|
||||
|
||||
// Ensure an update is available
|
||||
configuration.shellOutput[
|
||||
"curl -s --max-time 10 '\(Constants.Urls.DevBuildCaskFile.absoluteString)'"
|
||||
] = .delayed(0.5, """
|
||||
cask 'phpmon-dev' do
|
||||
depends_on formula: 'gnu-sed'
|
||||
|
||||
version '99.0.0_9999'
|
||||
sha256 '1cb147bd1b1fbd52971d90dff577465b644aee7c878f15ede57f46e8f217067a'
|
||||
|
||||
url 'https://github.com/nicoverbruggen/phpmon/releases/download/v99.0/phpmon-dev.zip'
|
||||
appcast 'https://github.com/nicoverbruggen/phpmon/releases.atom'
|
||||
name 'PHP Monitor DEV'
|
||||
homepage 'https://phpmon.app'
|
||||
|
||||
app 'PHP Monitor DEV.app', target: "PHP Monitor DEV.app"
|
||||
end
|
||||
""")
|
||||
|
||||
// Wait for the menu to open and search for updates
|
||||
let app = launch(openMenu: false, with: configuration)
|
||||
|
||||
// The check should not happen if the preference is disabled
|
||||
assertNotExists(app.staticTexts["updater.alerts.newer_version_available.title".localized("99.0.0 (9999)")], 2)
|
||||
|
||||
// Open the menu and check manually
|
||||
app.statusItems.firstMatch.click()
|
||||
app.menuItems["mi_check_for_updates".localized].click()
|
||||
|
||||
// Expect to see the content of the appropriate alert box
|
||||
assertExists(app.staticTexts["updater.alerts.newer_version_available.title".localized("99.0.0 (9999)")], 2)
|
||||
assertExists(app.buttons["updater.alerts.buttons.install".localized])
|
||||
assertExists(app.buttons["updater.alerts.buttons.dismiss".localized])
|
||||
}
|
||||
|
||||
final func test_could_not_parse_version() throws {
|
||||
var configuration = TestableConfigurations.working
|
||||
|
||||
// Ensure automatic check is disabled
|
||||
configuration.preferenceOverrides[.automaticBackgroundUpdateCheck] = false
|
||||
|
||||
// Ensure an update is available
|
||||
configuration.shellOutput[
|
||||
"curl -s --max-time 10 '\(Constants.Urls.DevBuildCaskFile.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)
|
||||
app.menuItems["mi_check_for_updates".localized].click()
|
||||
|
||||
// Expect to see the content of the appropriate alert box
|
||||
assertExists(app.staticTexts["updater.alerts.cannot_check_for_update.title".localized], 2)
|
||||
assertExists(app.buttons["generic.ok".localized])
|
||||
assertExists(app.buttons["updater.alerts.buttons.releases_on_github".localized])
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user