mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 12:07:55 +00:00
Fix unit tests.
This commit is contained in:
@@ -23,7 +23,7 @@ final class AnalyticsSettingsScreenViewModelTests {
|
||||
client.isRunning = false
|
||||
analytics = AnalyticsService(client: client, appSettings: appSettings)
|
||||
|
||||
viewModel = AnalyticsSettingsScreenViewModel(appSettings: appSettings,
|
||||
viewModel = AnalyticsSettingsScreenViewModel(userSettings: UserSettings(appSettings: appSettings, accountSettings: .init()),
|
||||
analytics: analytics)
|
||||
context = viewModel.context
|
||||
}
|
||||
|
||||
@@ -13,12 +13,12 @@ import Testing
|
||||
|
||||
@MainActor
|
||||
final class BugReportServiceTests {
|
||||
var appSettings: AppSettings!
|
||||
var userSettings: UserSettings!
|
||||
var bugReportService: BugReportServiceProtocol!
|
||||
|
||||
init() throws {
|
||||
appSettings = AppSettings.volatile()
|
||||
appSettings.bugReportRageshakeURL.reset()
|
||||
userSettings = UserSettings.volatile()
|
||||
userSettings.bugReportRageshakeURL.reset()
|
||||
|
||||
let bugReportServiceMock = BugReportServiceMock()
|
||||
bugReportServiceMock.lastCrashEventIDSubject = .init(nil)
|
||||
@@ -27,7 +27,7 @@ final class BugReportServiceTests {
|
||||
}
|
||||
|
||||
deinit {
|
||||
appSettings.bugReportRageshakeURL.reset()
|
||||
userSettings.bugReportRageshakeURL.reset()
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -104,22 +104,22 @@ final class BugReportServiceTests {
|
||||
@Test
|
||||
@MainActor
|
||||
func configurations() async throws {
|
||||
guard case let .url(initialURL) = appSettings.bugReportRageshakeURL.publisher.value else {
|
||||
guard case let .url(initialURL) = userSettings.bugReportRageshakeURL.publisher.value else {
|
||||
Issue.record("Unexpected initial configuration.")
|
||||
return
|
||||
}
|
||||
|
||||
let service = BugReportService(rageshakeURLPublisher: appSettings.bugReportRageshakeURL.publisher,
|
||||
let service = BugReportService(rageshakeURLPublisher: userSettings.bugReportRageshakeURL.publisher,
|
||||
applicationID: "mock_app_id",
|
||||
sdkGitSHA: "1234",
|
||||
session: .mock,
|
||||
appHooks: AppHooks())
|
||||
#expect(service.isEnabled)
|
||||
|
||||
appSettings.bugReportRageshakeURL.applyRemoteValue(.disabled)
|
||||
userSettings.bugReportRageshakeURL.applyRemoteValue(.disabled)
|
||||
#expect(!service.isEnabled)
|
||||
|
||||
appSettings.bugReportRageshakeURL.applyRemoteValue(.url("https://bugs.server.net/submit"))
|
||||
userSettings.bugReportRageshakeURL.applyRemoteValue(.url("https://bugs.server.net/submit"))
|
||||
#expect(service.isEnabled)
|
||||
|
||||
let bugReport = BugReport(userID: "@mock:client.com",
|
||||
@@ -136,7 +136,7 @@ final class BugReportServiceTests {
|
||||
|
||||
#expect(customConfigurationResponse.reportURL == "https://bugs.server.net/123")
|
||||
|
||||
appSettings.bugReportRageshakeURL.reset()
|
||||
userSettings.bugReportRageshakeURL.reset()
|
||||
#expect(service.isEnabled)
|
||||
|
||||
let defaultConfigurationResponse = try await service.submitBugReport(bugReport, progressListener: progressSubject).get()
|
||||
|
||||
@@ -29,7 +29,7 @@ struct ChatsTabFlowCoordinatorTests {
|
||||
}
|
||||
|
||||
init() async throws {
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userSettings = UserSettings.volatile()
|
||||
|
||||
clientProxy = ClientProxyMock(.init(userID: "hi@bob", roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms)))))
|
||||
timelineControllerFactory = TimelineControllerFactoryMock(.init())
|
||||
@@ -42,10 +42,10 @@ struct ChatsTabFlowCoordinatorTests {
|
||||
bugReportService: BugReportServiceMock(.init()),
|
||||
elementCallService: ElementCallServiceMock(.init()),
|
||||
timelineControllerFactory: timelineControllerFactory,
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: userSettings),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
userSettings: userSettings,
|
||||
appHooks: AppHooks(),
|
||||
analytics: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
|
||||
@@ -84,14 +84,14 @@ final class ComposerToolbarViewModelTests {
|
||||
.init(suggestionType: .user(.init(id: "@user_mention_2:matrix.org", displayName: "User 2", avatarURL: nil)), range: .init(), rawSuggestionText: "")]
|
||||
let mockCompletionSuggestionService = CompletionSuggestionServiceMock(configuration: .init(suggestions: suggestions))
|
||||
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userSettings = UserSettings.volatile()
|
||||
|
||||
viewModel = ComposerToolbarViewModel(roomProxy: JoinedRoomProxyMock(.init()),
|
||||
wysiwygViewModel: wysiwygViewModel,
|
||||
completionSuggestionService: mockCompletionSuggestionService,
|
||||
mediaProvider: MediaProviderMock(.init()),
|
||||
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
|
||||
appSettings: appSettings,
|
||||
userSettings: userSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
composerDraftService: draftServiceMock)
|
||||
|
||||
@@ -803,14 +803,14 @@ final class ComposerToolbarViewModelTests {
|
||||
let mockSubject = CurrentValueSubject<[IdentityStatusChange], Never>([])
|
||||
roomProxyMock.identityStatusChangesPublisher = mockSubject.asCurrentValuePublisher()
|
||||
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userSettings = UserSettings.volatile()
|
||||
|
||||
viewModel = ComposerToolbarViewModel(roomProxy: roomProxyMock,
|
||||
wysiwygViewModel: wysiwygViewModel,
|
||||
completionSuggestionService: mockCompletionSuggestionService,
|
||||
mediaProvider: MediaProviderMock(.init()),
|
||||
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
|
||||
appSettings: appSettings,
|
||||
userSettings: userSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
composerDraftService: draftServiceMock)
|
||||
|
||||
@@ -846,14 +846,14 @@ final class ComposerToolbarViewModelTests {
|
||||
|
||||
roomProxyMock.identityStatusChangesPublisher = mockSubject.asCurrentValuePublisher()
|
||||
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userSettings = UserSettings.volatile()
|
||||
|
||||
viewModel = ComposerToolbarViewModel(roomProxy: roomProxyMock,
|
||||
wysiwygViewModel: wysiwygViewModel,
|
||||
completionSuggestionService: mockCompletionSuggestionService,
|
||||
mediaProvider: MediaProviderMock(.init()),
|
||||
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
|
||||
appSettings: appSettings,
|
||||
userSettings: userSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
composerDraftService: draftServiceMock)
|
||||
|
||||
@@ -886,14 +886,14 @@ final class ComposerToolbarViewModelTests {
|
||||
}
|
||||
|
||||
roomProxyMock.identityStatusChangesPublisher = CurrentValueSubject([IdentityStatusChange(userId: "@alice:localhost", changedTo: .pinViolation)]).asCurrentValuePublisher()
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userSettings = UserSettings.volatile()
|
||||
|
||||
viewModel = ComposerToolbarViewModel(roomProxy: roomProxyMock,
|
||||
wysiwygViewModel: wysiwygViewModel,
|
||||
completionSuggestionService: mockCompletionSuggestionService,
|
||||
mediaProvider: MediaProviderMock(.init()),
|
||||
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
|
||||
appSettings: appSettings,
|
||||
userSettings: userSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
composerDraftService: draftServiceMock)
|
||||
|
||||
@@ -923,7 +923,7 @@ final class ComposerToolbarViewModelTests {
|
||||
draftServiceMock.loadDraftClosure = loadDraftClosure
|
||||
}
|
||||
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userSettings = UserSettings.volatile()
|
||||
|
||||
viewModel = ComposerToolbarViewModel(initialText: initialText,
|
||||
roomProxy: JoinedRoomProxyMock(.init()),
|
||||
@@ -931,7 +931,7 @@ final class ComposerToolbarViewModelTests {
|
||||
completionSuggestionService: completionSuggestionServiceMock,
|
||||
mediaProvider: MediaProviderMock(.init()),
|
||||
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
|
||||
appSettings: appSettings,
|
||||
userSettings: userSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
composerDraftService: draftServiceMock)
|
||||
viewModel.context.composerFormattingEnabled = true
|
||||
|
||||
@@ -17,14 +17,14 @@ final class CreateRoomScreenViewModelTests {
|
||||
var spaceService: SpaceServiceProxyMock!
|
||||
var userSession: UserSessionMock!
|
||||
|
||||
private let appSettings: AppSettings
|
||||
private let userSettings: UserSettings
|
||||
|
||||
var context: CreateRoomScreenViewModel.Context {
|
||||
viewModel.context
|
||||
}
|
||||
|
||||
init() {
|
||||
appSettings = AppSettings.volatile()
|
||||
userSettings = UserSettings.volatile()
|
||||
}
|
||||
|
||||
isolated deinit {
|
||||
@@ -85,14 +85,14 @@ final class CreateRoomScreenViewModelTests {
|
||||
spaceServiceConfiguration: .init(spaceRoomLists: ["1": .init()])))
|
||||
clientProxy.roomForIdentifierClosure = { roomID in .joined(JoinedRoomProxyMock(.init(id: roomID))) }
|
||||
userSession = UserSessionMock(.init(clientProxy: clientProxy))
|
||||
appSettings.knockingEnabled = true
|
||||
userSettings.knockingEnabled = true
|
||||
let viewModel = CreateRoomScreenViewModel(isSpace: true,
|
||||
spaceSelectionMode: .none,
|
||||
shouldShowCancelButton: false,
|
||||
userSession: userSession,
|
||||
analytics: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
appSettings: appSettings)
|
||||
userSettings: userSettings)
|
||||
self.viewModel = viewModel
|
||||
|
||||
// Given a form with a blank topic.
|
||||
@@ -335,14 +335,14 @@ final class CreateRoomScreenViewModelTests {
|
||||
clientProxy.spaceService = spaceService
|
||||
clientProxy.roomForIdentifierClosure = { roomID in .joined(JoinedRoomProxyMock(.init(id: roomID))) }
|
||||
userSession = UserSessionMock(.init(clientProxy: clientProxy))
|
||||
appSettings.knockingEnabled = true
|
||||
userSettings.knockingEnabled = true
|
||||
let viewModel = CreateRoomScreenViewModel(isSpace: isSpace,
|
||||
spaceSelectionMode: spacesSelectionMode,
|
||||
shouldShowCancelButton: false,
|
||||
userSession: userSession,
|
||||
analytics: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
appSettings: appSettings)
|
||||
userSettings: userSettings)
|
||||
self.viewModel = viewModel
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ struct EmojiPickerScreenViewModelTests {
|
||||
emojiPickerStream = stream
|
||||
|
||||
viewModel = EmojiPickerScreenViewModel(selectedEmojis: selectedEmojis,
|
||||
emojiProvider: EmojiProvider(appSettings: .volatile()),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
continuation: continuation)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ struct EmojiProviderTests {
|
||||
let emojiLoaderMock = EmojiLoaderMock()
|
||||
emojiLoaderMock.categories = [category]
|
||||
|
||||
let emojiProvider = EmojiProvider(loader: emojiLoaderMock, appSettings: .volatile())
|
||||
let emojiProvider = EmojiProvider(loader: emojiLoaderMock, userSettings: .volatile())
|
||||
|
||||
let categories = await emojiProvider.categories()
|
||||
#expect(emojiLoaderMock.categories == categories)
|
||||
@@ -33,7 +33,7 @@ struct EmojiProviderTests {
|
||||
let emojiLoaderMock = EmojiLoaderMock()
|
||||
emojiLoaderMock.categories = [category]
|
||||
|
||||
let emojiProvider = EmojiProvider(loader: emojiLoaderMock, appSettings: .volatile())
|
||||
let emojiProvider = EmojiProvider(loader: emojiLoaderMock, userSettings: .volatile())
|
||||
|
||||
let categories = await emojiProvider.categories(searchString: "")
|
||||
#expect(emojiLoaderMock.categories == categories)
|
||||
@@ -51,7 +51,7 @@ struct EmojiProviderTests {
|
||||
let emojiLoaderMock = EmojiLoaderMock()
|
||||
emojiLoaderMock.categories = categoriesForFirstLoad
|
||||
|
||||
let emojiProvider = EmojiProvider(loader: emojiLoaderMock, appSettings: .volatile())
|
||||
let emojiProvider = EmojiProvider(loader: emojiLoaderMock, userSettings: .volatile())
|
||||
|
||||
_ = await emojiProvider.categories()
|
||||
emojiLoaderMock.categories = categoriesForSecondLoad
|
||||
@@ -82,7 +82,7 @@ struct EmojiProviderTests {
|
||||
let emojiLoaderMock = EmojiLoaderMock()
|
||||
emojiLoaderMock.categories = categories
|
||||
|
||||
let emojiProvider = EmojiProvider(loader: emojiLoaderMock, appSettings: .volatile())
|
||||
let emojiProvider = EmojiProvider(loader: emojiLoaderMock, userSettings: .volatile())
|
||||
|
||||
_ = await emojiProvider.categories()
|
||||
let result = await emojiProvider.categories(searchString: searchString)
|
||||
|
||||
@@ -20,12 +20,12 @@ final class HomeScreenViewModelTests {
|
||||
var clientProxy: ClientProxyMock!
|
||||
var roomSummaryProvider: RoomSummaryProviderMock!
|
||||
var notificationManager: NotificationManagerMock!
|
||||
private let appSettings: AppSettings
|
||||
private let userSettings: UserSettings
|
||||
|
||||
var cancellables = Set<AnyCancellable>()
|
||||
|
||||
init() {
|
||||
appSettings = AppSettings.volatile()
|
||||
userSettings = UserSettings.volatile()
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -275,7 +275,7 @@ final class HomeScreenViewModelTests {
|
||||
room.roomID == invites[0].roomID && room.badges.isDotShown == false
|
||||
}
|
||||
}
|
||||
appSettings.seenInvites = Set(invites.compactMap(\.roomID))
|
||||
userSettings.seenInvites = Set(invites.compactMap(\.roomID))
|
||||
try await deferred.fulfill()
|
||||
invites = context.viewState.rooms.invites
|
||||
|
||||
@@ -289,14 +289,14 @@ final class HomeScreenViewModelTests {
|
||||
setupViewModel(invites: .rooms)
|
||||
|
||||
let invitedRoomIDs = context.viewState.rooms.invites.compactMap(\.roomID)
|
||||
appSettings.seenInvites = Set(invitedRoomIDs)
|
||||
userSettings.seenInvites = Set(invitedRoomIDs)
|
||||
#expect(invitedRoomIDs.count == 2)
|
||||
|
||||
let deferred = deferFulfillment(viewModel.actions) { $0 == .presentRoom(roomIdentifier: invitedRoomIDs[0]) }
|
||||
context.send(viewAction: .acceptInvite(roomIdentifier: invitedRoomIDs[0]))
|
||||
try await deferred.fulfill()
|
||||
|
||||
#expect(appSettings.seenInvites == [invitedRoomIDs[1]])
|
||||
#expect(userSettings.seenInvites == [invitedRoomIDs[1]])
|
||||
#expect(!notificationManager.removeDeliveredMessageNotificationsForCalled, "The notification will be dismissed when opening the room.")
|
||||
}
|
||||
|
||||
@@ -305,7 +305,7 @@ final class HomeScreenViewModelTests {
|
||||
setupViewModel(invites: .spaces)
|
||||
|
||||
let invitedRoomIDs = context.viewState.rooms.invites.compactMap(\.roomID)
|
||||
appSettings.seenInvites = Set(invitedRoomIDs)
|
||||
userSettings.seenInvites = Set(invitedRoomIDs)
|
||||
#expect(invitedRoomIDs.count == 2)
|
||||
|
||||
let deferred = deferFulfillment(viewModel.actions) {
|
||||
@@ -314,7 +314,7 @@ final class HomeScreenViewModelTests {
|
||||
context.send(viewAction: .acceptInvite(roomIdentifier: invitedRoomIDs[0]))
|
||||
try await deferred.fulfill()
|
||||
|
||||
#expect(appSettings.seenInvites == [invitedRoomIDs[1]])
|
||||
#expect(userSettings.seenInvites == [invitedRoomIDs[1]])
|
||||
#expect(!notificationManager.removeDeliveredMessageNotificationsForCalled, "The notification will be dismissed when opening the room.")
|
||||
}
|
||||
|
||||
@@ -322,7 +322,7 @@ final class HomeScreenViewModelTests {
|
||||
func declineInvite() async throws {
|
||||
setupViewModel(invites: .rooms)
|
||||
let invitedRoomIDs = context.viewState.rooms.invites.compactMap(\.roomID)
|
||||
appSettings.seenInvites = Set(invitedRoomIDs)
|
||||
userSettings.seenInvites = Set(invitedRoomIDs)
|
||||
#expect(invitedRoomIDs.count == 2)
|
||||
|
||||
let deferred = deferFulfillment(context.$viewState) { $0.bindings.alertInfo != nil }
|
||||
@@ -345,7 +345,7 @@ final class HomeScreenViewModelTests {
|
||||
try await Task.sleep(for: .milliseconds(100))
|
||||
#expect(rejectCalled)
|
||||
|
||||
#expect(appSettings.seenInvites == [invitedRoomIDs[1]])
|
||||
#expect(userSettings.seenInvites == [invitedRoomIDs[1]])
|
||||
#expect(notificationManager.removeDeliveredMessageNotificationsForCalled)
|
||||
#expect(notificationManager.removeDeliveredMessageNotificationsForReceivedInvocations == [invitedRoomIDs[0]])
|
||||
}
|
||||
@@ -354,7 +354,7 @@ final class HomeScreenViewModelTests {
|
||||
func declineAndBlockInvite() async throws {
|
||||
setupViewModel(invites: .rooms)
|
||||
let invitedRoomIDs = context.viewState.rooms.invites.compactMap(\.roomID)
|
||||
appSettings.seenInvites = Set(invitedRoomIDs)
|
||||
userSettings.seenInvites = Set(invitedRoomIDs)
|
||||
#expect(invitedRoomIDs.count == 2)
|
||||
|
||||
let deferred = deferFulfillment(context.$viewState) { $0.bindings.alertInfo != nil }
|
||||
@@ -368,7 +368,7 @@ final class HomeScreenViewModelTests {
|
||||
|
||||
@Test
|
||||
func newSoundBanner() {
|
||||
appSettings.hasSeenNewSoundBanner = false
|
||||
userSettings.hasSeenNewSoundBanner = false
|
||||
|
||||
setupViewModel()
|
||||
#expect(context.viewState.shouldShowBanner)
|
||||
@@ -377,7 +377,7 @@ final class HomeScreenViewModelTests {
|
||||
context.send(viewAction: .dismissNewSoundBanner)
|
||||
#expect(!context.viewState.shouldShowBanner)
|
||||
#expect(!context.viewState.shouldShowNewSoundBanner)
|
||||
#expect(appSettings.hasSeenNewSoundBanner)
|
||||
#expect(userSettings.hasSeenNewSoundBanner)
|
||||
}
|
||||
|
||||
// MARK: - Helpers
|
||||
@@ -483,7 +483,7 @@ final class HomeScreenViewModelTests {
|
||||
|
||||
viewModel = HomeScreenViewModel(userSession: userSession,
|
||||
selectedRoomPublisher: CurrentValueSubject<String?, Never>(nil).asCurrentValuePublisher(),
|
||||
appSettings: appSettings,
|
||||
userSettings: userSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
bugReportService: BugReportServiceMock(.init()),
|
||||
notificationManager: notificationManager,
|
||||
|
||||
@@ -109,7 +109,7 @@ struct IdentityConfirmationScreenViewModelTests {
|
||||
userSession.sessionSecurityStatePublisher = securityStateSubject.asCurrentValuePublisher()
|
||||
|
||||
viewModel = IdentityConfirmationScreenViewModel(userSession: userSession,
|
||||
appSettings: .volatile(),
|
||||
userSettings: .volatile(),
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,10 +31,10 @@ final class JoinRoomScreenViewModelTests {
|
||||
viewModel.context
|
||||
}
|
||||
|
||||
private let appSettings: AppSettings
|
||||
private let userSettings: UserSettings
|
||||
|
||||
init() {
|
||||
appSettings = AppSettings.volatile()
|
||||
userSettings = UserSettings.volatile()
|
||||
}
|
||||
|
||||
isolated deinit {
|
||||
@@ -45,12 +45,12 @@ final class JoinRoomScreenViewModelTests {
|
||||
|
||||
@Test
|
||||
func interaction() async throws {
|
||||
#expect(appSettings.seenInvites.isEmpty, "There shouldn't be any seen invites before running the tests.")
|
||||
#expect(userSettings.seenInvites.isEmpty, "There shouldn't be any seen invites before running the tests.")
|
||||
|
||||
setupViewModel()
|
||||
try await deferFulfillment(viewModel.context.$viewState) { $0.mode == .joinable }.fulfill()
|
||||
|
||||
#expect(appSettings.seenInvites.isEmpty, "Only an invited room should register the room ID as a seen invite.")
|
||||
#expect(userSettings.seenInvites.isEmpty, "Only an invited room should register the room ID as a seen invite.")
|
||||
|
||||
let deferred = deferFulfillment(viewModel.actionsPublisher) { $0 == .joined(.roomID("1")) }
|
||||
context.send(viewAction: .join)
|
||||
@@ -59,28 +59,28 @@ final class JoinRoomScreenViewModelTests {
|
||||
|
||||
@Test
|
||||
func acceptInviteInteraction() async throws {
|
||||
#expect(appSettings.seenInvites.isEmpty, "There shouldn't be any seen invites before running the tests.")
|
||||
#expect(userSettings.seenInvites.isEmpty, "There shouldn't be any seen invites before running the tests.")
|
||||
|
||||
setupViewModel(mode: .invited)
|
||||
try await deferFulfillment(viewModel.context.$viewState) { $0.mode == .invited(isDM: false) }.fulfill()
|
||||
|
||||
#expect(appSettings.seenInvites == ["1"], "The invited room's ID should be registered as a seen invite.")
|
||||
#expect(userSettings.seenInvites == ["1"], "The invited room's ID should be registered as a seen invite.")
|
||||
|
||||
let deferred = deferFulfillment(viewModel.actionsPublisher) { $0 == .joined(.roomID("1")) }
|
||||
context.send(viewAction: .acceptInvite)
|
||||
try await deferred.fulfill()
|
||||
|
||||
#expect(appSettings.seenInvites.isEmpty, "The after accepting an invite the invite should be forgotten in case the user leaves.")
|
||||
#expect(userSettings.seenInvites.isEmpty, "The after accepting an invite the invite should be forgotten in case the user leaves.")
|
||||
}
|
||||
|
||||
@Test
|
||||
func declineInviteInteraction() async throws {
|
||||
#expect(appSettings.seenInvites.isEmpty, "There shouldn't be any seen invites before running the tests.")
|
||||
#expect(userSettings.seenInvites.isEmpty, "There shouldn't be any seen invites before running the tests.")
|
||||
|
||||
setupViewModel(mode: .invited)
|
||||
|
||||
try await deferFulfillment(viewModel.context.$viewState) { $0.mode == .invited(isDM: false) }.fulfill()
|
||||
#expect(appSettings.seenInvites == ["1"], "The invited room's ID should be registered as a seen invite.")
|
||||
#expect(userSettings.seenInvites == ["1"], "The invited room's ID should be registered as a seen invite.")
|
||||
|
||||
context.send(viewAction: .declineInvite)
|
||||
|
||||
@@ -89,17 +89,17 @@ final class JoinRoomScreenViewModelTests {
|
||||
context.alertInfo?.secondaryButton?.action?()
|
||||
try await deferred.fulfill()
|
||||
|
||||
#expect(appSettings.seenInvites.isEmpty, "The after declining an invite the invite should be forgotten in case another invite is received.")
|
||||
#expect(userSettings.seenInvites.isEmpty, "The after declining an invite the invite should be forgotten in case another invite is received.")
|
||||
}
|
||||
|
||||
@Test
|
||||
func knockedState() async throws {
|
||||
#expect(appSettings.seenInvites.isEmpty, "There shouldn't be any seen invites before running the tests.")
|
||||
#expect(userSettings.seenInvites.isEmpty, "There shouldn't be any seen invites before running the tests.")
|
||||
setupViewModel(mode: .knocked)
|
||||
|
||||
try await deferFulfillment(viewModel.context.$viewState) { $0.mode == .knocked }.fulfill()
|
||||
|
||||
#expect(appSettings.seenInvites.isEmpty, "Only an invited room should register the room ID as a seen invite.")
|
||||
#expect(userSettings.seenInvites.isEmpty, "Only an invited room should register the room ID as a seen invite.")
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -237,7 +237,7 @@ final class JoinRoomScreenViewModelTests {
|
||||
}
|
||||
|
||||
viewModel = JoinRoomScreenViewModel(source: .generic(roomID: "1", via: []),
|
||||
appSettings: appSettings,
|
||||
userSettings: userSettings,
|
||||
userSession: UserSessionMock(.init(clientProxy: clientProxy)),
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ final class LiveLocationManagerTests {
|
||||
private var clientProxy: ClientProxyMock!
|
||||
private var locationManagerMock: CLLocationManagerMock!
|
||||
private var manager: LiveLocationManager!
|
||||
private var appSettings: AppSettings!
|
||||
private var userSettings: UserSettings!
|
||||
private var beaconInfoSubject: PassthroughSubject<LiveLocationOwnInfoUpdate, Never>!
|
||||
|
||||
// MARK: - startLiveLocation
|
||||
@@ -41,11 +41,11 @@ final class LiveLocationManagerTests {
|
||||
|
||||
try result.get()
|
||||
#expect(callOrder == ["stop", "start"])
|
||||
#expect(appSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] == nil)
|
||||
#expect(userSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] == nil)
|
||||
|
||||
try await simulateBeaconEcho(roomID: "!room:matrix.org", eventID: "$event:matrix.org")
|
||||
|
||||
#expect(appSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] != nil)
|
||||
#expect(userSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] != nil)
|
||||
#expect(locationManagerMock.startUpdatingLocationCalled)
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ final class LiveLocationManagerTests {
|
||||
setUp()
|
||||
let roomProxy = makeRoomProxy(roomID: "!room:matrix.org")
|
||||
clientProxy.roomForIdentifierClosure = { _ in .joined(roomProxy) }
|
||||
appSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] = LiveLocationSession(eventID: "$old_event:matrix.org", expirationDate: Date().addingTimeInterval(300))
|
||||
userSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] = LiveLocationSession(eventID: "$old_event:matrix.org", expirationDate: Date().addingTimeInterval(300))
|
||||
|
||||
var callOrder: [String] = []
|
||||
roomProxy.stopLiveLocationShareClosure = {
|
||||
@@ -73,7 +73,7 @@ final class LiveLocationManagerTests {
|
||||
|
||||
try await simulateBeaconEcho(roomID: "!room:matrix.org", eventID: "$event:matrix.org")
|
||||
|
||||
#expect(appSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] != nil)
|
||||
#expect(userSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] != nil)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -82,12 +82,12 @@ final class LiveLocationManagerTests {
|
||||
let roomProxy = makeRoomProxy(roomID: "!room1:matrix.org")
|
||||
clientProxy.roomForIdentifierClosure = { _ in .joined(roomProxy) }
|
||||
|
||||
appSettings.liveLocationSharingSessionsByRoomID["!room2:matrix.org"] = LiveLocationSession(eventID: "$event:matrix.org", expirationDate: Date().addingTimeInterval(300))
|
||||
userSettings.liveLocationSharingSessionsByRoomID["!room2:matrix.org"] = LiveLocationSession(eventID: "$event:matrix.org", expirationDate: Date().addingTimeInterval(300))
|
||||
|
||||
_ = await manager.startLiveLocation(roomID: "!room1:matrix.org", duration: .seconds(300))
|
||||
|
||||
#expect(roomProxy.stopLiveLocationShareCalled)
|
||||
#expect(appSettings.liveLocationSharingSessionsByRoomID["!room2:matrix.org"] != nil)
|
||||
#expect(userSettings.liveLocationSharingSessionsByRoomID["!room2:matrix.org"] != nil)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -98,7 +98,7 @@ final class LiveLocationManagerTests {
|
||||
let result = await manager.startLiveLocation(roomID: "!room:matrix.org", duration: .seconds(300))
|
||||
|
||||
#expect(throws: LiveLocationManagerError.roomNotJoined) { try result.get() }
|
||||
#expect(appSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] == nil)
|
||||
#expect(userSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] == nil)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -111,7 +111,7 @@ final class LiveLocationManagerTests {
|
||||
let result = await manager.startLiveLocation(roomID: "!room:matrix.org", duration: .seconds(300))
|
||||
|
||||
#expect(throws: LiveLocationManagerError.startFailed) { try result.get() }
|
||||
#expect(appSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] == nil)
|
||||
#expect(userSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] == nil)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -127,7 +127,7 @@ final class LiveLocationManagerTests {
|
||||
|
||||
try await simulateBeaconEcho(roomID: "!room:matrix.org", eventID: "$event:matrix.org")
|
||||
|
||||
let storedSession = try #require(appSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"])
|
||||
let storedSession = try #require(userSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"])
|
||||
let expectedMinTimeout = beforeStart.addingTimeInterval(TimeInterval(duration.seconds))
|
||||
let expectedMaxTimeout = afterStart.addingTimeInterval(TimeInterval(duration.seconds))
|
||||
|
||||
@@ -142,12 +142,12 @@ final class LiveLocationManagerTests {
|
||||
setUp()
|
||||
let roomProxy = makeRoomProxy(roomID: "!room:matrix.org")
|
||||
clientProxy.roomForIdentifierClosure = { _ in .joined(roomProxy) }
|
||||
appSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] = LiveLocationSession(eventID: "$event:matrix.org", expirationDate: Date().addingTimeInterval(300))
|
||||
userSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] = LiveLocationSession(eventID: "$event:matrix.org", expirationDate: Date().addingTimeInterval(300))
|
||||
|
||||
await manager.stopLiveLocation(roomID: "!room:matrix.org")
|
||||
|
||||
#expect(roomProxy.stopLiveLocationShareCalled)
|
||||
#expect(appSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] == nil)
|
||||
#expect(userSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] == nil)
|
||||
// Setting the timeout date above starts tracking; removing it stops tracking.
|
||||
#expect(locationManagerMock.startUpdatingLocationCalled)
|
||||
#expect(locationManagerMock.stopUpdatingLocationCalled)
|
||||
@@ -169,13 +169,13 @@ final class LiveLocationManagerTests {
|
||||
setUp()
|
||||
let roomProxy = makeRoomProxy(roomID: "!room1:matrix.org")
|
||||
clientProxy.roomForIdentifierClosure = { _ in .joined(roomProxy) }
|
||||
appSettings.liveLocationSharingSessionsByRoomID["!room1:matrix.org"] = LiveLocationSession(eventID: "$event:matrix.org", expirationDate: Date().addingTimeInterval(300))
|
||||
appSettings.liveLocationSharingSessionsByRoomID["!room2:matrix.org"] = LiveLocationSession(eventID: "$event:matrix.org", expirationDate: Date().addingTimeInterval(300))
|
||||
userSettings.liveLocationSharingSessionsByRoomID["!room1:matrix.org"] = LiveLocationSession(eventID: "$event:matrix.org", expirationDate: Date().addingTimeInterval(300))
|
||||
userSettings.liveLocationSharingSessionsByRoomID["!room2:matrix.org"] = LiveLocationSession(eventID: "$event:matrix.org", expirationDate: Date().addingTimeInterval(300))
|
||||
|
||||
await manager.stopLiveLocation(roomID: "!room1:matrix.org")
|
||||
|
||||
#expect(appSettings.liveLocationSharingSessionsByRoomID["!room1:matrix.org"] == nil)
|
||||
#expect(appSettings.liveLocationSharingSessionsByRoomID["!room2:matrix.org"] != nil)
|
||||
#expect(userSettings.liveLocationSharingSessionsByRoomID["!room1:matrix.org"] == nil)
|
||||
#expect(userSettings.liveLocationSharingSessionsByRoomID["!room2:matrix.org"] != nil)
|
||||
}
|
||||
|
||||
// MARK: - Beacon info updates
|
||||
@@ -188,13 +188,13 @@ final class LiveLocationManagerTests {
|
||||
|
||||
try await manager.startLiveLocation(roomID: "!room:matrix.org", duration: .seconds(300)).get()
|
||||
try await simulateBeaconEcho(roomID: "!room:matrix.org", eventID: "$event:matrix.org")
|
||||
#expect(appSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] != nil)
|
||||
#expect(userSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] != nil)
|
||||
|
||||
let deferred = deferFulfillment(appSettings.liveLocationSharingSessionsByRoomIDPublisher) { $0["!room:matrix.org"] == nil }
|
||||
let deferred = deferFulfillment(userSettings.liveLocationSharingSessionsByRoomIDPublisher) { $0["!room:matrix.org"] == nil }
|
||||
beaconInfoSubject.send(LiveLocationOwnInfoUpdate(roomID: "!room:matrix.org", eventID: "$external_event:matrix.org", isLive: true))
|
||||
try await deferred.fulfill()
|
||||
|
||||
#expect(appSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] == nil)
|
||||
#expect(userSettings.liveLocationSharingSessionsByRoomID["!room:matrix.org"] == nil)
|
||||
}
|
||||
|
||||
// MARK: - Reduced accuracy
|
||||
@@ -228,16 +228,16 @@ final class LiveLocationManagerTests {
|
||||
}
|
||||
|
||||
private func setUp(accuracyAuthorization: CLAccuracyAuthorization = .fullAccuracy) {
|
||||
appSettings = AppSettings.volatile()
|
||||
userSettings = UserSettings.volatile()
|
||||
clientProxy = ClientProxyMock(.init())
|
||||
beaconInfoSubject = PassthroughSubject<LiveLocationOwnInfoUpdate, Never>()
|
||||
clientProxy.liveLocationOwnInfoUpdatesPublisher = beaconInfoSubject.eraseToAnyPublisher()
|
||||
locationManagerMock = CLLocationManagerMock(.init(accuracyAuthorization: accuracyAuthorization))
|
||||
manager = LiveLocationManager(clientProxy: clientProxy, appSettings: appSettings, locationManager: locationManagerMock)
|
||||
manager = LiveLocationManager(clientProxy: clientProxy, userSettings: userSettings, locationManager: locationManagerMock)
|
||||
}
|
||||
|
||||
private func simulateBeaconEcho(roomID: String, eventID: String) async throws {
|
||||
let deferred = deferFulfillment(appSettings.liveLocationSharingSessionsByRoomIDPublisher) { $0[roomID] != nil }
|
||||
let deferred = deferFulfillment(userSettings.liveLocationSharingSessionsByRoomIDPublisher) { $0[roomID] != nil }
|
||||
beaconInfoSubject.send(LiveLocationOwnInfoUpdate(roomID: roomID, eventID: eventID, isLive: true))
|
||||
try await deferred.fulfill()
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ struct LocationSharingScreenViewModelTests {
|
||||
private static let roomID = "!live-location-room:matrix.org"
|
||||
|
||||
private var timelineProxy: TimelineProxyMock!
|
||||
private var appSettings: AppSettings!
|
||||
private var userSettings: UserSettings!
|
||||
private var viewModel: LocationSharingScreenViewModel!
|
||||
|
||||
private var context: LocationSharingScreenViewModel.Context {
|
||||
@@ -417,14 +417,14 @@ struct LocationSharingScreenViewModelTests {
|
||||
let roomProxyMock = JoinedRoomProxyMock(.init(members: .allMembers))
|
||||
roomProxyMock.makeLiveLocationServiceReturnValue = liveLocationServiceMock
|
||||
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userSettings = UserSettings.volatile()
|
||||
|
||||
viewModel = LocationSharingScreenViewModel(interactionMode: .viewLive(sender: nil, initialLiveLocationShare: nil),
|
||||
mapURLBuilder: appSettings.mapTilerConfiguration.publisher.value,
|
||||
mapURLBuilder: userSettings.mapTilerConfiguration.publisher.value,
|
||||
roomProxy: roomProxyMock,
|
||||
timelineController: TimelineControllerMock(.init(timelineProxy: TimelineProxyMock(.init()))),
|
||||
liveLocationManager: LiveLocationManagerMock(.init()),
|
||||
appSettings: appSettings,
|
||||
userSettings: userSettings,
|
||||
analytics: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
mediaProvider: MediaProviderMock(.init()))
|
||||
@@ -546,7 +546,7 @@ struct LocationSharingScreenViewModelTests {
|
||||
#expect(context.showsUserLocationMode == .hide)
|
||||
|
||||
// Another device takes over: this device's session is removed and a new own share arrives.
|
||||
appSettings.liveLocationSharingSessionsByRoomID.removeValue(forKey: Self.roomID)
|
||||
userSettings.liveLocationSharingSessionsByRoomID.removeValue(forKey: Self.roomID)
|
||||
let newOwnShare = makeLiveLocationShare(userID: RoomMemberProxyMock.mockMe.userID, latitude: 48.8, longitude: 2.3)
|
||||
|
||||
let deferred = deferFulfillment(context.observe(\.showsUserLocationMode)) { $0 == .show }
|
||||
@@ -630,14 +630,14 @@ struct LocationSharingScreenViewModelTests {
|
||||
|
||||
private mutating func setupViewModel(liveLocationManagerMock: LiveLocationManagerMock,
|
||||
members: [RoomMemberProxyMock] = .allMembersAsAdmin) {
|
||||
appSettings = AppSettings.volatile()
|
||||
userSettings = UserSettings.volatile()
|
||||
timelineProxy = TimelineProxyMock(.init())
|
||||
viewModel = LocationSharingScreenViewModel(interactionMode: .picker(shouldShowLiveLocationOption: true),
|
||||
mapURLBuilder: appSettings.mapTilerConfiguration.publisher.value,
|
||||
mapURLBuilder: userSettings.mapTilerConfiguration.publisher.value,
|
||||
roomProxy: JoinedRoomProxyMock(.init(members: members)),
|
||||
timelineController: TimelineControllerMock(.init(timelineProxy: timelineProxy)),
|
||||
liveLocationManager: liveLocationManagerMock,
|
||||
appSettings: appSettings,
|
||||
userSettings: userSettings,
|
||||
analytics: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
mediaProvider: MediaProviderMock(.init()))
|
||||
@@ -649,9 +649,9 @@ struct LocationSharingScreenViewModelTests {
|
||||
liveLocationsSubject: CurrentValueSubject<[LiveLocationShare], Never>,
|
||||
members: [RoomMemberProxyMock] = .allMembers,
|
||||
isSharingLiveLocationFromThisDevice: Bool = false) {
|
||||
appSettings = AppSettings.volatile()
|
||||
userSettings = UserSettings.volatile()
|
||||
if isSharingLiveLocationFromThisDevice {
|
||||
appSettings.liveLocationSharingSessionsByRoomID[Self.roomID] = .init(eventID: "$event:matrix.org", expirationDate: .distantFuture)
|
||||
userSettings.liveLocationSharingSessionsByRoomID[Self.roomID] = .init(eventID: "$event:matrix.org", expirationDate: .distantFuture)
|
||||
}
|
||||
|
||||
let liveLocationServiceMock = RoomLiveLocationServiceMock()
|
||||
@@ -661,11 +661,11 @@ struct LocationSharingScreenViewModelTests {
|
||||
roomProxyMock.makeLiveLocationServiceReturnValue = liveLocationServiceMock
|
||||
|
||||
viewModel = LocationSharingScreenViewModel(interactionMode: .viewLive(sender: sender, initialLiveLocationShare: initialShare),
|
||||
mapURLBuilder: appSettings.mapTilerConfiguration.publisher.value,
|
||||
mapURLBuilder: userSettings.mapTilerConfiguration.publisher.value,
|
||||
roomProxy: roomProxyMock,
|
||||
timelineController: TimelineControllerMock(.init(timelineProxy: TimelineProxyMock(.init()))),
|
||||
liveLocationManager: LiveLocationManagerMock(.init()),
|
||||
appSettings: appSettings,
|
||||
userSettings: userSettings,
|
||||
analytics: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
mediaProvider: MediaProviderMock(.init()))
|
||||
|
||||
@@ -15,7 +15,7 @@ final class MediaUploadPreviewScreenViewModelTests {
|
||||
var timelineProxy: TimelineProxyMock!
|
||||
var clientProxy: ClientProxyMock!
|
||||
var userIndicatorController: UserIndicatorControllerMock
|
||||
private let appSettings: AppSettings
|
||||
private let userSettings: UserSettings
|
||||
|
||||
var viewModel: MediaUploadPreviewScreenViewModel!
|
||||
var context: MediaUploadPreviewScreenViewModel.Context {
|
||||
@@ -28,8 +28,8 @@ final class MediaUploadPreviewScreenViewModelTests {
|
||||
}
|
||||
|
||||
init() {
|
||||
appSettings = AppSettings.volatile()
|
||||
appSettings.optimizeMediaUploads = false
|
||||
userSettings = UserSettings.volatile()
|
||||
userSettings.optimizeMediaUploads = false
|
||||
|
||||
userIndicatorController = UserIndicatorControllerMock()
|
||||
}
|
||||
@@ -322,7 +322,7 @@ final class MediaUploadPreviewScreenViewModelTests {
|
||||
title: "Some File",
|
||||
shouldShowCaptionWarning: true,
|
||||
galleryEnabled: galleryEnabled,
|
||||
mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: appSettings),
|
||||
mediaUploadingPreprocessor: MediaUploadingPreprocessor(userSettings: userSettings),
|
||||
timelineController: TimelineControllerMock(.init(timelineProxy: timelineProxy)),
|
||||
clientProxy: clientProxy,
|
||||
userIndicatorController: userIndicatorController)
|
||||
|
||||
@@ -13,13 +13,13 @@ import UniformTypeIdentifiers
|
||||
|
||||
final class MediaUploadingPreprocessorTests {
|
||||
let maxUploadSize: UInt = 100 * 1024 * 1024
|
||||
var appSettings: AppSettings!
|
||||
var userSettings: UserSettings!
|
||||
var mediaUploadingPreprocessor: MediaUploadingPreprocessor!
|
||||
|
||||
init() {
|
||||
appSettings = AppSettings.volatile()
|
||||
appSettings.optimizeMediaUploads = false
|
||||
mediaUploadingPreprocessor = MediaUploadingPreprocessor(appSettings: appSettings)
|
||||
userSettings = UserSettings.volatile()
|
||||
userSettings.optimizeMediaUploads = false
|
||||
mediaUploadingPreprocessor = MediaUploadingPreprocessor(userSettings: userSettings)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -80,7 +80,7 @@ final class MediaUploadingPreprocessorTests {
|
||||
func landscapeMovVideoOptimizedProcessing() async throws {
|
||||
let url = try #require(Bundle(for: Self.self).url(forResource: "landscape_test_video.mov", withExtension: nil), "Failed retrieving test asset")
|
||||
|
||||
appSettings.optimizeMediaUploads = true
|
||||
userSettings.optimizeMediaUploads = true
|
||||
|
||||
guard case let .success(optimizedResult) = await mediaUploadingPreprocessor.processMedia(at: url, maxUploadSize: maxUploadSize),
|
||||
case let .video(optimizedVideoURL, _, optimizedVideoInfo) = optimizedResult else {
|
||||
@@ -139,7 +139,7 @@ final class MediaUploadingPreprocessorTests {
|
||||
func portraitMp4VideoOptimizedProcessing() async throws {
|
||||
let url = try #require(Bundle(for: Self.self).url(forResource: "portrait_test_video.mp4", withExtension: nil), "Failed retrieving test asset")
|
||||
|
||||
appSettings.optimizeMediaUploads = true
|
||||
userSettings.optimizeMediaUploads = true
|
||||
|
||||
guard case let .success(optimizedResult) = await mediaUploadingPreprocessor.processMedia(at: url, maxUploadSize: maxUploadSize),
|
||||
case let .video(optimizedVideoURL, _, optimizedVideoInfo) = optimizedResult else {
|
||||
@@ -184,7 +184,7 @@ final class MediaUploadingPreprocessorTests {
|
||||
#expect(imageInfo.thumbnailInfo?.height == 344)
|
||||
|
||||
// Repeat with optimised media setting
|
||||
appSettings.optimizeMediaUploads = true
|
||||
userSettings.optimizeMediaUploads = true
|
||||
|
||||
guard case let .success(optimizedResult) = await mediaUploadingPreprocessor.processMedia(at: url, maxUploadSize: maxUploadSize),
|
||||
case let .image(optimizedImageURL, thumbnailURL, optimizedImageInfo) = optimizedResult else {
|
||||
@@ -228,7 +228,7 @@ final class MediaUploadingPreprocessorTests {
|
||||
#expect(imageInfo.thumbnailInfo?.height == 800)
|
||||
|
||||
// Repeat with optimised media setting
|
||||
appSettings.optimizeMediaUploads = true
|
||||
userSettings.optimizeMediaUploads = true
|
||||
|
||||
guard case let .success(optimizedResult) = await mediaUploadingPreprocessor.processMedia(at: url, maxUploadSize: maxUploadSize),
|
||||
case let .image(optimizedImageURL, thumbnailURL, optimizedImageInfo) = optimizedResult else {
|
||||
@@ -274,7 +274,7 @@ final class MediaUploadingPreprocessorTests {
|
||||
#expect(imageInfo.thumbnailInfo?.height == 240)
|
||||
|
||||
// Repeat with optimised media setting
|
||||
appSettings.optimizeMediaUploads = true
|
||||
userSettings.optimizeMediaUploads = true
|
||||
|
||||
guard case let .success(optimizedResult) = await mediaUploadingPreprocessor.processMedia(at: url, maxUploadSize: maxUploadSize),
|
||||
case let .image(optimizedImageURL, _, optimizedImageInfo) = optimizedResult else {
|
||||
@@ -325,7 +325,7 @@ final class MediaUploadingPreprocessorTests {
|
||||
#expect(imageInfo.thumbnailInfo?.height == 800)
|
||||
|
||||
// Repeat with optimised media setting
|
||||
appSettings.optimizeMediaUploads = true
|
||||
userSettings.optimizeMediaUploads = true
|
||||
|
||||
guard case let .success(optimizedResult) = await mediaUploadingPreprocessor.processMedia(at: url, maxUploadSize: maxUploadSize),
|
||||
case let .image(optimizedImageURL, thumbnailURL, optimizedImageInfo) = optimizedResult else {
|
||||
@@ -377,7 +377,7 @@ final class MediaUploadingPreprocessorTests {
|
||||
#expect(imageInfo.thumbnailInfo?.height == 472)
|
||||
|
||||
// Repeat with optimised media setting
|
||||
appSettings.optimizeMediaUploads = true
|
||||
userSettings.optimizeMediaUploads = true
|
||||
|
||||
guard case let .success(optimizedResult) = await mediaUploadingPreprocessor.processMedia(at: url, maxUploadSize: maxUploadSize),
|
||||
case let .image(optimizedImageURL, _, optimizedImageInfo) = optimizedResult else {
|
||||
@@ -419,7 +419,7 @@ final class MediaUploadingPreprocessorTests {
|
||||
#expect(imageInfo.thumbnailInfo?.height == 800)
|
||||
|
||||
// Repeat with optimised media setting
|
||||
appSettings.optimizeMediaUploads = true
|
||||
userSettings.optimizeMediaUploads = true
|
||||
|
||||
guard case let .success(optimizedResult) = await mediaUploadingPreprocessor.processMedia(at: url, maxUploadSize: maxUploadSize),
|
||||
case let .image(optimizedImageURL, thumbnailURL, optimizedImageInfo) = optimizedResult else {
|
||||
@@ -453,7 +453,7 @@ final class MediaUploadingPreprocessorTests {
|
||||
fatalError()
|
||||
}
|
||||
|
||||
if appSettings.optimizeMediaUploads {
|
||||
if userSettings.optimizeMediaUploads {
|
||||
// Check that new image has been scaled within the requirements for an optimised image
|
||||
#expect(convertedImage.size.width <= MediaUploadingPreprocessor.Constants.optimizedMaxPixelSize)
|
||||
#expect(convertedImage.size.height <= MediaUploadingPreprocessor.Constants.optimizedMaxPixelSize)
|
||||
|
||||
@@ -15,7 +15,7 @@ import Testing
|
||||
struct NotificationSettingsScreenViewModelTests {
|
||||
private var viewModel: NotificationSettingsScreenViewModelProtocol
|
||||
private var context: NotificationSettingsScreenViewModelType.Context
|
||||
private var appSettings: AppSettings
|
||||
private var userSettings: UserSettings
|
||||
private var userNotificationCenter: UserNotificationCenterMock
|
||||
private var notificationSettingsProxy: NotificationSettingsProxyMock
|
||||
private var toneManager: NotificationToneManagerMock
|
||||
@@ -23,7 +23,7 @@ struct NotificationSettingsScreenViewModelTests {
|
||||
init() throws {
|
||||
userNotificationCenter = UserNotificationCenterMock()
|
||||
userNotificationCenter.authorizationStatusReturnValue = .authorized
|
||||
appSettings = AppSettings.volatile()
|
||||
userSettings = UserSettings.volatile()
|
||||
notificationSettingsProxy = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
|
||||
notificationSettingsProxy.getDefaultRoomNotificationModeIsEncryptedIsOneToOneReturnValue = .allMessages
|
||||
notificationSettingsProxy.isRoomMentionEnabledReturnValue = true
|
||||
@@ -31,7 +31,7 @@ struct NotificationSettingsScreenViewModelTests {
|
||||
toneManager = NotificationToneManagerMock()
|
||||
toneManager.customTonesReturnValue = []
|
||||
|
||||
viewModel = NotificationSettingsScreenViewModel(appSettings: appSettings,
|
||||
viewModel = NotificationSettingsScreenViewModel(userSettings: userSettings,
|
||||
userNotificationCenter: userNotificationCenter,
|
||||
notificationToneManager: toneManager,
|
||||
notificationSettingsProxy: notificationSettingsProxy,
|
||||
@@ -42,16 +42,16 @@ struct NotificationSettingsScreenViewModelTests {
|
||||
|
||||
@Test
|
||||
func enableNotifications() {
|
||||
appSettings.enableNotifications = false
|
||||
userSettings.enableNotifications = false
|
||||
context.send(viewAction: .changedEnableNotifications)
|
||||
#expect(appSettings.enableNotifications)
|
||||
#expect(userSettings.enableNotifications)
|
||||
}
|
||||
|
||||
@Test
|
||||
func disableNotifications() {
|
||||
appSettings.enableNotifications = true
|
||||
userSettings.enableNotifications = true
|
||||
context.send(viewAction: .changedEnableNotifications)
|
||||
#expect(!appSettings.enableNotifications)
|
||||
#expect(!userSettings.enableNotifications)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -410,8 +410,8 @@ struct NotificationSettingsScreenViewModelTests {
|
||||
func selectingAlertTonePersistsSelection() {
|
||||
// Given a tone and a manager that persists the selection to app settings
|
||||
let tone = NotificationTone.createBundledSound(label: "Test", filename: "test.caf")
|
||||
toneManager.setSelectedToneClosure = { [appSettings] selectedTone in
|
||||
appSettings.selectedNotificationTone = selectedTone
|
||||
toneManager.setSelectedToneClosure = { [userSettings] selectedTone in
|
||||
userSettings.selectedNotificationTone = selectedTone
|
||||
return NotificationToneManager.libraryLocation
|
||||
}
|
||||
|
||||
@@ -419,21 +419,21 @@ struct NotificationSettingsScreenViewModelTests {
|
||||
context.send(viewAction: .selectAlertTone(tone))
|
||||
|
||||
// Then it is reflected in app settings
|
||||
#expect(appSettings.selectedNotificationTone == tone)
|
||||
#expect(userSettings.selectedNotificationTone == tone)
|
||||
}
|
||||
|
||||
@Test
|
||||
func deletingActiveToneResetsSelection() {
|
||||
// Given the active tone is a custom tone
|
||||
let customTone = NotificationTone.createCustomUserSound(filename: "custom.caf")
|
||||
appSettings.selectedNotificationTone = customTone
|
||||
userSettings.selectedNotificationTone = customTone
|
||||
toneManager.customTonesReturnValue = [customTone]
|
||||
|
||||
// When that tone is deleted
|
||||
context.send(viewAction: .deleteCustomAlertTones([customTone]))
|
||||
|
||||
// Then the selection is cleared, falling back to the default
|
||||
#expect(appSettings.selectedNotificationTone == nil)
|
||||
#expect(userSettings.selectedNotificationTone == nil)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -441,14 +441,14 @@ struct NotificationSettingsScreenViewModelTests {
|
||||
// Given a custom tone is active and a different custom tone also exists
|
||||
let activeTone = NotificationTone.createCustomUserSound(filename: "active.caf")
|
||||
let otherTone = NotificationTone.createCustomUserSound(filename: "other.caf")
|
||||
appSettings.selectedNotificationTone = activeTone
|
||||
userSettings.selectedNotificationTone = activeTone
|
||||
toneManager.customTonesReturnValue = [activeTone, otherTone]
|
||||
|
||||
// When the non-active tone is deleted
|
||||
context.send(viewAction: .deleteCustomAlertTones([otherTone]))
|
||||
|
||||
// Then the active selection is unchanged
|
||||
#expect(appSettings.selectedNotificationTone == activeTone)
|
||||
#expect(userSettings.selectedNotificationTone == activeTone)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -457,7 +457,7 @@ struct NotificationSettingsScreenViewModelTests {
|
||||
let customTone = NotificationTone.createCustomUserSound(filename: "custom.caf")
|
||||
var remainingTones = [customTone]
|
||||
toneManager.customTonesClosure = { remainingTones }
|
||||
let localVM = NotificationSettingsScreenViewModel(appSettings: appSettings,
|
||||
let localVM = NotificationSettingsScreenViewModel(userSettings: userSettings,
|
||||
userNotificationCenter: userNotificationCenter,
|
||||
notificationToneManager: toneManager,
|
||||
notificationSettingsProxy: notificationSettingsProxy,
|
||||
@@ -476,7 +476,7 @@ struct NotificationSettingsScreenViewModelTests {
|
||||
func deleteCustomToneFailurePreservesSelection() {
|
||||
// Given the active tone is a custom tone and deletion will fail
|
||||
let customTone = NotificationTone.createCustomUserSound(filename: "custom.caf")
|
||||
appSettings.selectedNotificationTone = customTone
|
||||
userSettings.selectedNotificationTone = customTone
|
||||
toneManager.deleteCustomToneThrowableError = NSError(domain: "test", code: 1)
|
||||
toneManager.customTonesReturnValue = [customTone]
|
||||
|
||||
@@ -484,7 +484,7 @@ struct NotificationSettingsScreenViewModelTests {
|
||||
context.send(viewAction: .deleteCustomAlertTones([customTone]))
|
||||
|
||||
// Then the selection is unchanged
|
||||
#expect(appSettings.selectedNotificationTone == customTone)
|
||||
#expect(userSettings.selectedNotificationTone == customTone)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -18,7 +18,7 @@ struct NotificationToneManagerTests {
|
||||
private let manager: NotificationToneManager
|
||||
|
||||
init() {
|
||||
manager = NotificationToneManager(appSettings: .volatile())
|
||||
manager = NotificationToneManager(userSettings: .volatile())
|
||||
}
|
||||
|
||||
// MARK: - Deletion
|
||||
|
||||
@@ -15,7 +15,6 @@ import Testing
|
||||
struct PillContextTests {
|
||||
@Test
|
||||
func user() async {
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userIndicatorController = UserIndicatorControllerMock()
|
||||
|
||||
let id = "@test:matrix.org"
|
||||
@@ -28,9 +27,8 @@ struct PillContextTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: userIndicatorController,
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .user(userID: id), font: .preferredFont(forTextStyle: .body)))
|
||||
@@ -49,7 +47,6 @@ struct PillContextTests {
|
||||
|
||||
@Test
|
||||
func ownUser() {
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userIndicatorController = UserIndicatorControllerMock()
|
||||
|
||||
let id = "@test:matrix.org"
|
||||
@@ -62,9 +59,8 @@ struct PillContextTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: userIndicatorController,
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .user(userID: id), font: .preferredFont(forTextStyle: .body)))
|
||||
@@ -74,7 +70,6 @@ struct PillContextTests {
|
||||
|
||||
@Test
|
||||
func allUsers() {
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userIndicatorController = UserIndicatorControllerMock()
|
||||
|
||||
let avatarURL = URL(string: "https://matrix.jpg")
|
||||
@@ -88,9 +83,8 @@ struct PillContextTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: userIndicatorController,
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .allUsers, font: .preferredFont(forTextStyle: .body)))
|
||||
@@ -101,7 +95,6 @@ struct PillContextTests {
|
||||
|
||||
@Test
|
||||
func roomIDMention() {
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userIndicatorController = UserIndicatorControllerMock()
|
||||
|
||||
let proxyMock = JoinedRoomProxyMock(.init())
|
||||
@@ -114,9 +107,8 @@ struct PillContextTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: userIndicatorController,
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .roomID("1"), font: .preferredFont(forTextStyle: .body)))
|
||||
@@ -128,7 +120,6 @@ struct PillContextTests {
|
||||
|
||||
@Test
|
||||
func roomIDMentionMissingRoom() {
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userIndicatorController = UserIndicatorControllerMock()
|
||||
|
||||
let proxyMock = JoinedRoomProxyMock(.init())
|
||||
@@ -139,9 +130,8 @@ struct PillContextTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: userIndicatorController,
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .roomID("1"), font: .preferredFont(forTextStyle: .body)))
|
||||
@@ -153,7 +143,6 @@ struct PillContextTests {
|
||||
|
||||
@Test
|
||||
func roomAliasMention() {
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userIndicatorController = UserIndicatorControllerMock()
|
||||
|
||||
let proxyMock = JoinedRoomProxyMock(.init())
|
||||
@@ -168,9 +157,8 @@ struct PillContextTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: userIndicatorController,
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .roomAlias("#foundation-and-empire:matrix.org"), font: .preferredFont(forTextStyle: .body)))
|
||||
@@ -182,7 +170,6 @@ struct PillContextTests {
|
||||
|
||||
@Test
|
||||
func roomAliasMentionMissingRoom() {
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userIndicatorController = UserIndicatorControllerMock()
|
||||
|
||||
let proxyMock = JoinedRoomProxyMock(.init())
|
||||
@@ -193,9 +180,8 @@ struct PillContextTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: userIndicatorController,
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .roomAlias("#foundation-and-empire:matrix.org"), font: .preferredFont(forTextStyle: .body)))
|
||||
@@ -207,7 +193,6 @@ struct PillContextTests {
|
||||
|
||||
@Test
|
||||
func eventOnRoomIDMention() {
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userIndicatorController = UserIndicatorControllerMock()
|
||||
|
||||
let proxyMock = JoinedRoomProxyMock(.init())
|
||||
@@ -220,9 +205,8 @@ struct PillContextTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: userIndicatorController,
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .event(room: .roomID("1")), font: .preferredFont(forTextStyle: .body)))
|
||||
@@ -234,7 +218,6 @@ struct PillContextTests {
|
||||
|
||||
@Test
|
||||
func eventOnRoomIDMentionMissingRoom() {
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userIndicatorController = UserIndicatorControllerMock()
|
||||
|
||||
let proxyMock = JoinedRoomProxyMock(.init())
|
||||
@@ -245,9 +228,8 @@ struct PillContextTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: userIndicatorController,
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .event(room: .roomID("1")), font: .preferredFont(forTextStyle: .body)))
|
||||
@@ -259,7 +241,6 @@ struct PillContextTests {
|
||||
|
||||
@Test
|
||||
func eventOnRoomAliasMention() {
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userIndicatorController = UserIndicatorControllerMock()
|
||||
|
||||
let proxyMock = JoinedRoomProxyMock(.init())
|
||||
@@ -274,9 +255,8 @@ struct PillContextTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: userIndicatorController,
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .event(room: .roomAlias("#foundation-and-empire:matrix.org")), font: .preferredFont(forTextStyle: .body)))
|
||||
@@ -288,7 +268,6 @@ struct PillContextTests {
|
||||
|
||||
@Test
|
||||
func eventOnRoomAliasMentionMissingRoom() {
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userIndicatorController = UserIndicatorControllerMock()
|
||||
|
||||
let proxyMock = JoinedRoomProxyMock(.init())
|
||||
@@ -299,9 +278,8 @@ struct PillContextTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: userIndicatorController,
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .event(room: .roomAlias("#foundation-and-empire:matrix.org")), font: .preferredFont(forTextStyle: .body)))
|
||||
|
||||
@@ -14,14 +14,14 @@ import UIKit
|
||||
@MainActor
|
||||
struct PresenceServiceTests {
|
||||
let clientProxy: ClientProxyMock
|
||||
let appSettings: AppSettings
|
||||
let userSettings: UserSettings
|
||||
let notificationCenter: NotificationCenter
|
||||
|
||||
let sendsSubject = PassthroughSubject<(presence: ClientProxyPresence, sendImmediately: Bool), Never>()
|
||||
|
||||
init() {
|
||||
clientProxy = ClientProxyMock(.init())
|
||||
appSettings = AppSettings.volatile()
|
||||
userSettings = UserSettings.volatile()
|
||||
notificationCenter = NotificationCenter()
|
||||
|
||||
clientProxy.configurePresenceSendImmediatelyClosure = { [sendsSubject] presence, sendImmediately in
|
||||
@@ -32,14 +32,14 @@ struct PresenceServiceTests {
|
||||
|
||||
private func makeService(initialApplicationState: UIApplication.State) -> PresenceService {
|
||||
PresenceService(clientProxy: clientProxy,
|
||||
appSettings: appSettings,
|
||||
userSettings: userSettings,
|
||||
notificationCenter: notificationCenter,
|
||||
initialApplicationState: initialApplicationState)
|
||||
}
|
||||
|
||||
@Test
|
||||
func serviceSeededActiveWhileSharingReportsOnline() async throws {
|
||||
appSettings.sharePresence = true
|
||||
userSettings.sharePresence = true
|
||||
|
||||
let deferred = deferFulfillment(sendsSubject) { $0.presence == .online }
|
||||
let service = makeService(initialApplicationState: .active)
|
||||
@@ -53,7 +53,7 @@ struct PresenceServiceTests {
|
||||
|
||||
@Test
|
||||
func serviceSeededBackgroundedWhileSharingReportsUnavailable() async throws {
|
||||
appSettings.sharePresence = true
|
||||
userSettings.sharePresence = true
|
||||
|
||||
let deferred = deferFulfillment(sendsSubject) { $0.presence == .unavailable }
|
||||
let service = makeService(initialApplicationState: .background)
|
||||
@@ -66,7 +66,7 @@ struct PresenceServiceTests {
|
||||
|
||||
@Test
|
||||
func serviceSeededActiveWhileNotSharingReportsOffline() async throws {
|
||||
appSettings.sharePresence = false
|
||||
userSettings.sharePresence = false
|
||||
|
||||
let deferred = deferFulfillment(sendsSubject) { $0.presence == .offline }
|
||||
let service = makeService(initialApplicationState: .active)
|
||||
@@ -79,7 +79,7 @@ struct PresenceServiceTests {
|
||||
|
||||
@Test
|
||||
func becomingActiveNotificationWhileSharingReportsOnlineImmediately() async throws {
|
||||
appSettings.sharePresence = true
|
||||
userSettings.sharePresence = true
|
||||
let service = makeService(initialApplicationState: .inactive)
|
||||
|
||||
let deferred = deferFulfillment(sendsSubject) { $0.presence == .online }
|
||||
@@ -93,7 +93,7 @@ struct PresenceServiceTests {
|
||||
|
||||
@Test
|
||||
func resigningActiveNotificationWhileSharingReportsUnavailableImmediately() async throws {
|
||||
appSettings.sharePresence = true
|
||||
userSettings.sharePresence = true
|
||||
let initialDeferred = deferFulfillment(sendsSubject) { $0.presence == .online }
|
||||
let service = makeService(initialApplicationState: .active)
|
||||
_ = try await initialDeferred.fulfill()
|
||||
@@ -109,19 +109,19 @@ struct PresenceServiceTests {
|
||||
|
||||
@Test
|
||||
func togglingSharingWhileActiveDrivesOnlineAndOffline() async throws {
|
||||
appSettings.sharePresence = false
|
||||
userSettings.sharePresence = false
|
||||
let initialDeferred = deferFulfillment(sendsSubject) { $0.presence == .offline }
|
||||
let service = makeService(initialApplicationState: .active)
|
||||
_ = try await initialDeferred.fulfill()
|
||||
|
||||
let onlineDeferred = deferFulfillment(sendsSubject) { $0.presence == .online }
|
||||
appSettings.sharePresence = true
|
||||
userSettings.sharePresence = true
|
||||
let online = try await onlineDeferred.fulfill()
|
||||
#expect(online.presence == .online)
|
||||
#expect(online.sendImmediately)
|
||||
|
||||
let offlineDeferred = deferFulfillment(sendsSubject) { $0.presence == .offline }
|
||||
appSettings.sharePresence = false
|
||||
userSettings.sharePresence = false
|
||||
let offline = try await offlineDeferred.fulfill()
|
||||
#expect(offline.presence == .offline)
|
||||
#expect(offline.sendImmediately)
|
||||
@@ -131,7 +131,7 @@ struct PresenceServiceTests {
|
||||
|
||||
@Test
|
||||
func repeatingTheSameStateSendsOnlyOnce() async throws {
|
||||
appSettings.sharePresence = true
|
||||
userSettings.sharePresence = true
|
||||
|
||||
let initialDeferred = deferFulfillment(sendsSubject) { $0.presence == .online }
|
||||
let service = makeService(initialApplicationState: .active)
|
||||
@@ -148,7 +148,7 @@ struct PresenceServiceTests {
|
||||
|
||||
@Test
|
||||
func failedImmediateSendIsNotRetriedUntilTheDesiredPresenceChanges() async throws {
|
||||
appSettings.sharePresence = true
|
||||
userSettings.sharePresence = true
|
||||
clientProxy.configurePresenceSendImmediatelyClosure = { [sendsSubject] presence, sendImmediately in
|
||||
sendsSubject.send((presence, sendImmediately))
|
||||
return presence == .online ? .failure(.forbiddenAccess) : .success(())
|
||||
@@ -173,7 +173,7 @@ struct PresenceServiceTests {
|
||||
|
||||
@Test
|
||||
func newerTransitionWinsWhenAnEarlierSendIsInFlight() async throws {
|
||||
appSettings.sharePresence = true
|
||||
userSettings.sharePresence = true
|
||||
|
||||
let (onlineStartedStream, onlineStartedContinuation) = AsyncStream<Void>.makeStream()
|
||||
let (resumeOnlineSendStream, resumeOnlineSendContinuation) = AsyncStream<Void>.makeStream()
|
||||
@@ -206,7 +206,7 @@ struct PresenceServiceTests {
|
||||
|
||||
@Test
|
||||
func deinitCancelsPendingSend() async throws {
|
||||
appSettings.sharePresence = true
|
||||
userSettings.sharePresence = true
|
||||
|
||||
let (onlineStartedStream, onlineStartedContinuation) = AsyncStream.makeStream(of: Void.self)
|
||||
let (onlineFinishedStream, onlineFinishedContinuation) = AsyncStream.makeStream(of: Void.self)
|
||||
|
||||
@@ -167,7 +167,7 @@ struct RoomDetailsEditScreenViewModelTests {
|
||||
userIndicatorController = UserIndicatorControllerMock()
|
||||
viewModel = .init(roomProxy: JoinedRoomProxyMock(roomProxyConfiguration),
|
||||
userSession: UserSessionMock(.init()),
|
||||
mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: .volatile()),
|
||||
mediaUploadingPreprocessor: MediaUploadingPreprocessor(userSettings: .volatile()),
|
||||
userIndicatorController: userIndicatorController)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -44,7 +44,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", members: mockedMembers, joinRule: .public))
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -65,7 +65,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", members: mockedMembers))
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -87,7 +87,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", members: mockedMembers))
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -146,7 +146,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -168,7 +168,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -201,7 +201,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init(clientProxy: clientProxy)),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -233,7 +233,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -266,7 +266,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init(clientProxy: clientProxy)),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -300,7 +300,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
powerLevelsConfiguration: .init(canUserInvite: false)))
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -318,7 +318,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", members: mockedMembers, joinRule: .public))
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -367,7 +367,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -403,7 +403,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -439,7 +439,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -460,7 +460,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, members: mockedMembers))
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -481,7 +481,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, members: mockedMembers))
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -500,7 +500,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneThrowableError = NotificationSettingsError.Generic(msg: "error")
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -709,7 +709,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, knockRequestsState: .loaded(mockedRequests), joinRule: .knock))
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -731,7 +731,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, knockRequestsState: .loading, joinRule: .knock))
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -755,7 +755,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
powerLevelsConfiguration: .init(canUserInvite: false)))
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -779,7 +779,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, members: mockedMembers, knockRequestsState: .loaded(mockedRequests), joinRule: .knock))
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
@@ -807,7 +807,7 @@ struct RoomDetailsScreenViewModelTests {
|
||||
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||
userSession: UserSessionMock(.init()),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
|
||||
@@ -19,10 +19,10 @@ final class RoomFlowCoordinatorTests {
|
||||
var navigationStackCoordinator: NavigationStackCoordinator!
|
||||
var cancellables = Set<AnyCancellable>()
|
||||
|
||||
private let appSettings: AppSettings
|
||||
private let userSettings: UserSettings
|
||||
|
||||
init() {
|
||||
appSettings = AppSettings.volatile()
|
||||
userSettings = UserSettings.volatile()
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -230,7 +230,7 @@ final class RoomFlowCoordinatorTests {
|
||||
|
||||
@Test
|
||||
func threadedEventRoutes() async throws {
|
||||
appSettings.threadsEnabled = true
|
||||
userSettings.threadsEnabled = true
|
||||
setupRoomFlowCoordinator()
|
||||
|
||||
// Navigate directly to the threaded event
|
||||
@@ -526,10 +526,10 @@ final class RoomFlowCoordinatorTests {
|
||||
bugReportService: BugReportServiceMock(.init()),
|
||||
elementCallService: ElementCallServiceMock(.init()),
|
||||
timelineControllerFactory: timelineControllerFactory,
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: userSettings),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
userSettings: userSettings,
|
||||
appHooks: AppHooks(),
|
||||
analytics: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
|
||||
@@ -11,14 +11,14 @@ import Testing
|
||||
|
||||
@MainActor
|
||||
final class RoomListFiltersStateTests {
|
||||
var appSettings: AppSettings
|
||||
var userSettings: UserSettings
|
||||
var state: RoomListFiltersState
|
||||
/// The filters that aren't hidden behind a feature flag.
|
||||
let defaultFilters = RoomListFilter.allCases.filter { $0 != .mentions && $0 != .lowPriority }
|
||||
|
||||
init() {
|
||||
appSettings = AppSettings.volatile()
|
||||
state = RoomListFiltersState(appSettings: appSettings)
|
||||
userSettings = UserSettings.volatile()
|
||||
state = RoomListFiltersState(userSettings: userSettings)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -148,12 +148,12 @@ final class RoomListFiltersStateTests {
|
||||
// MARK: - Helpers
|
||||
|
||||
private func enableLowPriorityFeature() {
|
||||
appSettings.lowPriorityFilterEnabled = true
|
||||
state = RoomListFiltersState(appSettings: appSettings)
|
||||
userSettings.lowPriorityFilterEnabled = true
|
||||
state = RoomListFiltersState(userSettings: userSettings)
|
||||
}
|
||||
|
||||
private func enableMentionsFeature() {
|
||||
appSettings.mentionsFilterEnabled = true
|
||||
state = RoomListFiltersState(appSettings: appSettings)
|
||||
userSettings.mentionsFilterEnabled = true
|
||||
state = RoomListFiltersState(userSettings: userSettings)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,16 +51,16 @@ struct RoomMembersFlowCoordinatorTests {
|
||||
let clientProxy = ClientProxyMock(.init())
|
||||
clientProxy.directRoomForUserIDReturnValue = .success(nil)
|
||||
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userSettings = UserSettings.volatile()
|
||||
|
||||
let flowParameters = CommonFlowParameters(userSession: UserSessionMock(.init(clientProxy: clientProxy)),
|
||||
bugReportService: BugReportServiceMock(.init()),
|
||||
elementCallService: ElementCallServiceMock(.init()),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: userSettings),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
userSettings: userSettings,
|
||||
appHooks: AppHooks(),
|
||||
analytics: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
|
||||
@@ -16,12 +16,6 @@ import Testing
|
||||
|
||||
@MainActor
|
||||
final class RoomScreenViewModelTests {
|
||||
private let appSettings: AppSettings
|
||||
|
||||
init() async throws {
|
||||
appSettings = AppSettings.volatile()
|
||||
}
|
||||
|
||||
@Test
|
||||
func pinnedEventsBanner() async throws {
|
||||
var configuration = JoinedRoomProxyMockConfiguration()
|
||||
@@ -42,7 +36,6 @@ final class RoomScreenViewModelTests {
|
||||
roomProxy: roomProxyMock,
|
||||
initialSelectedPinnedEventID: nil,
|
||||
ongoingCallRoomIDPublisher: .init(.init(nil)),
|
||||
appSettings: appSettings,
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
@@ -122,7 +115,6 @@ final class RoomScreenViewModelTests {
|
||||
roomProxy: roomProxyMock,
|
||||
initialSelectedPinnedEventID: "test1",
|
||||
ongoingCallRoomIDPublisher: .init(.init(nil)),
|
||||
appSettings: appSettings,
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
@@ -161,7 +153,9 @@ final class RoomScreenViewModelTests {
|
||||
|
||||
@Test
|
||||
func pinnedEventsBannerThreadedSelection() async throws {
|
||||
appSettings.threadsEnabled = true
|
||||
let userSettings = UserSettings.volatile()
|
||||
userSettings.threadsEnabled = true
|
||||
let userSession = UserSessionMock(.init(userSettings: userSettings))
|
||||
|
||||
let roomProxyMock = JoinedRoomProxyMock(.init())
|
||||
let eventMock = TimelineEventSDKMock()
|
||||
@@ -178,11 +172,10 @@ final class RoomScreenViewModelTests {
|
||||
.event(.init(item: EventTimelineItem(configuration: .init(eventID: "test3")), uniqueID: .init("3")))]
|
||||
roomProxyMock.pinnedEventsTimelineReturnValue = .success(pinnedTimelineMock)
|
||||
|
||||
let viewModel = RoomScreenViewModel(userSession: UserSessionMock(.init()),
|
||||
let viewModel = RoomScreenViewModel(userSession: userSession,
|
||||
roomProxy: roomProxyMock,
|
||||
initialSelectedPinnedEventID: "test1",
|
||||
ongoingCallRoomIDPublisher: .init(.init(nil)),
|
||||
appSettings: appSettings,
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
@@ -238,7 +231,6 @@ final class RoomScreenViewModelTests {
|
||||
roomProxy: roomProxyMock,
|
||||
initialSelectedPinnedEventID: nil,
|
||||
ongoingCallRoomIDPublisher: .init(.init(nil)),
|
||||
appSettings: appSettings,
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
@@ -273,7 +265,6 @@ final class RoomScreenViewModelTests {
|
||||
roomProxy: roomProxyMock,
|
||||
initialSelectedPinnedEventID: nil,
|
||||
ongoingCallRoomIDPublisher: ongoingCallRoomIDSubject.asCurrentValuePublisher(),
|
||||
appSettings: appSettings,
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
@@ -320,7 +311,6 @@ final class RoomScreenViewModelTests {
|
||||
roomProxy: roomProxyMock,
|
||||
initialSelectedPinnedEventID: nil,
|
||||
ongoingCallRoomIDPublisher: .init(.init(nil)),
|
||||
appSettings: appSettings,
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
@@ -342,7 +332,6 @@ final class RoomScreenViewModelTests {
|
||||
roomProxy: roomProxyMock,
|
||||
initialSelectedPinnedEventID: nil,
|
||||
ongoingCallRoomIDPublisher: .init(.init(nil)),
|
||||
appSettings: appSettings,
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
@@ -375,7 +364,6 @@ final class RoomScreenViewModelTests {
|
||||
roomProxy: roomProxyMock,
|
||||
initialSelectedPinnedEventID: nil,
|
||||
ongoingCallRoomIDPublisher: .init(.init(nil)),
|
||||
appSettings: appSettings,
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
@@ -403,7 +391,6 @@ final class RoomScreenViewModelTests {
|
||||
roomProxy: roomProxyMock,
|
||||
initialSelectedPinnedEventID: nil,
|
||||
ongoingCallRoomIDPublisher: .init(.init(nil)),
|
||||
appSettings: appSettings,
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
@@ -422,7 +409,6 @@ final class RoomScreenViewModelTests {
|
||||
roomProxy: roomProxyMock,
|
||||
initialSelectedPinnedEventID: nil,
|
||||
ongoingCallRoomIDPublisher: .init(.init(nil)),
|
||||
appSettings: appSettings,
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
@@ -448,7 +434,6 @@ final class RoomScreenViewModelTests {
|
||||
roomProxy: roomProxyMock,
|
||||
initialSelectedPinnedEventID: nil,
|
||||
ongoingCallRoomIDPublisher: .init(.init(nil)),
|
||||
appSettings: appSettings,
|
||||
appHooks: AppHooks(),
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
|
||||
@@ -17,7 +17,7 @@ final class RoomSummaryProviderTests {
|
||||
.all(filters: [.space, .invite])]),
|
||||
.deduplicateVersions]
|
||||
|
||||
var appSettings: AppSettings!
|
||||
var userSettings: UserSettings!
|
||||
var roomList: RoomListSDKMock!
|
||||
var dynamicEntriesController: RoomListDynamicEntriesControllerSDKMock!
|
||||
var roomSummaryProvider: RoomSummaryProvider!
|
||||
@@ -90,8 +90,8 @@ final class RoomSummaryProviderTests {
|
||||
// MARK: - Helpers
|
||||
|
||||
private func setup(isLowPriorityFilterEnabled: Bool = false) {
|
||||
appSettings = AppSettings.volatile()
|
||||
appSettings.lowPriorityFilterEnabled = isLowPriorityFilterEnabled
|
||||
userSettings = UserSettings.volatile()
|
||||
userSettings.lowPriorityFilterEnabled = isLowPriorityFilterEnabled
|
||||
|
||||
let stateEventStringBuilder = RoomStateEventStringBuilder(userID: "@me:matrix.org")
|
||||
let attributedStringBuilder = AttributedStringBuilder(mentionBuilder: MentionBuilder())
|
||||
@@ -104,7 +104,7 @@ final class RoomSummaryProviderTests {
|
||||
eventStringBuilder: eventStringBuilder,
|
||||
name: "Test",
|
||||
notificationSettings: NotificationSettingsProxyMock(with: .init()),
|
||||
appSettings: appSettings)
|
||||
userSettings: userSettings)
|
||||
|
||||
dynamicEntriesController = RoomListDynamicEntriesControllerSDKMock()
|
||||
dynamicEntriesController.setFilterKindReturnValue = true
|
||||
|
||||
@@ -14,7 +14,7 @@ struct SearchScreenViewModelTests {
|
||||
let viewModel: SearchScreenViewModelProtocol
|
||||
let searchService: SearchServiceProxyMock
|
||||
let userIndicatorController: UserIndicatorControllerMock
|
||||
let appSettings: AppSettings
|
||||
let userSettings: UserSettings
|
||||
/// The rooms known to the client, empty until the room list loads.
|
||||
let staticRoomListSubject = CurrentValueSubject<[RoomSummary], Never>([])
|
||||
/// Fires with the query each time the (async, debounced) message search runs.
|
||||
@@ -49,13 +49,13 @@ struct SearchScreenViewModelTests {
|
||||
staticRoomListSubject.value.first { $0.id == identifier }
|
||||
}
|
||||
|
||||
appSettings = AppSettings.volatile()
|
||||
userSettings = UserSettings.volatile()
|
||||
|
||||
viewModel = SearchScreenViewModel(roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))),
|
||||
clientProxy: clientProxy,
|
||||
mediaProvider: MediaProviderMock(.init()),
|
||||
userIndicatorController: userIndicatorController,
|
||||
appSettings: appSettings)
|
||||
userSettings: userSettings)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -77,7 +77,7 @@ struct SearchScreenViewModelTests {
|
||||
clientProxy: clientProxy,
|
||||
mediaProvider: MediaProviderMock(.init()),
|
||||
userIndicatorController: userIndicatorController,
|
||||
appSettings: appSettings)
|
||||
userSettings: userSettings)
|
||||
|
||||
let deferred = deferFulfillment(viewModel.context.observe(\.viewState.rooms)) { !$0.isEmpty }
|
||||
viewModel.context.searchQuery = "room"
|
||||
@@ -130,13 +130,13 @@ struct SearchScreenViewModelTests {
|
||||
context.searchQuery = "Second"
|
||||
context.send(viewAction: .selectRoom(roomID: "2"))
|
||||
|
||||
#expect(appSettings.searchBreadcrumbs == [.room(roomID: "2"), .query("Second")])
|
||||
#expect(userSettings.searchBreadcrumbs == [.room(roomID: "2"), .query("Second")])
|
||||
|
||||
// Selecting the same room again from the empty state only bumps it back to the top.
|
||||
context.searchQuery = ""
|
||||
context.send(viewAction: .selectRoom(roomID: "2"))
|
||||
|
||||
#expect(appSettings.searchBreadcrumbs == [.room(roomID: "2"), .query("Second")])
|
||||
#expect(userSettings.searchBreadcrumbs == [.room(roomID: "2"), .query("Second")])
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -144,7 +144,7 @@ struct SearchScreenViewModelTests {
|
||||
staticRoomListSubject.send([.mock(id: "2", name: "Second")])
|
||||
|
||||
let deferred = deferFulfillment(context.observe(\.viewState.breadcrumbs)) { $0.count == 2 }
|
||||
appSettings.searchBreadcrumbs = [.query("Second"), .room(roomID: "2")]
|
||||
userSettings.searchBreadcrumbs = [.query("Second"), .room(roomID: "2")]
|
||||
try await deferred.fulfill()
|
||||
|
||||
#expect(context.viewState.breadcrumbs.map(\.id) == ["query-Second", "room-2"])
|
||||
@@ -154,7 +154,7 @@ struct SearchScreenViewModelTests {
|
||||
@Test
|
||||
func roomBreadcrumbsAreDisplayedAfterTheRoomListLoads() async throws {
|
||||
var deferred = deferFulfillment(context.observe(\.viewState.breadcrumbs)) { $0.count == 1 }
|
||||
appSettings.searchBreadcrumbs = [.query("Second"), .room(roomID: "2")]
|
||||
userSettings.searchBreadcrumbs = [.query("Second"), .room(roomID: "2")]
|
||||
try await deferred.fulfill()
|
||||
|
||||
#expect(context.viewState.breadcrumbs.map(\.id) == ["query-Second"])
|
||||
|
||||
@@ -457,9 +457,9 @@ final class SecurityAndPrivacyScreenViewModelTests {
|
||||
topLevelSpaces: [SpaceServiceRoom] = [],
|
||||
joinRule: ElementX.JoinRule,
|
||||
forceDisableE2EE: Bool = false) {
|
||||
let appSettings = AppSettings.volatile()
|
||||
appSettings.knockingEnabled = true
|
||||
appSettings.forceDisableE2EE.applyRemoteValue(forceDisableE2EE)
|
||||
let userSettings = UserSettings.volatile()
|
||||
userSettings.knockingEnabled = true
|
||||
userSettings.forceDisableE2EE.applyRemoteValue(forceDisableE2EE)
|
||||
roomProxy = JoinedRoomProxyMock(.init(isEncrypted: false,
|
||||
canonicalAlias: "#room:matrix.org",
|
||||
members: .allMembersAsCreator,
|
||||
@@ -473,6 +473,6 @@ final class SecurityAndPrivacyScreenViewModelTests {
|
||||
spaceServiceConfiguration: .init(topLevelSpaces: topLevelSpaces,
|
||||
joinedParentSpaces: joinedParentSpaces))),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
appSettings: appSettings)
|
||||
userSettings: userSettings)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ struct SessionVerificationViewModelTests {
|
||||
sessionVerificationController = SessionVerificationControllerProxyMock.configureMock()
|
||||
viewModel = SessionVerificationScreenViewModel(sessionVerificationControllerProxy: sessionVerificationController,
|
||||
flow: .deviceInitiator,
|
||||
appSettings: .volatile(),
|
||||
userSettings: .volatile(),
|
||||
mediaProvider: MediaProviderMock(.init()))
|
||||
context = viewModel.context
|
||||
}
|
||||
|
||||
@@ -177,7 +177,7 @@ struct SettingsScreenViewModelTests {
|
||||
private mutating func setupViewModel(status: UserStatus = .init()) {
|
||||
clientProxy = ClientProxyMock(.init(userID: "", status: status))
|
||||
viewModel = SettingsScreenViewModel(userSession: UserSessionMock(.init(clientProxy: clientProxy)),
|
||||
appSettings: AppSettings.volatile(),
|
||||
userSettings: UserSettings.volatile(),
|
||||
isBugReportServiceEnabled: true,
|
||||
isInSecondaryWindow: false,
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
|
||||
@@ -210,8 +210,6 @@ struct TimelineInteractionHandlerTests {
|
||||
let userSession = UserSessionMock(.init())
|
||||
userSession.voiceMessageMediaManager = voiceMessageMediaManager
|
||||
|
||||
let appSettings = AppSettings.volatile()
|
||||
|
||||
return TimelineInteractionHandler(roomProxy: JoinedRoomProxyMock(.init()),
|
||||
timelineController: TimelineControllerMock(.init(timelineItems: timelineItems)),
|
||||
userSession: userSession,
|
||||
@@ -219,9 +217,8 @@ struct TimelineInteractionHandlerTests {
|
||||
voiceMessageRecorder: voiceMessageRecorder,
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
}
|
||||
|
||||
@@ -123,7 +123,7 @@ struct TimelineItemMenuActionProviderTests {
|
||||
isViewSourceEnabled: true,
|
||||
areThreadsEnabled: true,
|
||||
timelineKind: timelineKind,
|
||||
emojiProvider: EmojiProvider(appSettings: .volatile()))
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()))
|
||||
.makeActions()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -294,17 +294,14 @@ final class TimelineViewModelTests {
|
||||
|
||||
let timelineController = TimelineControllerMock(.init(roomProxy: roomProxy, timelineItems: items))
|
||||
|
||||
let appSettings = AppSettings.volatile()
|
||||
|
||||
let viewModel = TimelineViewModel(roomProxy: roomProxy,
|
||||
timelineController: timelineController,
|
||||
userSession: UserSessionMock(.init()),
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
return (viewModel, roomProxy, timelineProxy, timelineController)
|
||||
@@ -320,8 +317,6 @@ final class TimelineViewModelTests {
|
||||
addReadReceipts: receipts)
|
||||
let id = message.id
|
||||
|
||||
let appSettings = AppSettings.volatile()
|
||||
|
||||
// When showing them in a timeline.
|
||||
let timelineController = TimelineControllerMock(.init(timelineItems: [message]))
|
||||
let viewModel = TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "", members: [RoomMemberProxyMock.mockAlice, RoomMemberProxyMock.mockCharlie])),
|
||||
@@ -330,9 +325,8 @@ final class TimelineViewModelTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
|
||||
@@ -346,8 +340,6 @@ final class TimelineViewModelTests {
|
||||
|
||||
@Test
|
||||
func showManageUserAsAdmin() async throws {
|
||||
let appSettings = AppSettings.volatile()
|
||||
|
||||
let viewModel = TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "",
|
||||
members: [RoomMemberProxyMock.mockAdmin,
|
||||
RoomMemberProxyMock.mockAlice],
|
||||
@@ -357,9 +349,8 @@ final class TimelineViewModelTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
|
||||
@@ -385,8 +376,6 @@ final class TimelineViewModelTests {
|
||||
|
||||
@Test
|
||||
func showDetailsForAnAdmin() async throws {
|
||||
let appSettings = AppSettings.volatile()
|
||||
|
||||
let viewModel = TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "",
|
||||
members: [RoomMemberProxyMock.mockAdmin,
|
||||
RoomMemberProxyMock.mockAlice],
|
||||
@@ -396,9 +385,8 @@ final class TimelineViewModelTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
|
||||
@@ -424,8 +412,6 @@ final class TimelineViewModelTests {
|
||||
|
||||
@Test
|
||||
func showDetailsForABannedUser() async throws {
|
||||
let appSettings = AppSettings.volatile()
|
||||
|
||||
let viewModel = TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "",
|
||||
members: [RoomMemberProxyMock.mockAdmin,
|
||||
RoomMemberProxyMock.mockBanned[0]],
|
||||
@@ -435,9 +421,8 @@ final class TimelineViewModelTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
|
||||
@@ -466,8 +451,6 @@ final class TimelineViewModelTests {
|
||||
|
||||
@Test
|
||||
func pinnedEvents() async throws {
|
||||
let appSettings = AppSettings.volatile()
|
||||
|
||||
var configuration = JoinedRoomProxyMockConfiguration(name: "",
|
||||
pinnedEventIDs: .init(["test1"]))
|
||||
let roomProxyMock = JoinedRoomProxyMock(configuration)
|
||||
@@ -480,9 +463,8 @@ final class TimelineViewModelTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
#expect(configuration.pinnedEventIDs == viewModel.context.viewState.pinnedEventIDs)
|
||||
@@ -497,8 +479,6 @@ final class TimelineViewModelTests {
|
||||
|
||||
@Test
|
||||
func canUserPinEvents() async throws {
|
||||
let appSettings = AppSettings.volatile()
|
||||
|
||||
let configuration = JoinedRoomProxyMockConfiguration(name: "",
|
||||
powerLevelsConfiguration: .init(canUserPin: true))
|
||||
let roomProxyMock = JoinedRoomProxyMock(configuration)
|
||||
@@ -511,9 +491,8 @@ final class TimelineViewModelTests {
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: UserIndicatorControllerMock(),
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
|
||||
@@ -915,15 +894,15 @@ final class TimelineViewModelTests {
|
||||
@Test
|
||||
func disablingTheFlagClearsTheSelection() async throws {
|
||||
let items = [TextRoomTimelineItem(eventID: "$1")]
|
||||
let appSettings = AppSettings.volatile()
|
||||
appSettings.messageMultiSelectEnabled = true
|
||||
let viewModel = makeViewModel(timelineController: TimelineControllerMock(.init(timelineItems: items)), appSettings: appSettings)
|
||||
let userSettings = UserSettings.volatile()
|
||||
userSettings.messageMultiSelectEnabled = true
|
||||
let viewModel = makeViewModel(timelineController: TimelineControllerMock(.init(timelineItems: items)), userSettings: userSettings)
|
||||
|
||||
startSelection(items[0].id, in: viewModel)
|
||||
#expect(viewModel.state.messageSelection.isActive)
|
||||
|
||||
let deferred = deferFulfillment(viewModel.context.$viewState) { !$0.messageSelection.isEnabled && !$0.messageSelection.isActive }
|
||||
appSettings.messageMultiSelectEnabled = false
|
||||
userSettings.messageMultiSelectEnabled = false
|
||||
try await deferred.fulfill()
|
||||
}
|
||||
|
||||
@@ -933,17 +912,16 @@ final class TimelineViewModelTests {
|
||||
focussedEventID: String? = nil,
|
||||
timelineController: TimelineControllerProtocol,
|
||||
userIndicatorController: UserIndicatorControllerProtocol = UserIndicatorControllerMock(),
|
||||
appSettings: AppSettings = .volatile()) -> TimelineViewModel {
|
||||
userSettings: UserSettings = .volatile()) -> TimelineViewModel {
|
||||
TimelineViewModel(roomProxy: roomProxy ?? JoinedRoomProxyMock(.init(name: "")),
|
||||
focussedEventID: focussedEventID,
|
||||
timelineController: timelineController,
|
||||
userSession: UserSessionMock(.init()),
|
||||
userSession: UserSessionMock(.init(userSettings: userSettings)),
|
||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||
userIndicatorController: userIndicatorController,
|
||||
appMediator: AppMediatorMock(.init()),
|
||||
appSettings: appSettings,
|
||||
analyticsService: AnalyticsServiceMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: .volatile()),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()))
|
||||
}
|
||||
@@ -961,11 +939,11 @@ final class TimelineViewModelTests {
|
||||
|
||||
private func makeSelectionViewModel(timelineController: TimelineControllerProtocol,
|
||||
userIndicatorController: UserIndicatorControllerProtocol = UserIndicatorControllerMock()) -> TimelineViewModel {
|
||||
let appSettings = AppSettings.volatile()
|
||||
appSettings.messageMultiSelectEnabled = true
|
||||
let userSettings = UserSettings.volatile()
|
||||
userSettings.messageMultiSelectEnabled = true
|
||||
return makeViewModel(timelineController: timelineController,
|
||||
userIndicatorController: userIndicatorController,
|
||||
appSettings: appSettings)
|
||||
userSettings: userSettings)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ struct UserDetailsEditScreenViewModelTests {
|
||||
|
||||
init() {
|
||||
viewModel = .init(userSession: UserSessionMock(.init()),
|
||||
mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: .volatile()),
|
||||
mediaUploadingPreprocessor: MediaUploadingPreprocessor(userSettings: .volatile()),
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
}
|
||||
|
||||
|
||||
@@ -48,16 +48,16 @@ struct UserSessionFlowCoordinatorTests {
|
||||
appMediator.networkMonitor = networkMonitor
|
||||
|
||||
userIndicatorController = UserIndicatorControllerMock()
|
||||
let appSettings = AppSettings.volatile()
|
||||
let userSettings = UserSettings.volatile()
|
||||
|
||||
let flowParameters = CommonFlowParameters(userSession: UserSessionMock(.init(clientProxy: clientProxy)),
|
||||
bugReportService: BugReportServiceMock(.init()),
|
||||
elementCallService: ElementCallServiceMock(.init()),
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()),
|
||||
emojiProvider: EmojiProvider(appSettings: appSettings),
|
||||
emojiProvider: EmojiProvider(userSettings: userSettings),
|
||||
linkMetadataProvider: LinkMetadataProvider(),
|
||||
appMediator: appMediator,
|
||||
appSettings: appSettings,
|
||||
userSettings: userSettings,
|
||||
appHooks: AppHooks(),
|
||||
analytics: AnalyticsServiceMock(.init()),
|
||||
userIndicatorController: userIndicatorController,
|
||||
|
||||
Reference in New Issue
Block a user