< Summary

Class:DCL.Chat.HUD.CreateChannelWindowController
Assembly:WorldChatWindowHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/WorldChatWindowHUD/CreateChannelWindowController.cs
Covered lines:73
Uncovered lines:1
Coverable lines:74
Total lines:143
Line coverage:98.6% (73 of 74)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CreateChannelWindowController(...)0%110100%
Initialize(...)0%110100%
Dispose()0%110100%
SetVisibility(...)0%220100%
HandleJoinChannel()0%110100%
HandleViewClose()0%110100%
HandleChannelJoined(...)0%220100%
UnsubscribeFromEvents()0%110100%
HandleChannelNameUpdated(...)0%550100%
CreateChannel()0%4.594066.67%
HandleCreationError(...)0%660100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/WorldChatWindowHUD/CreateChannelWindowController.cs

#LineLine coverage
 1using System;
 2using System.Text.RegularExpressions;
 3using DCL.Chat.Channels;
 4
 5namespace DCL.Chat.HUD
 6{
 7    public class CreateChannelWindowController : IHUD
 8    {
 9        private readonly IChatController chatController;
 10        private readonly DataStore dataStore;
 2511        private readonly Regex nameFormatRegex = new Regex("^[a-zA-Z0-9-]{0,20}$");
 12        private ICreateChannelWindowView view;
 13        private string channelName;
 14
 15        public event Action<string> OnNavigateToChannelWindow;
 16
 2517        public CreateChannelWindowController(IChatController chatController,
 18            DataStore dataStore)
 19        {
 2520            this.chatController = chatController;
 2521            this.dataStore = dataStore;
 2522        }
 23
 024        public ICreateChannelWindowView View => view;
 25
 26        public void Initialize(ICreateChannelWindowView view)
 27        {
 2528            this.view = view;
 2529        }
 30
 31        public void Dispose()
 32        {
 2533            UnsubscribeFromEvents();
 2534            view.Dispose();
 2535        }
 36
 37        public void SetVisibility(bool visible)
 38        {
 2739            if (visible)
 40            {
 2441                view.Show();
 2442                view.ClearInputText();
 2443                view.FocusInputField();
 2444                view.ClearError();
 2445                view.DisableCreateButton();
 2446                view.OnChannelNameUpdated += HandleChannelNameUpdated;
 2447                view.OnCreateSubmit += CreateChannel;
 2448                view.OnClose += HandleViewClose;
 2449                view.OnJoinChannel += HandleJoinChannel;
 2450                chatController.OnJoinChannelError += HandleCreationError;
 2451                chatController.OnChannelJoined += HandleChannelJoined;
 2452                dataStore.channels.isCreationModalVisible.Set(true);
 53            }
 54            else
 55            {
 356                UnsubscribeFromEvents();
 357                view.Hide();
 358                dataStore.channels.isCreationModalVisible.Set(false);
 59            }
 360        }
 61
 162        private void HandleJoinChannel() => chatController.JoinOrCreateChannel(channelName);
 63
 164        private void HandleViewClose() => SetVisibility(false);
 65
 166        private void HandleChannelJoined(Channel channel) => OnNavigateToChannelWindow?.Invoke(channel.ChannelId);
 67
 68        private void UnsubscribeFromEvents()
 69        {
 2870            view.OnChannelNameUpdated -= HandleChannelNameUpdated;
 2871            view.OnCreateSubmit -= CreateChannel;
 2872            view.OnClose -= HandleViewClose;
 2873            chatController.OnJoinChannelError -= HandleCreationError;
 2874            chatController.OnChannelJoined -= HandleChannelJoined;
 2875        }
 76
 77        private void HandleChannelNameUpdated(string name)
 78        {
 1579            channelName = name.ToLower();
 80
 1581            var channel = chatController.GetAllocatedChannel(channelName);
 1582            if (channel != null)
 83            {
 284                view.ShowChannelExistsError(!channel.Joined);
 285                view.DisableCreateButton();
 86            }
 1387            else if (name.Length == 0)
 188                view.DisableCreateButton();
 1289            else if (!nameFormatRegex.IsMatch(name))
 90            {
 791                view.ShowWrongFormatError();
 792                view.DisableCreateButton();
 93            }
 594            else if (name.Length < 3)
 95            {
 296                view.ShowTooShortError();
 297                view.DisableCreateButton();
 98            }
 99            else
 100            {
 3101                view.ClearError();
 3102                view.EnableCreateButton();
 103            }
 3104        }
 105
 106        private void CreateChannel()
 107        {
 1108            if (string.IsNullOrEmpty(channelName)) return;
 1109            if (!nameFormatRegex.IsMatch(channelName)) return;
 1110            if (chatController.GetAllocatedChannel(channelName) != null) return;
 1111            view.DisableCreateButton();
 1112            chatController.CreateChannel(channelName);
 1113        }
 114
 115        private void HandleCreationError(string channelId, ChannelErrorCode errorCode)
 116        {
 117            switch (errorCode)
 118            {
 119                case ChannelErrorCode.AlreadyExists:
 1120                    view.ShowChannelExistsError(true);
 1121                    view.DisableCreateButton();
 1122                    break;
 123                case ChannelErrorCode.LimitExceeded:
 1124                    view.ShowChannelsExceededError();
 1125                    view.DisableCreateButton();
 1126                    break;
 127                case ChannelErrorCode.WrongFormat:
 1128                    view.ShowWrongFormatError();
 1129                    view.DisableCreateButton();
 1130                    break;
 131                case ChannelErrorCode.ReservedName:
 1132                    view.ShowChannelExistsError(false);
 1133                    view.DisableCreateButton();
 1134                    break;
 135                default:
 136                case ChannelErrorCode.Unknown:
 1137                    view.ShowUnknownError();
 1138                    view.EnableCreateButton();
 139                    break;
 140            }
 1141        }
 142    }
 143}