Skip to content

Commit

Permalink
✅ Add UI test for PHP version manager
Browse files Browse the repository at this point in the history
  • Loading branch information
nicoverbruggen committed Sep 10, 2023
1 parent f5d0ad2 commit e40b9fe
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 7 deletions.
18 changes: 12 additions & 6 deletions phpmon/Common/Testables/TestableConfiguration.swift
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ public struct TestableConfiguration: Codable {
self.filesystem = self.filesystem.merging([
"/opt/homebrew/opt/php@\(version.short)/bin/php"
: .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php"),
"/opt/homebrew/opt/php@\(version.short)/bin/php-config"
: .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php-config"),
"/opt/homebrew/Cellar/php/\(version.long)/bin/php"
: .fake(.binary),
"/opt/homebrew/Cellar/php/\(version.long)/bin/php-config"
Expand All @@ -70,6 +72,9 @@ public struct TestableConfiguration: Codable {
: .fake(.text)
]) { (_, new) in new }

self.commandOutput["/opt/homebrew/opt/php@\(version.short)/bin/php-config --version"]
= version.long

if primary {
self.shellOutput["ls /opt/homebrew/opt | grep php"]
= .instant("php")
Expand All @@ -80,20 +85,21 @@ public struct TestableConfiguration: Codable {
self.filesystem["/opt/homebrew/bin/php"]
= .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php")
self.filesystem["/opt/homebrew/bin/php-config"]
= .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php-config")
= .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.short)/bin/php-config")
self.commandOutput["/opt/homebrew/bin/php-config --version"]
= version.long
self.commandOutput["/opt/homebrew/bin/php -r echo php_ini_scanned_files();"] =
"""
/opt/homebrew/etc/php/\(version.short)/conf.d/php-memory-limits.ini,
"""
} else {

self.shellOutput["ls /opt/homebrew/opt | grep php@"] =
BatchFakeShellOutput.instant(
self.secondaryPhpVersions
.map { "php@\($0.short)" }
.joined(separator: "\n")
)
BatchFakeShellOutput.instant(
self.secondaryPhpVersions
.map { "php@\($0.short)" }
.joined(separator: "\n")
)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class BrewFormulaeHandler: HandlesBrewFormulae {

return Brew.phpVersionFormulae.map { (version, formula) in
let fullVersion = PhpEnvironments.shared.cachedPhpInstallations[version]?.versionNumber.text

var upgradeVersion: String?

if let version = fullVersion {
Expand Down
18 changes: 17 additions & 1 deletion tests/Shared/TestableConfigurations.swift
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,22 @@ class TestableConfigurations {
: .delayed(0.2, "OK"),
"ln -sF ~/.config/valet/valet82.sock ~/.config/valet/valet.sock"
: .instant("OK"),
"/opt/homebrew/bin/brew update >/dev/null && /opt/homebrew/bin/brew outdated --json --formulae": .delayed(2.0, """
{
"formulae": [
{
"name": "php",
"installed_versions": [
"8.2.6"
],
"current_version": "8.2.11",
"pinned": false,
"pinned_version": null
}
],
"casks": []
}
""")
],
commandOutput: [
"/opt/homebrew/bin/php -r echo ini_get('memory_limit');": "512M",
Expand All @@ -173,7 +189,7 @@ class TestableConfigurations {
.automaticBackgroundUpdateCheck: false
],
phpVersions: [
VersionNumber(major: 8, minor: 2, patch: 0),
VersionNumber(major: 8, minor: 2, patch: 6),
VersionNumber(major: 8, minor: 1, patch: 0),
VersionNumber(major: 8, minor: 0, patch: 0)
]
Expand Down
25 changes: 25 additions & 0 deletions tests/ui/MainMenuTest.swift
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,31 @@ final class MainMenuTest: UITestCase {
click(app.buttons["Notifications"])
}

final func test_can_open_php_version_manager() throws {
let app = launch(openMenu: true)
app.mainMenuItem(withText: "mi_php_version_manager".localized).click()

// Should display loader
assertExists(app.staticTexts["phpman.busy.title".localized], 1)

// After loading, should display PHP 8.2
assertExists(app.staticTexts["PHP 8.2"], 5)

// Should also display pre-release version
assertExists(app.staticTexts["PHP 8.3"])
assertExists(app.staticTexts["phpman.version.prerelease".localized.uppercased()])
assertExists(app.staticTexts["phpman.version.available_for_installation".localized])

// But not PHP 8.4 (yet)
assertNotExists(app.staticTexts["PHP 8.4"])

// Also, PHP 8.2 should have an update available
assertExists(app.staticTexts["phpman.version.has_update".localized(
"8.2.6",
"8.2.11"
)], 5)
}

final func test_can_quit_app() throws {
let app = launch(openMenu: true)
app.mainMenuItem(withText: "mi_quit".localized).click()
Expand Down

0 comments on commit e40b9fe

Please sign in to comment.