mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-21 09:02:44 +02:00
QR login from device manager (#6818)
* Add link device button into the sessions overview screen * Run Swift format * Fix tests * Fix a crash in tests * Fix PR remark
This commit is contained in:
-1
@@ -24,7 +24,6 @@ struct UserOtherSessionsCoordinatorParameters {
|
||||
}
|
||||
|
||||
final class UserOtherSessionsCoordinator: Coordinator, Presentable {
|
||||
|
||||
private let parameters: UserOtherSessionsCoordinatorParameters
|
||||
private let userOtherSessionsHostingController: UIViewController
|
||||
private var userOtherSessionsViewModel: UserOtherSessionsViewModelProtocol
|
||||
|
||||
+5
-7
@@ -40,7 +40,6 @@ enum MockUserOtherSessionsScreenState: MockScreenState, CaseIterable {
|
||||
|
||||
/// Generate the view struct for the screen state.
|
||||
var screenView: ([Any], AnyView) {
|
||||
|
||||
let viewModel: UserOtherSessionsViewModel
|
||||
switch self {
|
||||
case .inactiveSessions:
|
||||
@@ -83,7 +82,7 @@ enum MockUserOtherSessionsScreenState: MockScreenState, CaseIterable {
|
||||
deviceType: .desktop,
|
||||
isVerified: true,
|
||||
lastSeenIP: "1.0.0.1",
|
||||
lastSeenTimestamp: Date().timeIntervalSince1970 - 8000000,
|
||||
lastSeenTimestamp: Date().timeIntervalSince1970 - 8_000_000,
|
||||
applicationName: nil,
|
||||
applicationVersion: nil,
|
||||
applicationURL: nil,
|
||||
@@ -99,7 +98,7 @@ enum MockUserOtherSessionsScreenState: MockScreenState, CaseIterable {
|
||||
deviceType: .web,
|
||||
isVerified: true,
|
||||
lastSeenIP: "2.0.0.2",
|
||||
lastSeenTimestamp: Date().timeIntervalSince1970 - 9000000,
|
||||
lastSeenTimestamp: Date().timeIntervalSince1970 - 9_000_000,
|
||||
applicationName: nil,
|
||||
applicationVersion: nil,
|
||||
applicationURL: nil,
|
||||
@@ -115,7 +114,7 @@ enum MockUserOtherSessionsScreenState: MockScreenState, CaseIterable {
|
||||
deviceType: .mobile,
|
||||
isVerified: false,
|
||||
lastSeenIP: "3.0.0.3",
|
||||
lastSeenTimestamp: Date().timeIntervalSince1970 - 10000000,
|
||||
lastSeenTimestamp: Date().timeIntervalSince1970 - 10_000_000,
|
||||
applicationName: nil,
|
||||
applicationVersion: nil,
|
||||
applicationURL: nil,
|
||||
@@ -150,7 +149,7 @@ enum MockUserOtherSessionsScreenState: MockScreenState, CaseIterable {
|
||||
deviceType: .desktop,
|
||||
isVerified: false,
|
||||
lastSeenIP: "1.0.0.1",
|
||||
lastSeenTimestamp: Date().timeIntervalSince1970 - 8000000,
|
||||
lastSeenTimestamp: Date().timeIntervalSince1970 - 8_000_000,
|
||||
applicationName: nil,
|
||||
applicationVersion: nil,
|
||||
applicationURL: nil,
|
||||
@@ -160,7 +159,6 @@ enum MockUserOtherSessionsScreenState: MockScreenState, CaseIterable {
|
||||
clientName: nil,
|
||||
clientVersion: nil,
|
||||
isActive: true,
|
||||
isCurrent: false)
|
||||
]
|
||||
isCurrent: false)]
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -18,12 +18,11 @@ import RiotSwiftUI
|
||||
import XCTest
|
||||
|
||||
class UserOtherSessionsUITests: MockScreenTestCase {
|
||||
|
||||
func test_whenOtherSessionsWithInactiveSessionFilterPresented_correctHeaderDisplayed() {
|
||||
app.goToScreenWithIdentifier(MockUserOtherSessionsScreenState.inactiveSessions.title)
|
||||
|
||||
XCTAssertTrue(app.staticTexts[VectorL10n.userSessionsOverviewSecurityRecommendationsInactiveTitle].exists)
|
||||
XCTAssertTrue(app.staticTexts[VectorL10n.userSessionsOverviewSecurityRecommendationsInactiveInfo].exists)
|
||||
XCTAssertTrue(app.staticTexts[VectorL10n.userSessionsOverviewSecurityRecommendationsInactiveInfo].exists)
|
||||
}
|
||||
|
||||
func test_whenOtherSessionsWithInactiveSessionFilterPresented_correctItemsDisplayed() {
|
||||
|
||||
+5
-8
@@ -19,14 +19,12 @@ import XCTest
|
||||
@testable import RiotSwiftUI
|
||||
|
||||
class UserOtherSessionsViewModelTests: XCTestCase {
|
||||
|
||||
|
||||
func test_whenUserOtherSessionSelectedProcessed_completionWithShowUserSessionOverviewCalled() {
|
||||
let expectedUserSessionInfo = createUserSessionInfo(sessionId: "session 2")
|
||||
let sut = UserOtherSessionsViewModel(sessionInfos: [createUserSessionInfo(sessionId: "session 1"),
|
||||
expectedUserSessionInfo],
|
||||
filter: .inactive,
|
||||
title: "Title")
|
||||
expectedUserSessionInfo],
|
||||
filter: .inactive,
|
||||
title: "Title")
|
||||
|
||||
var modelResult: UserOtherSessionsViewModelResult?
|
||||
sut.completion = { result in
|
||||
@@ -39,8 +37,8 @@ class UserOtherSessionsViewModelTests: XCTestCase {
|
||||
func test_whenModelCreated_withInactiveFilter_viewStateIsCorrect() {
|
||||
let sessionInfos = [createUserSessionInfo(sessionId: "session 1"), createUserSessionInfo(sessionId: "session 2")]
|
||||
let sut = UserOtherSessionsViewModel(sessionInfos: sessionInfos,
|
||||
filter: .inactive,
|
||||
title: "Title")
|
||||
filter: .inactive,
|
||||
title: "Title")
|
||||
|
||||
let expectedHeader = UserOtherSessionsHeaderViewData(title: VectorL10n.userSessionsOverviewSecurityRecommendationsInactiveTitle,
|
||||
subtitle: VectorL10n.userSessionsOverviewSecurityRecommendationsInactiveInfo,
|
||||
@@ -51,7 +49,6 @@ class UserOtherSessionsViewModelTests: XCTestCase {
|
||||
XCTAssertEqual(sut.state, expectedState)
|
||||
}
|
||||
|
||||
|
||||
private func createUserSessionInfo(sessionId: String) -> UserSessionInfo {
|
||||
UserSessionInfo(id: sessionId,
|
||||
name: "iOS",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
import Foundation
|
||||
|
||||
// MARK: - Coordinator
|
||||
|
||||
enum UserOtherSessionsCoordinatorResult {
|
||||
case openSessionDetails(sessionInfo: UserSessionInfo)
|
||||
}
|
||||
@@ -38,6 +39,7 @@ enum UserOtherSessionsSection: Hashable, Identifiable {
|
||||
var id: Self {
|
||||
self
|
||||
}
|
||||
|
||||
case sessionItems(header: UserOtherSessionsHeaderViewData, items: [UserSessionListItemViewData])
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@ enum OtherUserSessionsFilter {
|
||||
}
|
||||
|
||||
class UserOtherSessionsViewModel: UserOtherSessionsViewModelType, UserOtherSessionsViewModelProtocol {
|
||||
|
||||
var completion: ((UserOtherSessionsViewModelResult) -> Void)?
|
||||
private let sessionInfos: [UserSessionInfo]
|
||||
|
||||
@@ -42,7 +41,7 @@ class UserOtherSessionsViewModel: UserOtherSessionsViewModelType, UserOtherSessi
|
||||
override func process(viewAction: UserOtherSessionsViewAction) {
|
||||
switch viewAction {
|
||||
case let .userOtherSessionSelected(sessionId: sessionId):
|
||||
guard let session = sessionInfos.first(where: {$0.id == sessionId}) else {
|
||||
guard let session = sessionInfos.first(where: { $0.id == sessionId }) else {
|
||||
assertionFailure("Session should exist in the array.")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
import SwiftUI
|
||||
|
||||
struct UserOtherSessions: View {
|
||||
|
||||
@Environment(\.theme) private var theme
|
||||
|
||||
@ObservedObject var viewModel: UserOtherSessionsViewModel.Context
|
||||
@@ -57,7 +56,6 @@ struct UserOtherSessions: View {
|
||||
// MARK: - Previews
|
||||
|
||||
struct UserOtherSessions_Previews: PreviewProvider {
|
||||
|
||||
static let stateRenderer = MockUserOtherSessionsScreenState.stateRenderer
|
||||
|
||||
static var previews: some View {
|
||||
|
||||
+1
-4
@@ -23,7 +23,6 @@ struct UserOtherSessionsHeaderViewData: Hashable {
|
||||
}
|
||||
|
||||
struct UserOtherSessionsHeaderView: View {
|
||||
|
||||
private var backgroundShape: RoundedRectangle {
|
||||
RoundedRectangle(cornerRadius: 8)
|
||||
}
|
||||
@@ -33,7 +32,7 @@ struct UserOtherSessionsHeaderView: View {
|
||||
let viewData: UserOtherSessionsHeaderViewData
|
||||
|
||||
var body: some View {
|
||||
HStack (alignment: .top, spacing: 0) {
|
||||
HStack(alignment: .top, spacing: 0) {
|
||||
if let iconName = viewData.iconName {
|
||||
Image(iconName)
|
||||
.frame(width: 40, height: 40)
|
||||
@@ -63,12 +62,10 @@ struct UserOtherSessionsHeaderView: View {
|
||||
// MARK: - Previews
|
||||
|
||||
struct UserOtherSessionsHeaderView_Previews: PreviewProvider {
|
||||
|
||||
private static let inactiveSessionViewData = UserOtherSessionsHeaderViewData(title: VectorL10n.userSessionsOverviewSecurityRecommendationsInactiveTitle,
|
||||
subtitle: VectorL10n.userSessionsOverviewSecurityRecommendationsInactiveInfo,
|
||||
iconName: Asset.Images.userOtherSessionsInactive.name)
|
||||
|
||||
|
||||
static var previews: some View {
|
||||
Group {
|
||||
UserOtherSessionsHeaderView(viewData: self.inactiveSessionViewData)
|
||||
|
||||
Reference in New Issue
Block a user