Add ViewModel tests and change avatar data to use existing AvatarViewDataProtocol

This commit is contained in:
langleyd
2021-07-04 17:01:42 +01:00
parent 83d98c077d
commit d225adfc47
7 changed files with 161 additions and 19 deletions
@@ -17,20 +17,13 @@
import Foundation
import Reusable
struct RoomNotificationSettingsAvatarViewData {
let avatarUrl: String?
let mediaManager: MXMediaManager?
let displayName: String?
let roomId: String
}
class RoomNotificationSettingsAvatarView: UIView, NibLoadable {
@IBOutlet weak var avatarView: MXKImageView!
@IBOutlet weak var nameLabel: UILabel!
func configure(viewData: RoomNotificationSettingsAvatarViewData) {
let avatarImage = AvatarGenerator.generateAvatar(forMatrixItem: viewData.roomId, withDisplayName: viewData.displayName)
func configure(viewData: AvatarViewDataProtocol) {
let avatarImage = AvatarGenerator.generateAvatar(forMatrixItem: viewData.matrixItemId, withDisplayName: viewData.displayName)
if let avatarUrl = viewData.avatarUrl {
avatarView.enableInMemoryCache = true
@@ -39,11 +39,12 @@ final class RoomNotificationSettingsCoordinator: RoomNotificationSettingsCoordin
init(room: MXRoom, showAvatar: Bool = true) {
let repository = RoomNotificationSettingsService(room: room)
let avatarData = showAvatar ? RoomNotificationSettingsAvatarViewData(
avatarUrl: room.summary.avatar,
mediaManager: room.mxSession.mediaManager,
let avatarData = showAvatar ? RoomAvatarViewData(
roomId: room.roomId,
displayName: room.summary.displayname,
roomId: room.roomId) : nil
avatarUrl: room.summary.avatar,
mediaManager: room.mxSession.mediaManager
) : nil
let roomNotificationSettingsViewModel = RoomNotificationSettingsViewModel(roomNotificationRepository: repository, roomEncrypted: room.summary.isEncrypted, avatarViewData: avatarData)
let roomNotificationSettingsViewController = RoomNotificationSettingsViewController.instantiate(with: roomNotificationSettingsViewModel)
self.roomNotificationSettingsViewModel = roomNotificationSettingsViewModel
@@ -21,9 +21,11 @@ import UIKit
final class RoomNotificationSettingsViewController: UIViewController {
// MARK: - Properties
private enum Constants {
static let linkToAccountSettings = "linkToAccountSettings"
}
// MARK: Outlets
@IBOutlet private weak var mainTableView: UITableView!
@@ -161,7 +163,7 @@ final class RoomNotificationSettingsViewController: UIViewController {
}
}
// MARK - UITableViewDataSource
// MARK: - UITableViewDataSource
extension RoomNotificationSettingsViewController: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
@@ -187,7 +189,7 @@ extension RoomNotificationSettingsViewController: UITableViewDataSource {
}
// MARK - UITableViewDelegate
// MARK: - UITableViewDelegate
extension RoomNotificationSettingsViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
@@ -39,7 +39,7 @@ final class RoomNotificationSettingsViewModel: RoomNotificationSettingsViewModel
// MARK: - Setup
init(roomNotificationRepository: RoomNotificationSettingsServiceType, roomEncrypted: Bool, avatarViewData: RoomNotificationSettingsAvatarViewData?) {
init(roomNotificationRepository: RoomNotificationSettingsServiceType, roomEncrypted: Bool, avatarViewData: AvatarViewDataProtocol?) {
self.roomNotificationRepository = roomNotificationRepository
let notificationState = Self.mapNotificationStateOnRead(encrypted: roomEncrypted, state: roomNotificationRepository.notificationState)
@@ -19,7 +19,7 @@
import Foundation
protocol RoomNotificationSettingsViewModelViewDelegate: AnyObject {
func roomNotificationSettingsViewModel(_ viewModel: RoomNotificationSettingsViewModelType, didUpdateViewState viewSate: RoomNotificationSettingsViewStateType)
func roomNotificationSettingsViewModel(_ viewModel: RoomNotificationSettingsViewModelType, didUpdateViewState viewState: RoomNotificationSettingsViewStateType)
}
protocol RoomNotificationSettingsViewModelCoordinatorDelegate: AnyObject {
@@ -30,7 +30,7 @@ struct RoomNotificationSettingsViewState: RoomNotificationSettingsViewStateType
return RoomNotificationState.allCases
}
}
let avatarData: RoomNotificationSettingsAvatarViewData?
let avatarData: AvatarViewDataProtocol?
}
protocol RoomNotificationSettingsViewStateType {
@@ -38,5 +38,5 @@ protocol RoomNotificationSettingsViewStateType {
var roomEncrypted: Bool { get }
var notificationOptions: [RoomNotificationState] { get }
var notificationState: RoomNotificationState { get }
var avatarData: RoomNotificationSettingsAvatarViewData? { get }
var avatarData: AvatarViewDataProtocol? { get }
}