< Summary

Class:DCL.Social.Chat.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:144
Line coverage:98.6% (73 of 74)
Covered branches:0
Total branches:0
Covered methods:11
Total methods:12
Method coverage:91.6% (11 of 12)

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;
 4using DCL.Social.Chat;
 5
 6namespace DCL.Social.Chat
 7{
 8    public class CreateChannelWindowController : IHUD
 9    {
 10        private readonly IChatController chatController;
 11        private readonly DataStore dataStore;
 2512        private readonly Regex nameFormatRegex = new Regex("^[a-zA-Z0-9-]{0,20}$");
 13        private ICreateChannelWindowView view;
 14        private string channelName;
 15
 16        public event Action<string> OnNavigateToChannelWindow;
 17
 2518        public CreateChannelWindowController(IChatController chatController,
 19            DataStore dataStore)
 20        {
 2521            this.chatController = chatController;
 2522            this.dataStore = dataStore;
 2523        }
 24
 025        public ICreateChannelWindowView View => view;
 26
 27        public void Initialize(ICreateChannelWindowView view)
 28        {
 2529            this.view = view;
 2530        }
 31
 32        public void Dispose()
 33        {
 2534            UnsubscribeFromEvents();
 2535            view.Dispose();
 2536        }
 37
 38        public void SetVisibility(bool visible)
 39        {
 2740            if (visible)
 41            {
 2442                view.Show();
 2443                view.ClearInputText();
 2444                view.FocusInputField();
 2445                view.ClearError();
 2446                view.DisableCreateButton();
 2447                view.OnChannelNameUpdated += HandleChannelNameUpdated;
 2448                view.OnCreateSubmit += CreateChannel;
 2449                view.OnClose += HandleViewClose;
 2450                view.OnJoinChannel += HandleJoinChannel;
 2451                chatController.OnJoinChannelError += HandleCreationError;
 2452                chatController.OnChannelJoined += HandleChannelJoined;
 2453                dataStore.channels.isCreationModalVisible.Set(true);
 54            }
 55            else
 56            {
 357                UnsubscribeFromEvents();
 358                view.Hide();
 359                dataStore.channels.isCreationModalVisible.Set(false);
 60            }
 361        }
 62
 163        private void HandleJoinChannel() => chatController.JoinOrCreateChannel(channelName);
 64
 165        private void HandleViewClose() => SetVisibility(false);
 66
 167        private void HandleChannelJoined(Channel channel) => OnNavigateToChannelWindow?.Invoke(channel.ChannelId);
 68
 69        private void UnsubscribeFromEvents()
 70        {
 2871            view.OnChannelNameUpdated -= HandleChannelNameUpdated;
 2872            view.OnCreateSubmit -= CreateChannel;
 2873            view.OnClose -= HandleViewClose;
 2874            chatController.OnJoinChannelError -= HandleCreationError;
 2875            chatController.OnChannelJoined -= HandleChannelJoined;
 2876        }
 77
 78        private void HandleChannelNameUpdated(string name)
 79        {
 1580            channelName = name.ToLower();
 81
 1582            var channel = chatController.GetAllocatedChannel(channelName);
 1583            if (channel != null)
 84            {
 285                view.ShowChannelExistsError(!channel.Joined);
 286                view.DisableCreateButton();
 87            }
 1388            else if (name.Length == 0)
 189                view.DisableCreateButton();
 1290            else if (!nameFormatRegex.IsMatch(name))
 91            {
 792                view.ShowWrongFormatError();
 793                view.DisableCreateButton();
 94            }
 595            else if (name.Length < 3)
 96            {
 297                view.ShowTooShortError();
 298                view.DisableCreateButton();
 99            }
 100            else
 101            {
 3102                view.ClearError();
 3103                view.EnableCreateButton();
 104            }
 3105        }
 106
 107        private void CreateChannel()
 108        {
 1109            if (string.IsNullOrEmpty(channelName)) return;
 1110            if (!nameFormatRegex.IsMatch(channelName)) return;
 1111            if (chatController.GetAllocatedChannel(channelName) != null) return;
 1112            view.DisableCreateButton();
 1113            chatController.CreateChannel(channelName);
 1114        }
 115
 116        private void HandleCreationError(string channelId, ChannelErrorCode errorCode)
 117        {
 118            switch (errorCode)
 119            {
 120                case ChannelErrorCode.AlreadyExists:
 1121                    view.ShowChannelExistsError(true);
 1122                    view.DisableCreateButton();
 1123                    break;
 124                case ChannelErrorCode.LimitExceeded:
 1125                    view.ShowChannelsExceededError();
 1126                    view.DisableCreateButton();
 1127                    break;
 128                case ChannelErrorCode.WrongFormat:
 1129                    view.ShowWrongFormatError();
 1130                    view.DisableCreateButton();
 1131                    break;
 132                case ChannelErrorCode.ReservedName:
 1133                    view.ShowChannelExistsError(false);
 1134                    view.DisableCreateButton();
 1135                    break;
 136                default:
 137                case ChannelErrorCode.Unknown:
 1138                    view.ShowUnknownError();
 1139                    view.EnableCreateButton();
 140                    break;
 141            }
 1142        }
 143    }
 144}