< Summary

Class:DCL.Social.Chat.PrivateChatEntry
Assembly:WorldChatWindowHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/WorldChatWindowHUD/PrivateChatEntry.cs
Covered lines:48
Uncovered lines:12
Coverable lines:60
Total lines:134
Line coverage:80% (48 of 60)
Covered branches:0
Total branches:0
Covered methods:10
Total methods:13
Method coverage:76.9% (10 of 13)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Awake()0%110100%
Initialize(...)0%110100%
Configure(...)0%110100%
RefreshControl()0%220100%
HandleUserBlocked(...)0%6200%
SetBlockStatus(...)0%110100%
SetPresence(...)0%330100%
Dock(...)0%2100%
IsVisible(...)0%2.152066.67%
EnableAvatarSnapshotFetching()0%220100%
DisableAvatarSnapshotFetching()0%220100%
HandleContextMenuHidden()0%2100%

File(s)

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

#LineLine coverage
 1using System;
 2using TMPro;
 3using UnityEngine;
 4using UnityEngine.UI;
 5
 6namespace DCL.Social.Chat
 7{
 8    public class PrivateChatEntry : BaseComponentView, IComponentModelConfig<PrivateChatEntryModel>
 9    {
 10        [SerializeField] internal Button openChatButton;
 11        [SerializeField] internal PrivateChatEntryModel model;
 12        [SerializeField] internal TMP_Text userNameLabel;
 13        [SerializeField] internal TMP_Text lastMessageLabel;
 14        [SerializeField] internal ImageComponentView picture;
 15        [SerializeField] internal UnreadNotificationBadge unreadNotifications;
 16        [SerializeField] internal Button optionsButton;
 17        [SerializeField] internal GameObject blockedContainer;
 18        [SerializeField] internal GameObject onlineStatusContainer;
 19        [SerializeField] internal GameObject offlineStatusContainer;
 20        [SerializeField] internal RectTransform userContextMenuPositionReference;
 21
 22        private UserContextMenu userContextMenu;
 23        private IChatController chatController;
 24        private DataStore_Mentions mentionsDataStore;
 25
 9326        public PrivateChatEntryModel Model => model;
 27
 28        public event Action<PrivateChatEntry> OnOpenChat;
 29
 30        public override void Awake()
 31        {
 5032            base.Awake();
 5033            optionsButton.onClick.AddListener(() =>
 34            {
 035                Dock(userContextMenu);
 036                userContextMenu.Show(model.userId);
 037            });
 5238            openChatButton.onClick.AddListener(() => OnOpenChat?.Invoke(this));
 5039            onFocused += isFocused =>
 40            {
 9341                if (optionsButton == null) return;
 9342                var isContextualMenuOpenWithThisUser = userContextMenu != null
 43                                                       && userContextMenu.isVisible
 44                                                       && userContextMenu.UserId == model.userId;
 9345                optionsButton.gameObject.SetActive(isFocused || isContextualMenuOpenWithThisUser);
 9346            };
 5047        }
 48
 49        public void Initialize(IChatController chatController,
 50            UserContextMenu userContextMenu,
 51            DataStore_Mentions mentionsDataStore)
 52        {
 4153            this.chatController = chatController;
 4154            this.userContextMenu = userContextMenu;
 4155            this.mentionsDataStore = mentionsDataStore;
 4156            userContextMenu.OnHide -= HandleContextMenuHidden;
 4157            userContextMenu.OnHide += HandleContextMenuHidden;
 4158            userContextMenu.OnBlock -= HandleUserBlocked;
 4159            userContextMenu.OnBlock += HandleUserBlocked;
 4160        }
 61
 62        public void Configure(PrivateChatEntryModel newModel)
 63        {
 4864            model = newModel;
 4865            RefreshControl();
 4866        }
 67
 68        public override void RefreshControl()
 69        {
 6770            userNameLabel.text = model.userName;
 6771            lastMessageLabel.text = model.lastMessage;
 6772            lastMessageLabel.gameObject.SetActive(!string.IsNullOrEmpty(model.lastMessage));
 6773            SetBlockStatus(model.isBlocked);
 6774            SetPresence(model.isOnline);
 6775            unreadNotifications.Initialize(chatController, model.userId, mentionsDataStore);
 76
 6777            if (model.imageFetchingEnabled)
 2078                EnableAvatarSnapshotFetching();
 79            else
 4780                DisableAvatarSnapshotFetching();
 4781        }
 82
 83        private void HandleUserBlocked(string userId, bool blocked)
 84        {
 085            if (userId != model.userId) return;
 086            SetBlockStatus(blocked);
 087        }
 88
 89        public void SetBlockStatus(bool isBlocked)
 90        {
 6791            model.isBlocked = isBlocked;
 6792            blockedContainer.SetActive(isBlocked);
 6793        }
 94
 95        public void SetPresence(bool isOnline)
 96        {
 6797            model.isOnline = isOnline;
 6798            onlineStatusContainer.SetActive(isOnline && !model.isBlocked);
 6799            offlineStatusContainer.SetActive(!isOnline && !model.isBlocked);
 67100        }
 101
 102        private void Dock(UserContextMenu userContextMenu)
 103        {
 0104            var menuTransform = (RectTransform) userContextMenu.transform;
 0105            menuTransform.pivot = userContextMenuPositionReference.pivot;
 0106            menuTransform.position = userContextMenuPositionReference.position;
 0107        }
 108
 109        public bool IsVisible(RectTransform container)
 110        {
 19111            if (!gameObject.activeSelf) return false;
 19112            return ((RectTransform) transform).CountCornersVisibleFrom(container) > 0;
 113        }
 114
 115        public void EnableAvatarSnapshotFetching()
 116        {
 83117            if (model.imageFetchingEnabled) return;
 43118            picture.Configure(new ImageComponentModel {uri = model.pictureUrl});
 43119            model.imageFetchingEnabled = true;
 43120        }
 121
 122        public void DisableAvatarSnapshotFetching()
 123        {
 95124            if (!model.imageFetchingEnabled) return;
 1125            picture.SetImage((string) null);
 1126            model.imageFetchingEnabled = false;
 1127        }
 128
 129        private void HandleContextMenuHidden()
 130        {
 0131            optionsButton.gameObject.SetActive(false);
 0132        }
 133    }
 134}