Move room admin condition to be usable in UnitTests and add tests

This commit is contained in:
aringenbach
2023-04-20 16:43:36 +02:00
parent a3f7d0433a
commit 0171e64638
5 changed files with 144 additions and 22 deletions
@@ -28,6 +28,7 @@ struct CommandsProviderCommand {
let name: String
let parametersFormat: String
let description: String
let requiresAdminPowerLevel: Bool
}
class CompletionSuggestionUserID: NSObject {
@@ -41,6 +42,7 @@ protocol RoomMembersProviderProtocol {
}
protocol CommandsProviderProtocol {
var isRoomAdmin: Bool { get }
func fetchCommands(_ commands: @escaping ([CommandsProviderCommand]) -> Void)
}
@@ -159,7 +161,7 @@ class CompletionSuggestionService: CompletionSuggestionServiceProtocol {
commandProvider.fetchCommands { [weak self] commands in
guard let self else { return }
self.suggestionItems = commands.map { command in
self.suggestionItems = commands.filtered(isRoomAdmin: self.commandProvider.isRoomAdmin).map { command in
CompletionSuggestionItem.command(value: CompletionSuggestionServiceCommandItem(
name: command.name,
parametersFormat: command.parametersFormat,
@@ -190,6 +192,13 @@ extension Array where Element == RoomMembersProviderMember {
}
}
extension Array where Element == CommandsProviderCommand {
func filtered(isRoomAdmin: Bool) -> Self {
guard !isRoomAdmin else { return self }
return filter { !$0.requiresAdminPowerLevel }
}
}
private enum SuggestionKey: Character {
case at = "@"
case slash = "/"