mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-28 23:32:41 +00:00
UI tests
This commit is contained in:
parent
a586ed0c33
commit
7d9b040eeb
4 changed files with 71 additions and 5 deletions
|
@ -25,6 +25,7 @@ enum MockUserOtherSessionsScreenState: MockScreenState, CaseIterable {
|
|||
// mock that screen.
|
||||
|
||||
case inactiveSessions
|
||||
case unverifiedSessions
|
||||
|
||||
/// The associated screen
|
||||
var screenType: Any.Type {
|
||||
|
@ -34,15 +35,23 @@ enum MockUserOtherSessionsScreenState: MockScreenState, CaseIterable {
|
|||
/// A list of screen state definitions
|
||||
static var allCases: [MockUserOtherSessionsScreenState] {
|
||||
// Each of the presence statuses
|
||||
[.inactiveSessions]
|
||||
[.inactiveSessions, .unverifiedSessions]
|
||||
}
|
||||
|
||||
/// Generate the view struct for the screen state.
|
||||
var screenView: ([Any], AnyView) {
|
||||
|
||||
let viewModel = UserOtherSessionsViewModel(sessionInfos: inactiveSessions(),
|
||||
let viewModel: UserOtherSessionsViewModel
|
||||
switch self {
|
||||
case .inactiveSessions:
|
||||
viewModel = UserOtherSessionsViewModel(sessionInfos: inactiveSessions(),
|
||||
filter: .inactive,
|
||||
title: VectorL10n.userOtherSessionSecurityRecommendationTitle)
|
||||
case .unverifiedSessions:
|
||||
viewModel = UserOtherSessionsViewModel(sessionInfos: unverifiedSessions(),
|
||||
filter: .unverified,
|
||||
title: VectorL10n.userOtherSessionSecurityRecommendationTitle)
|
||||
}
|
||||
|
||||
// can simulate service and viewModel actions here if needs be.
|
||||
|
||||
|
@ -118,4 +127,40 @@ enum MockUserOtherSessionsScreenState: MockScreenState, CaseIterable {
|
|||
isActive: false,
|
||||
isCurrent: false)]
|
||||
}
|
||||
|
||||
private func unverifiedSessions() -> [UserSessionInfo] {
|
||||
[UserSessionInfo(id: "0",
|
||||
name: "iOS",
|
||||
deviceType: .mobile,
|
||||
isVerified: false,
|
||||
lastSeenIP: "10.0.0.10",
|
||||
lastSeenTimestamp: nil,
|
||||
applicationName: nil,
|
||||
applicationVersion: nil,
|
||||
applicationURL: nil,
|
||||
deviceModel: nil,
|
||||
deviceOS: nil,
|
||||
lastSeenIPLocation: nil,
|
||||
clientName: nil,
|
||||
clientVersion: nil,
|
||||
isActive: true,
|
||||
isCurrent: true),
|
||||
UserSessionInfo(id: "1",
|
||||
name: "macOS",
|
||||
deviceType: .desktop,
|
||||
isVerified: false,
|
||||
lastSeenIP: "1.0.0.1",
|
||||
lastSeenTimestamp: Date().timeIntervalSince1970 - 8000000,
|
||||
applicationName: nil,
|
||||
applicationVersion: nil,
|
||||
applicationURL: nil,
|
||||
deviceModel: nil,
|
||||
deviceOS: nil,
|
||||
lastSeenIPLocation: nil,
|
||||
clientName: nil,
|
||||
clientVersion: nil,
|
||||
isActive: true,
|
||||
isCurrent: false)
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,4 +31,17 @@ class UserOtherSessionsUITests: MockScreenTestCase {
|
|||
|
||||
XCTAssertTrue(app.buttons["RiotSwiftUI Mobile: iOS, Inactive for 90+ days"].exists)
|
||||
}
|
||||
|
||||
func test_whenOtherSessionsWithUnverifiedSessionFilterPresented_correctHeaderDisplayed() {
|
||||
app.goToScreenWithIdentifier(MockUserOtherSessionsScreenState.unverifiedSessions.title)
|
||||
|
||||
XCTAssertTrue(app.staticTexts[VectorL10n.userSessionsOverviewSecurityRecommendationsUnverifiedTitle].exists)
|
||||
XCTAssertTrue(app.staticTexts[VectorL10n.userOtherSessionUnverifiedSessionsHeaderSubtitle].exists)
|
||||
}
|
||||
|
||||
func test_whenOtherSessionsWithUnverifiedSessionFilterPresented_correctItemsDisplayed() {
|
||||
app.goToScreenWithIdentifier(MockUserOtherSessionsScreenState.unverifiedSessions.title)
|
||||
|
||||
XCTAssertTrue(app.buttons["RiotSwiftUI Mobile: iOS, Unverified · Your current session"].exists)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,11 +53,19 @@ class UserOtherSessionsViewModel: UserOtherSessionsViewModelType, UserOtherSessi
|
|||
// MARK: - Private
|
||||
|
||||
private func updateViewState(sessionInfos: [UserSessionInfo], filter: OtherUserSessionsFilter) {
|
||||
let sectionItems = filterSessions(sessionInfos: sessionInfos, by: filter).asViewData()
|
||||
let sectionItems = createSectionItems(sessionInfos: sessionInfos, filter: filter)
|
||||
let sectionHeader = createHeaderData(filter: filter)
|
||||
state.sections = [.sessionItems(header: sectionHeader, items: sectionItems)]
|
||||
}
|
||||
|
||||
private func createSectionItems(sessionInfos: [UserSessionInfo], filter: OtherUserSessionsFilter) -> [UserSessionListItemViewData] {
|
||||
filterSessions(sessionInfos: sessionInfos, by: filter)
|
||||
.map {
|
||||
UserSessionListItemViewDataFactory().create(from: $0,
|
||||
highlightSessionDetails: filter == .unverified && $0.isCurrent)
|
||||
}
|
||||
}
|
||||
|
||||
private func filterSessions(sessionInfos: [UserSessionInfo], by filter: OtherUserSessionsFilter) -> [UserSessionInfo] {
|
||||
switch filter {
|
||||
case .all:
|
||||
|
|
|
@ -18,7 +18,7 @@ import Foundation
|
|||
|
||||
struct UserSessionListItemViewDataFactory {
|
||||
|
||||
func create(from sessionInfo: UserSessionInfo) -> UserSessionListItemViewData {
|
||||
func create(from sessionInfo: UserSessionInfo, highlightSessionDetails: Bool = false) -> UserSessionListItemViewData {
|
||||
let sessionName = UserSessionNameFormatter.sessionName(deviceType: sessionInfo.deviceType,
|
||||
sessionDisplayName: sessionInfo.name)
|
||||
let sessionDetails = buildSessionDetails(sessionInfo: sessionInfo)
|
||||
|
@ -27,7 +27,7 @@ struct UserSessionListItemViewDataFactory {
|
|||
return UserSessionListItemViewData(sessionId: sessionInfo.id,
|
||||
sessionName: sessionName,
|
||||
sessionDetails: sessionDetails,
|
||||
highlightSessionDetails: sessionInfo.isCurrent,
|
||||
highlightSessionDetails: highlightSessionDetails,
|
||||
deviceAvatarViewData: deviceAvatarViewData,
|
||||
sessionDetailsIcon: getSessionDetailsIcon(isActive: sessionInfo.isActive))
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue