Skip to content
This repository has been archived by the owner on Jun 7, 2020. It is now read-only.

[NEW] Room names with special chars #684

3 changes: 2 additions & 1 deletion Rocket.Chat/Models/AuthSettings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@ final class AuthSettings: BaseModel {
@objc dynamic var serverName: String?
@objc dynamic var serverFaviconURL: String?

// User
// Layout: User Interface
@objc dynamic var useUserRealName = false
@objc dynamic var allowSpecialCharsOnRoomNames = false

// Rooms
@objc dynamic var favoriteRooms = true
Expand Down
2 changes: 2 additions & 0 deletions Rocket.Chat/Models/Mapping/AuthSettingsModelMapping.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ extension AuthSettings: ModelMappeable {

self.useUserRealName = objectForKey(object: values, key: "UI_Use_Real_Name")?.bool ?? false

self.allowSpecialCharsOnRoomNames = objectForKey(object: values, key: "UI_Allow_room_names_with_special_chars")?.bool ?? false

self.favoriteRooms = objectForKey(object: values, key: "Favorite_Rooms")?.bool ?? true

self.isUsernameEmailAuthenticationEnabled = objectForKey(object: values, key: "Accounts_ShowFormLogin")?.bool ?? true
Expand Down
6 changes: 3 additions & 3 deletions Rocket.Chat/Models/Subscription.swift
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@ class Subscription: BaseModel {
extension Subscription {

func displayName() -> String {
if type != .directMessage {
guard let settings = AuthSettingsManager.settings else {
return name
}

guard let settings = AuthSettingsManager.settings else {
return name
if type != .directMessage {
return settings.allowSpecialCharsOnRoomNames && fname != "" ? fname : name
}

return settings.useUserRealName ? fname : name
Expand Down
50 changes: 50 additions & 0 deletions Rocket.ChatTests/Models/SubscriptionSpec.swift
Original file line number Diff line number Diff line change
Expand Up @@ -152,4 +152,54 @@ class SubscriptionSpec: XCTestCase {
XCTAssertNotEqual(group.displayName(), "GROUP", "Subscription.displayName() will always return name for groups")
}

func testSubscriptionDisplayChannelNameWithSpecialChars() {
let settings = AuthSettings()
settings.allowSpecialCharsOnRoomNames = true

AuthSettingsManager.shared.internalSettings = settings

// Channels
let channel = Subscription()
channel.name = "special-channel"
channel.fname = "special channel"
channel.privateType = "c"

XCTAssertEqual(channel.displayName(), "special channel", "Subscription.displayName() will return fname for channels when 'allowSpecialCharsOnRoomNames' is enabled")
XCTAssertNotEqual(channel.displayName(), "special-channel", "Subscription.displayName() will return fname for channels when 'allowSpecialCharsOnRoomNames' is enabled")

// Groups and Private Groups
let group = Subscription()
group.name = "special-group"
group.fname = "special group"
group.privateType = "p"

XCTAssertEqual(group.displayName(), "special group", "Subscription.displayName() will return fname for groups when 'allowSpecialCharsOnRoomNames' is enabled")
XCTAssertNotEqual(group.displayName(), "special-group", "Subscription.displayName() will return fname for groups when 'allowSpecialCharsOnRoomNames' is enabled")
}

func testSubscriptionDisplayChannelNameWithoutSpecialChars() {
let settings = AuthSettings()
settings.allowSpecialCharsOnRoomNames = false

AuthSettingsManager.shared.internalSettings = settings

// Channels
let channel = Subscription()
channel.name = "special-channel"
channel.fname = "special channel"
channel.privateType = "c"

XCTAssertEqual(channel.displayName(), "special-channel", "Subscription.displayName() will return name for channels when 'allowSpecialCharsOnRoomNames' is disabled")
XCTAssertNotEqual(channel.displayName(), "special channel", "Subscription.displayName() will return name for channels when 'allowSpecialCharsOnRoomNames' is disabled")

// Groups and Private Groups
let group = Subscription()
group.name = "special-group"
group.fname = "special group"
group.privateType = "p"

XCTAssertEqual(group.displayName(), "special-group", "Subscription.displayName() will return name for groups when 'allowSpecialCharsOnRoomNames' is disabled")
XCTAssertNotEqual(group.displayName(), "special group", "Subscription.displayName() will return name for groups when 'allowSpecialCharsOnRoomNames' is disabled")
}

}