Device Manager: Verify session (#6832)

* Initial implementation
* Add verificationState to UserSessionInfo
* Listen for changes device changes in the service.
This commit is contained in:
Doug
2022-10-11 16:11:52 +01:00
committed by GitHub
parent 6c9a058b93
commit 6a0112aa95
33 changed files with 534 additions and 114 deletions
@@ -64,8 +64,8 @@ final class UserSessionOverviewCoordinator: Coordinator, Presentable {
MXLog.debug("[UserSessionOverviewCoordinator] UserSessionOverviewViewModel did complete with result: \(result).")
switch result {
case .verifyCurrentSession:
break // TODO:
case let .verifySession(sessionInfo):
self.completion?(.verifySession(sessionInfo))
case let .showSessionDetails(sessionInfo: sessionInfo):
self.completion?(.openSessionDetails(sessionInfo: sessionInfo))
case let .renameSession(sessionInfo):
@@ -51,7 +51,7 @@ enum MockUserSessionOverviewScreenState: MockScreenState, CaseIterable {
session = UserSessionInfo(id: "alice",
name: "iOS",
deviceType: .mobile,
isVerified: false,
verificationState: .unverified,
lastSeenIP: "10.0.0.10",
lastSeenTimestamp: nil,
applicationName: "Element iOS",
@@ -69,7 +69,7 @@ enum MockUserSessionOverviewScreenState: MockScreenState, CaseIterable {
session = UserSessionInfo(id: "1",
name: "macOS",
deviceType: .desktop,
isVerified: true,
verificationState: .verified,
lastSeenIP: "1.0.0.1",
lastSeenTimestamp: Date().timeIntervalSince1970 - 130_000,
applicationName: "Element MacOS",
@@ -87,7 +87,7 @@ enum MockUserSessionOverviewScreenState: MockScreenState, CaseIterable {
session = UserSessionInfo(id: "1",
name: "macOS",
deviceType: .desktop,
isVerified: true,
verificationState: .verified,
lastSeenIP: "1.0.0.1",
lastSeenTimestamp: Date().timeIntervalSince1970 - 130_000,
applicationName: "Element MacOS",
@@ -105,7 +105,7 @@ enum MockUserSessionOverviewScreenState: MockScreenState, CaseIterable {
session = UserSessionInfo(id: "1",
name: "macOS",
deviceType: .desktop,
isVerified: true,
verificationState: .verified,
lastSeenIP: "1.0.0.1",
lastSeenTimestamp: Date().timeIntervalSince1970 - 130_000,
applicationName: "Element MacOS",
@@ -21,15 +21,16 @@ import XCTest
class UserSessionOverviewViewModelTests: XCTestCase {
func test_whenVerifyCurrentSessionProcessed_completionWithVerifyCurrentSessionCalled() {
let sut = UserSessionOverviewViewModel(sessionInfo: createUserSessionInfo(), service: MockUserSessionOverviewService())
let sessionInfo = createUserSessionInfo()
let sut = UserSessionOverviewViewModel(sessionInfo: sessionInfo, service: MockUserSessionOverviewService())
XCTAssertEqual(sut.state.isPusherEnabled, nil)
var modelResult: UserSessionOverviewViewModelResult?
sut.completion = { result in
modelResult = result
}
sut.process(viewAction: .verifyCurrentSession)
XCTAssertEqual(modelResult, .verifyCurrentSession)
sut.process(viewAction: .verifySession)
XCTAssertEqual(modelResult, .verifySession(sessionInfo))
}
func test_whenViewSessionDetailsProcessed_completionWithShowSessionDetailsCalled() {
@@ -88,7 +89,7 @@ class UserSessionOverviewViewModelTests: XCTestCase {
UserSessionInfo(id: "session",
name: "iOS",
deviceType: .mobile,
isVerified: false,
verificationState: .unverified,
lastSeenIP: "10.0.0.10",
lastSeenTimestamp: Date().timeIntervalSince1970 - 100,
applicationName: "Element iOS",
@@ -20,6 +20,7 @@ import Foundation
enum UserSessionOverviewCoordinatorResult {
case openSessionDetails(sessionInfo: UserSessionInfo)
case verifySession(UserSessionInfo)
case renameSession(UserSessionInfo)
case logoutOfSession(UserSessionInfo)
}
@@ -28,7 +29,7 @@ enum UserSessionOverviewCoordinatorResult {
enum UserSessionOverviewViewModelResult: Equatable {
case showSessionDetails(sessionInfo: UserSessionInfo)
case verifyCurrentSession
case verifySession(UserSessionInfo)
case renameSession(UserSessionInfo)
case logoutOfSession(UserSessionInfo)
}
@@ -44,7 +45,7 @@ struct UserSessionOverviewViewState: BindableState {
}
enum UserSessionOverviewViewAction {
case verifyCurrentSession
case verifySession
case viewSessionDetails
case togglePushNotifications
case renameSession
@@ -84,8 +84,8 @@ class UserSessionOverviewViewModel: UserSessionOverviewViewModelType, UserSessio
override func process(viewAction: UserSessionOverviewViewAction) {
switch viewAction {
case .verifyCurrentSession:
completion?(.verifyCurrentSession)
case .verifySession:
completion?(.verifySession(sessionInfo))
case .viewSessionDetails:
completion?(.showSessionDetails(sessionInfo: sessionInfo))
case .togglePushNotifications:
@@ -24,7 +24,7 @@ struct UserSessionOverview: View {
var body: some View {
ScrollView {
UserSessionCardView(viewData: viewModel.viewState.cardViewData, onVerifyAction: { _ in
viewModel.send(viewAction: .verifyCurrentSession)
viewModel.send(viewAction: .verifySession)
},
onViewDetailsAction: { _ in
viewModel.send(viewAction: .viewSessionDetails)