import XCTest /// Verifies that the Overview export/share menu is only available once the /// system actually contains something worth exporting. final class SystemExportButtonUITests: XCTestCase { override func setUpWithError() throws { try super.setUpWithError() continueAfterFailure = false XCUIDevice.shared.orientation = .portrait } @MainActor func testExportIsDisabledForSystemWithoutComponents() throws { let app = launch(arguments: ["--uitest-reset-data"]) let createSystemButton = app.buttons["create-system-button"] XCTAssertTrue(createSystemButton.waitForExistence(timeout: 15)) createSystemButton.tap() let shareButton = app.buttons["system-overview-share-button"] XCTAssertTrue(shareButton.waitForExistence(timeout: 15)) XCTAssertFalse( shareButton.isEnabled, "Export must stay disabled while the system has no loads, batteries or chargers" ) } @MainActor func testExportIsEnabledOnceComponentsExist() throws { let app = launch(arguments: ["--uitest-reset-data", "--uitest-sample-data"]) openFirstSystem(in: app) let shareButton = app.buttons["system-overview-share-button"] XCTAssertTrue(shareButton.waitForExistence(timeout: 15)) XCTAssertTrue( shareButton.isEnabled, "Export must be available for a system that has components" ) } // MARK: - Helpers private func launch(arguments: [String]) -> XCUIApplication { let app = XCUIApplication() app.launchArguments = arguments app.launch() return app } private func openFirstSystem(in app: XCUIApplication) { let list: XCUIElement if app.collectionViews["systems-list"].waitForExistence(timeout: 15) { list = app.collectionViews["systems-list"] } else { list = app.collectionViews.firstMatch } XCTAssertTrue(list.waitForExistence(timeout: 15)) let firstCell = list.cells.element(boundBy: 0) XCTAssertTrue(firstCell.waitForExistence(timeout: 10)) let cellButton = firstCell.buttons.firstMatch if cellButton.exists { cellButton.tap() } else { firstCell.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.5)).tap() } } }