Release 2.0.0

This commit is contained in:
Frank Rotermund
2022-11-27 13:18:53 +00:00
parent bf57719009
commit 0dc8ec0982
570 changed files with 20366 additions and 4410 deletions
@@ -0,0 +1,114 @@
//
// Copyright 2022 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
import Combine
import XCTest
@testable import RiotSwiftUI
class UserSessionListItemViewDataFactoryTests: XCTestCase {
let factory = UserSessionListItemViewDataFactory()
func testSessionDetailsWithTimestamp() {
// Given other devices in each of the verification states.
let sessionInfoVerified = UserSessionInfo.mockPhone(verificationState: .verified)
let sessionInfoUnverified = UserSessionInfo.mockPhone(verificationState: .unverified)
let sessionInfoUnknown = UserSessionInfo.mockPhone(verificationState: .unknown)
// When getting session details for each of them.
let sessionDetailsVerified = factory.create(from: sessionInfoVerified).sessionDetails
let sessionDetailsUnverified = factory.create(from: sessionInfoUnverified).sessionDetails
let sessionDetailsUnknown = factory.create(from: sessionInfoUnknown).sessionDetails
// Then the details should be formatted correctly.
let lastActivityString = UserSessionLastActivityFormatter.lastActivityDateString(from: sessionInfoVerified.lastSeenTimestamp!)
XCTAssertEqual(sessionDetailsVerified,
VectorL10n.userSessionItemDetails(VectorL10n.userSessionVerifiedShort, VectorL10n.userSessionItemDetailsLastActivity(lastActivityString)),
"The details should show as verified with a last activity string when verified.")
XCTAssertEqual(sessionDetailsUnverified,
VectorL10n.userSessionItemDetails(VectorL10n.userSessionUnverifiedShort, VectorL10n.userSessionItemDetailsLastActivity(lastActivityString)),
"The details should show as unverified with a last activity string when unverified.")
XCTAssertEqual(sessionDetailsUnknown,
VectorL10n.userSessionItemDetailsLastActivity(lastActivityString),
"The details should only show the last activity string when verification is unknown.")
}
func testSessionDetailsVerifiedWithoutTimestamp() {
// Given a verified other device
let sessionInfoVerified = UserSessionInfo.mockPhone(hasTimestamp: false)
let sessionInfoUnverified = UserSessionInfo.mockPhone(verificationState: .unverified, hasTimestamp: false)
let sessionInfoUnknown = UserSessionInfo.mockPhone(verificationState: .unknown, hasTimestamp: false)
// When getting session details
let sessionDetailsVerified = factory.create(from: sessionInfoVerified).sessionDetails
let sessionDetailsUnverified = factory.create(from: sessionInfoUnverified).sessionDetails
let sessionDetailsUnknown = factory.create(from: sessionInfoUnknown).sessionDetails
// Then the details should contain the verification state and a last seen date.
XCTAssertEqual(sessionDetailsVerified, VectorL10n.userSessionVerifiedShort,
"The details should only show the verification state when no timestamp exists.")
XCTAssertEqual(sessionDetailsUnverified, VectorL10n.userSessionUnverifiedShort,
"The details should only show the verification state when no timestamp exists.")
XCTAssertEqual(sessionDetailsUnknown, VectorL10n.userSessionVerificationUnknownShort,
"The details should only show the verification state when no timestamp exists.")
}
func testCurrentSessionDetailsWithTimestamp() {
// Given other devices in each of the verification states.
let sessionInfoVerified = UserSessionInfo.mockPhone(verificationState: .verified, isCurrent: true)
let sessionInfoUnverified = UserSessionInfo.mockPhone(verificationState: .unverified, isCurrent: true)
let sessionInfoUnknown = UserSessionInfo.mockPhone(verificationState: .unknown, isCurrent: true)
// When getting session details for each of them.
let sessionDetailsVerified = factory.create(from: sessionInfoVerified).sessionDetails
let sessionDetailsUnverified = factory.create(from: sessionInfoUnverified).sessionDetails
let sessionDetailsUnknown = factory.create(from: sessionInfoUnknown).sessionDetails
// Then the details should be formatted correctly.
XCTAssertEqual(sessionDetailsVerified,
VectorL10n.userSessionItemDetails(VectorL10n.userSessionVerifiedShort, VectorL10n.userOtherSessionCurrentSessionDetails),
"The details should show as verified with a current session string when verified.")
XCTAssertEqual(sessionDetailsUnverified,
VectorL10n.userSessionItemDetails(VectorL10n.userSessionUnverifiedShort, VectorL10n.userOtherSessionCurrentSessionDetails),
"The details should show as unverified with a current session string when unverified.")
XCTAssertEqual(sessionDetailsUnknown,
VectorL10n.userOtherSessionCurrentSessionDetails,
"The details should only show the current session string when verification is unknown.")
}
func testCurrentSessionDetailsVerifiedWithoutTimestamp() {
// Given a verified other device
let sessionInfoVerified = UserSessionInfo.mockPhone(hasTimestamp: false, isCurrent: true)
let sessionInfoUnverified = UserSessionInfo.mockPhone(verificationState: .unverified, hasTimestamp: false, isCurrent: true)
let sessionInfoUnknown = UserSessionInfo.mockPhone(verificationState: .unknown, hasTimestamp: false, isCurrent: true)
// When getting session details
let sessionDetailsVerified = factory.create(from: sessionInfoVerified).sessionDetails
let sessionDetailsUnverified = factory.create(from: sessionInfoUnverified).sessionDetails
let sessionDetailsUnknown = factory.create(from: sessionInfoUnknown).sessionDetails
// Then the details should contain the verification state and a last seen date.
XCTAssertEqual(sessionDetailsVerified,
VectorL10n.userSessionItemDetails(VectorL10n.userSessionVerifiedShort, VectorL10n.userOtherSessionCurrentSessionDetails),
"The details should show as verified with a current session string when verified.")
XCTAssertEqual(sessionDetailsUnverified,
VectorL10n.userSessionItemDetails(VectorL10n.userSessionUnverifiedShort, VectorL10n.userOtherSessionCurrentSessionDetails),
"The details should show as unverified with a current session string when unverified.")
XCTAssertEqual(sessionDetailsUnknown,
VectorL10n.userOtherSessionCurrentSessionDetails,
"The details should only show the current session string when verification is unknown.")
}
}
@@ -27,6 +27,7 @@ class UserSessionsOverviewViewModelTests: XCTestCase {
XCTAssertTrue(viewModel.state.unverifiedSessionsViewData.isEmpty)
XCTAssertTrue(viewModel.state.inactiveSessionsViewData.isEmpty)
XCTAssertTrue(viewModel.state.otherSessionsViewData.isEmpty)
XCTAssertFalse(viewModel.state.linkDeviceButtonVisible)
}
func testLoadOnDidAppear() {
@@ -37,6 +38,7 @@ class UserSessionsOverviewViewModelTests: XCTestCase {
XCTAssertFalse(viewModel.state.unverifiedSessionsViewData.isEmpty)
XCTAssertFalse(viewModel.state.inactiveSessionsViewData.isEmpty)
XCTAssertFalse(viewModel.state.otherSessionsViewData.isEmpty)
XCTAssertTrue(viewModel.state.linkDeviceButtonVisible)
}
func testSimpleActionProcessing() {
@@ -49,15 +51,18 @@ class UserSessionsOverviewViewModelTests: XCTestCase {
viewModel.process(viewAction: .verifyCurrentSession)
XCTAssertEqual(result, .verifyCurrentSession)
viewModel.process(viewAction: .viewAllUnverifiedSessions)
XCTAssertEqual(result, .showAllUnverifiedSessions)
result = nil
viewModel.process(viewAction: .viewAllInactiveSessions)
XCTAssertEqual(result, .showAllInactiveSessions)
XCTAssertEqual(result, .showOtherSessions(sessionInfos: [], filter: .inactive))
result = nil
viewModel.process(viewAction: .viewAllOtherSessions)
XCTAssertEqual(result, .showAllOtherSessions)
XCTAssertEqual(result, .showOtherSessions(sessionInfos: [], filter: .all))
result = nil
viewModel.process(viewAction: .linkDevice)
XCTAssertEqual(result, .linkDevice)
}
func testShowSessionDetails() {
@@ -71,20 +76,20 @@ class UserSessionsOverviewViewModelTests: XCTestCase {
result = action
}
guard let currentSession = service.overviewData.currentSession else {
guard let currentSession = service.currentSession else {
XCTFail("The current session should be valid at this point")
return
}
viewModel.process(viewAction: .viewCurrentSessionDetails)
XCTAssertEqual(result, .showCurrentSessionOverview(session: currentSession))
XCTAssertEqual(result, .showCurrentSessionOverview(sessionInfo: currentSession))
guard let randomSession = service.overviewData.otherSessions.randomElement() else {
guard let randomSession = service.otherSessions.randomElement() else {
XCTFail("There should be other sessions")
return
}
viewModel.process(viewAction: .tapUserSession(randomSession.id))
XCTAssertEqual(result, .showUserSessionOverview(session: randomSession))
XCTAssertEqual(result, .showUserSessionOverview(sessionInfo: randomSession))
}
}