Address the real lifetime issue of the SDK's Client by making Context.mediaProvider weak. (#4466)

This reverts commit 927aea4bfe.
This commit is contained in:
Doug
2025-09-05 18:18:14 +01:00
committed by GitHub
parent f30f3b1a63
commit c794144ef1
58 changed files with 380 additions and 161 deletions
@@ -98,7 +98,7 @@ class ComposerToolbarViewModelTests: XCTestCase {
viewModel = ComposerToolbarViewModel(roomProxy: JoinedRoomProxyMock(.init()),
wysiwygViewModel: wysiwygViewModel,
completionSuggestionService: mockCompletionSuggestionService,
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
appSettings: ServiceLocator.shared.settings,
analyticsService: ServiceLocator.shared.analytics,
@@ -683,7 +683,7 @@ class ComposerToolbarViewModelTests: XCTestCase {
viewModel = ComposerToolbarViewModel(roomProxy: roomProxyMock,
wysiwygViewModel: wysiwygViewModel,
completionSuggestionService: mockCompletionSuggestionService,
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
appSettings: ServiceLocator.shared.settings,
analyticsService: ServiceLocator.shared.analytics,
@@ -727,7 +727,7 @@ class ComposerToolbarViewModelTests: XCTestCase {
viewModel = ComposerToolbarViewModel(roomProxy: roomProxyMock,
wysiwygViewModel: wysiwygViewModel,
completionSuggestionService: mockCompletionSuggestionService,
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
appSettings: ServiceLocator.shared.settings,
analyticsService: ServiceLocator.shared.analytics,
@@ -761,7 +761,7 @@ class ComposerToolbarViewModelTests: XCTestCase {
viewModel = ComposerToolbarViewModel(roomProxy: roomProxyMock,
wysiwygViewModel: wysiwygViewModel,
completionSuggestionService: mockCompletionSuggestionService,
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
appSettings: ServiceLocator.shared.settings,
analyticsService: ServiceLocator.shared.analytics,
@@ -796,7 +796,7 @@ class ComposerToolbarViewModelTests: XCTestCase {
roomProxy: JoinedRoomProxyMock(.init()),
wysiwygViewModel: wysiwygViewModel,
completionSuggestionService: completionSuggestionServiceMock,
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
appSettings: ServiceLocator.shared.settings,
analyticsService: ServiceLocator.shared.analytics,
@@ -19,7 +19,7 @@ class GlobalSearchScreenViewModelTests: XCTestCase {
override func setUpWithError() throws {
cancellables.removeAll()
viewModel = GlobalSearchScreenViewModel(roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
context = viewModel.context
}
@@ -24,7 +24,7 @@ class KnockRequestsListScreenViewModelTests: XCTestCase {
func testLoadingState() async throws {
let roomProxyMock = JoinedRoomProxyMock(.init(knockRequestsState: .loading, joinRule: .knock))
viewModel = KnockRequestsListScreenViewModel(roomProxy: roomProxyMock,
mediaProvider: MediaProviderMock(),
mediaProvider: .mock,
userIndicatorController: UserIndicatorControllerMock())
let deferred = deferFulfillment(context.$viewState) { state in
@@ -42,7 +42,7 @@ class KnockRequestsListScreenViewModelTests: XCTestCase {
func testEmptyState() async throws {
let roomProxyMock = JoinedRoomProxyMock(.init(knockRequestsState: .loaded([]), joinRule: .knock))
viewModel = KnockRequestsListScreenViewModel(roomProxy: roomProxyMock,
mediaProvider: MediaProviderMock(),
mediaProvider: .mock,
userIndicatorController: UserIndicatorControllerMock())
let deferred = deferFulfillment(context.$viewState) { state in
@@ -66,7 +66,7 @@ class KnockRequestsListScreenViewModelTests: XCTestCase {
ownUserID: RoomMemberProxyMock.mockAdmin.userID,
joinRule: .knock))
viewModel = KnockRequestsListScreenViewModel(roomProxy: roomProxyMock,
mediaProvider: MediaProviderMock(),
mediaProvider: .mock,
userIndicatorController: UserIndicatorControllerMock())
var deferred = deferFulfillment(context.$viewState) { state in
@@ -141,7 +141,7 @@ class KnockRequestsListScreenViewModelTests: XCTestCase {
KnockRequestProxyMock(.init(eventID: "4", userID: "@dan:matrix.org"))]),
joinRule: .knock))
viewModel = KnockRequestsListScreenViewModel(roomProxy: roomProxyMock,
mediaProvider: MediaProviderMock(),
mediaProvider: .mock,
userIndicatorController: UserIndicatorControllerMock())
var deferred = deferFulfillment(context.$viewState) { state in
@@ -189,7 +189,7 @@ class KnockRequestsListScreenViewModelTests: XCTestCase {
ownUserID: RoomMemberProxyMock.mockAdmin.userID,
joinRule: .invite))
viewModel = KnockRequestsListScreenViewModel(roomProxy: roomProxyMock,
mediaProvider: MediaProviderMock(),
mediaProvider: .mock,
userIndicatorController: UserIndicatorControllerMock())
let deferred = deferFulfillment(context.$viewState) { state in
@@ -210,7 +210,7 @@ class KnockRequestsListScreenViewModelTests: XCTestCase {
joinRule: .knock,
powerLevelsConfiguration: .init(canUserInvite: false)))
viewModel = KnockRequestsListScreenViewModel(roomProxy: roomProxyMock,
mediaProvider: MediaProviderMock(),
mediaProvider: .mock,
userIndicatorController: UserIndicatorControllerMock())
let deferred = deferFulfillment(context.$viewState) { state in
@@ -32,7 +32,7 @@ class ManageRoomMemberSheetViewModelTests: XCTestCase {
roomProxy: roomProxy,
userIndicatorController: UserIndicatorControllerMock(),
analyticsService: ServiceLocator.shared.analytics,
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
let deferred = deferFulfillment(context.observe(\.viewState.bindings.alertInfo)) { $0 != nil }
let deferredAction = deferFulfillment(viewModel.actions) { action in
@@ -63,7 +63,7 @@ class ManageRoomMemberSheetViewModelTests: XCTestCase {
roomProxy: roomProxy,
userIndicatorController: UserIndicatorControllerMock(),
analyticsService: ServiceLocator.shared.analytics,
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
let deferred = deferFulfillment(context.observe(\.viewState.bindings.alertInfo)) { $0 != nil }
context.send(viewAction: .ban)
@@ -85,7 +85,7 @@ class ManageRoomMemberSheetViewModelTests: XCTestCase {
roomProxy: roomProxy,
userIndicatorController: UserIndicatorControllerMock(),
analyticsService: ServiceLocator.shared.analytics,
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
let deferredAction = deferFulfillment(viewModel.actions) { action in
action == .dismiss(shouldShowDetails: true)
@@ -196,7 +196,7 @@ class RoomChangeRolesScreenViewModelTests: XCTestCase {
roomProxy = JoinedRoomProxyMock(.init(members: .allMembersAsAdmin))
viewModel = RoomChangeRolesScreenViewModel(mode: mode,
roomProxy: roomProxy,
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
userIndicatorController: UserIndicatorControllerMock(),
analytics: ServiceLocator.shared.analytics)
}
@@ -21,7 +21,7 @@ class SessionVerificationViewModelTests: XCTestCase {
viewModel = SessionVerificationScreenViewModel(sessionVerificationControllerProxy: sessionVerificationController,
flow: .deviceInitiator,
appSettings: AppSettings(),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
context = viewModel.context
}
@@ -118,7 +118,7 @@ class SpaceScreenViewModelTests: XCTestCase {
viewModel = SpaceScreenViewModel(spaceRoomListProxy: spaceRoomListProxy,
spaceServiceProxy: spaceServiceProxy,
selectedSpaceRoomPublisher: .init(nil),
mediaProvider: MediaProviderMock(configuration: .init()),
mediaProvider: .mock,
userIndicatorController: UserIndicatorControllerMock())
}
}
@@ -281,7 +281,7 @@ class TimelineMediaPreviewViewModelTests: XCTestCase {
timelineController = MockTimelineController(timelineKind: .media(.mediaFilesScreen))
timelineController.timelineItems = initialItems
mediaProvider = MediaProviderMock(configuration: .init())
mediaProvider = MediaProviderMock(.init())
photoLibraryManager = PhotoLibraryManagerMock(.init(authorizationDenied: photoLibraryAuthorizationDenied))
viewModel = TimelineMediaPreviewViewModel(initialItem: initialItems[initialItemIndex],
@@ -21,7 +21,7 @@ class VoiceMessageMediaManagerTests: XCTestCase {
override func setUp() async throws {
voiceMessageCache = VoiceMessageCacheMock()
mediaProvider = MediaProviderMock(configuration: .init())
mediaProvider = .mock
mediaProvider.loadFileFromSourceFilenameClosure = nil
mediaProvider.loadFileFromSourceFilenameReturnValue = .failure(.failedRetrievingFile)
voiceMessageMediaManager = VoiceMessageMediaManager(mediaProvider: mediaProvider,