mirror of
https://github.com/home-assistant/iOS.git
synced 2026-02-14 23:22:52 -06:00
<!-- Thank you for submitting a Pull Request and helping to improve Home Assistant. Please complete the following sections to help the processing and review of your changes. Please do not delete anything from this template. --> ## Summary In this PR I set to migrate the LocationHistoryList to SwiftUI, to reduce the dependency in Eureka. This screen was picked at random. As this screen is presented from two different places, SettingsDetail and Debug screens, also updated the code in the corresponding classes. The LocationHistory list reacts to changes. ### LocationHistoryDetail LocationHistoryDetailViewController also gained a SwiftUI wrapper in order for it to be presented from the new LocationHistoryListView. This wrapper syncs the navigation items between the wrapped View Controller and the parent. Move functionality also got migrated. ### Misc changes - Support for M4 added to the Gemfile.lock (added automatically) - New extension for safe subscripting in arrays added. ## Screenshots <!-- If this is a user-facing change not in the frontend, please include screenshots in light and dark mode. --> `LocationHistoryList item` <img width="967" alt="Screenshot 2025-02-27 at 23 39 32" src="https://github.com/user-attachments/assets/01576ced-ef97-4340-8353-e52a6fd14fac" /> `Empty LocationHistoryList` <img width="955" alt="Screenshot 2025-02-27 at 23 40 56" src="https://github.com/user-attachments/assets/303ae7c8-5fd6-40c1-87b4-e38098a175ea" />
79 lines
2.9 KiB
Swift
79 lines
2.9 KiB
Swift
import PromiseKit
|
|
import RealmSwift
|
|
@testable import Shared
|
|
import UserNotifications
|
|
import XCTest
|
|
|
|
class ClientEventTests: XCTestCase {
|
|
var store: ClientEventStore!
|
|
override func setUp() {
|
|
super.setUp()
|
|
store = ClientEventStore()
|
|
}
|
|
|
|
override func tearDown() {
|
|
store.clearAllEvents()
|
|
super.tearDown()
|
|
}
|
|
|
|
func testStartsEmpty() {
|
|
XCTAssertEqual(0, store.getEvents().count)
|
|
}
|
|
|
|
func testNotificationTitleForNotificationWithoutTitle() {
|
|
let mutableContent = UNMutableNotificationContent()
|
|
let alert = "House mode changed to away"
|
|
let expectedTitle = "Received a Push Notification: \(alert)"
|
|
mutableContent.userInfo = ["aps": ["alert": alert, "sound": "default:"]]
|
|
let content = mutableContent as UNNotificationContent
|
|
XCTAssertEqual(content.clientEventTitle, expectedTitle)
|
|
}
|
|
|
|
func testNotificationTitleForNotificationWithATitle() {
|
|
let mutableContent = UNMutableNotificationContent()
|
|
let alert = "House mode changed to away"
|
|
mutableContent.title = "Home Assistant Notification"
|
|
mutableContent.subtitle = "Fake Sub"
|
|
mutableContent.userInfo = ["aps": ["alert": alert, "sound": "default:"]]
|
|
|
|
let expectedTitle = "Received a Push Notification: \(mutableContent.title) - \(mutableContent.subtitle)"
|
|
let content = mutableContent as UNNotificationContent
|
|
XCTAssertEqual(content.clientEventTitle, expectedTitle)
|
|
}
|
|
|
|
func testUnknownNotification() {
|
|
let mutableContent = UNMutableNotificationContent()
|
|
mutableContent.userInfo = ["aps": ["sound": "default:"]]
|
|
|
|
let expectedTitle = "Received a Push Notification: "
|
|
let content = mutableContent as UNNotificationContent
|
|
XCTAssertEqual(content.clientEventTitle, expectedTitle)
|
|
}
|
|
|
|
func testCanWriteClientEvent() throws {
|
|
let event = ClientEvent(text: "Yo", type: .notification)
|
|
store.addEvent(event)
|
|
XCTAssertEqual(1, store.getEvents().count)
|
|
}
|
|
|
|
func testEventWrittenCorrectly() throws {
|
|
let date = Date()
|
|
Current.date = { date }
|
|
let event = ClientEvent(text: "Yo", type: .notification)
|
|
store.addEvent(event)
|
|
let retrieved = store.getEvents().first
|
|
XCTAssertEqual(retrieved?.text, "Yo")
|
|
XCTAssertEqual(retrieved?.type, .notification)
|
|
XCTAssertEqual(retrieved?.date.ISO8601Format(), date.ISO8601Format())
|
|
}
|
|
|
|
func testCanClearEvents() throws {
|
|
let event = ClientEvent(text: "Yo", type: .notification)
|
|
store.addEvent(event)
|
|
// !!!: Repeating the assertion from `testCanWriteClientEvent` was failing often here. Asserting only that the store is not empty for now. Later should be investigated why the count of events was not always 1 here
|
|
XCTAssertTrue(store.getEvents().count != 0)
|
|
store.clearAllEvents()
|
|
XCTAssertEqual(0, store.getEvents().count)
|
|
}
|
|
}
|