< Summary

Class:DCL.Backpack.BackpackAnalyticsService
Assembly:BackpackEditorHUDV2
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/BackpackEditorHUDV2/BackpackAnalyticsService.cs
Covered lines:23
Uncovered lines:19
Coverable lines:42
Total lines:149
Line coverage:54.7% (23 of 42)
Covered branches:0
Total branches:0
Covered methods:11
Total methods:21
Method coverage:52.3% (11 of 21)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BackpackAnalyticsService()0%110100%
BackpackAnalyticsService(...)0%110100%
SendAvatarScreenshot(...)0%2100%
SendOutfitEquipped(...)0%2100%
SendOutfitSave(...)0%6200%
SendOutfitDelete(...)0%2100%
SendOutfitBuySlot(...)0%2100%
SendWearableSearch(...)0%110100%
SendWearableFilter(...)0%110100%
SendWearableSortedBy(...)0%110100%
SendWearablePreviewRotated()0%2100%
SendWearableCreatorGoTo(...)0%2100%
SendAvatarEditSuccessNuxAnalytic()0%110100%
SendEquipWearableAnalytic(...)0%110100%
SendUnequippedWearableAnalytic(...)0%110100%
SendAvatarColorPick()0%2100%
SendForceHideWearable(...)0%2100%
SendForceShowWearable(...)0%2100%
SendVRMExportStarted()0%110100%
SendVRMExportSucceeded()0%110100%
CalculateSorting(...)0%24.867028.57%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/BackpackEditorHUDV2/BackpackAnalyticsService.cs

#LineLine coverage
 1using DCLServices.WearablesCatalogService;
 2using System.Collections.Generic;
 3
 4namespace DCL.Backpack
 5{
 6    public class BackpackAnalyticsService : IBackpackAnalyticsService
 7    {
 8        private const string AVATAR_SCREENSHOT = "avatar_screenshot";
 9        private const string OUTFIT_EQUIP = "outfit_equip";
 10        private const string OUTFIT_SAVE = "outfit_save";
 11        private const string OUTFIT_DELETE = "outfit_delete";
 12        private const string OUTFIT_BUY_SLOT = "outfit_buy_slot";
 13        private const string WEARABLE_SEARCH = "wearable_search";
 14        private const string WEARABLE_FILTER = "wearable_filter";
 15        private const string WEARABLE_SORTED_BY = "wearable_sorted_by";
 16        private const string WEARABLE_PREVIEW_ROTATED = "wearable_preview_rotated";
 17        private const string WEARABLE_CREATOR_GO_TO = "wearable_creator_go_to";
 18        private const string EQUIP_WEARABLE_METRIC = "equip_wearable";
 19        private const string UNEQUIP_WEARABLE_METRIC = "unequip_wearable";
 20        private const string AVATAR_COLOR_PICK = "avatar_color_pick";
 21        private const string FORCE_SHOW_WEARABLE = "show_wearable";
 22        private const string FORCE_HIDE_WEARABLE = "hide_wearable";
 23        private const string VRM_EXPORT_STARTED = "vrm_export_started";
 24        private const string VRM_EXPORT_SUCCEEDED = "vrm_export_finished";
 25
 26        private readonly IAnalytics analytics;
 27        private readonly INewUserExperienceAnalytics newUserExperienceAnalytics;
 28        private const int NORMAL_OUTFIT_SLOTS_COUNT = 3;
 129        private static readonly Dictionary<string, string> EMPTY = new ();
 30
 31
 3132        public BackpackAnalyticsService(
 33            IAnalytics analytics,
 34            INewUserExperienceAnalytics newUserExperienceAnalytics)
 35        {
 3136            this.analytics = analytics;
 3137            this.newUserExperienceAnalytics = newUserExperienceAnalytics;
 3138        }
 39
 40        public void SendAvatarScreenshot(AvatarScreenshotSource source) =>
 041            analytics.SendAnalytic(AVATAR_SCREENSHOT, new Dictionary<string, string>() { {"source", source.ToString()} }
 42
 43        public void SendOutfitEquipped(int slotNumber) =>
 044            analytics.SendAnalytic(OUTFIT_EQUIP,new () { { "slot_number", slotNumber.ToString()} });
 45
 46        public void SendOutfitSave(int slotNumber) =>
 047            analytics.SendAnalytic(OUTFIT_SAVE, new ()
 48            {
 49                { "slot_number", slotNumber.ToString() },
 50                { "slot_type", slotNumber > NORMAL_OUTFIT_SLOTS_COUNT ? SlotType.Extra.ToString() : SlotType.Free.ToStri
 51            });
 52
 53        public void SendOutfitDelete(int slotNumber) =>
 054            analytics.SendAnalytic(OUTFIT_DELETE, new () { { "slot_number", slotNumber.ToString()} });
 55
 56        public void SendOutfitBuySlot(int slotNumber) =>
 057            analytics.SendAnalytic(OUTFIT_BUY_SLOT, new () { { "slot_number", slotNumber.ToString()} });
 58
 59        public void SendWearableSearch(string searchTerms) =>
 160            analytics.SendAnalytic(WEARABLE_SEARCH, new () {{"search_terms", searchTerms}});
 61
 62        public void SendWearableFilter(bool onlyNft) =>
 163            analytics.SendAnalytic(WEARABLE_FILTER, new () {{"only_nft", onlyNft.ToString()}});
 64
 65        public void SendWearableSortedBy(NftOrderByOperation order, bool asc) =>
 166            analytics.SendAnalytic(WEARABLE_SORTED_BY, new () { { "sorted_by", CalculateSorting(order, asc) } });
 67
 68        public void SendWearablePreviewRotated() =>
 069            analytics.SendAnalytic(WEARABLE_PREVIEW_ROTATED, null);
 70
 71        public void SendWearableCreatorGoTo(string creatorName) =>
 072            analytics.SendAnalytic(WEARABLE_CREATOR_GO_TO, new () {{"creator_name", creatorName}});
 73
 74        public void SendAvatarEditSuccessNuxAnalytic() =>
 475            newUserExperienceAnalytics.AvatarEditSuccessNux();
 76
 77        public void SendEquipWearableAnalytic(string id, string category, string rarity, EquipWearableSource source)
 78        {
 1479            Dictionary<string, string> data = new Dictionary<string, string>
 80            {
 81                { "rarity", rarity },
 82                { "category", category },
 83            };
 84
 1485            data.Add("source", source.ToString());
 86
 1487            analytics.SendAnalytic(EQUIP_WEARABLE_METRIC, data);
 1488        }
 89
 90        public void SendUnequippedWearableAnalytic(string id, string category, string rarity, UnequipWearableSource sour
 91        {
 192            Dictionary<string, string> data = new Dictionary<string, string>
 93            {
 94                { "rarity", rarity },
 95                { "category", category },
 96            };
 197            data.Add("source", source.ToString());
 98
 199            analytics.SendAnalytic(UNEQUIP_WEARABLE_METRIC, data);
 1100        }
 101
 102        public void SendAvatarColorPick() =>
 0103            analytics.SendAnalytic(AVATAR_COLOR_PICK, EMPTY);
 104
 105        public void SendForceHideWearable(string category)
 106        {
 0107            Dictionary<string, string> data = new Dictionary<string, string>
 108            {
 109                { "category", category },
 110            };
 111
 0112            analytics.SendAnalytic(FORCE_HIDE_WEARABLE, data);
 0113        }
 114
 115        public void SendForceShowWearable(string category)
 116        {
 0117            Dictionary<string, string> data = new Dictionary<string, string>
 118            {
 119                { "category", category },
 120            };
 121
 0122            analytics.SendAnalytic(FORCE_SHOW_WEARABLE, data);
 0123        }
 124
 125        public void SendVRMExportStarted()
 126        {
 2127            analytics.SendAnalytic(VRM_EXPORT_STARTED, EMPTY);
 2128        }
 129
 130        public void SendVRMExportSucceeded()
 131        {
 2132            analytics.SendAnalytic(VRM_EXPORT_SUCCEEDED, EMPTY);
 2133        }
 134
 135        private string CalculateSorting(NftOrderByOperation order, bool asc)
 136        {
 1137            if (order == NftOrderByOperation.Date)
 1138                return asc ? "newest" : "oldest";
 139
 0140            if (order == NftOrderByOperation.Name)
 0141                return asc ? "nameaz" : "nameza";
 142
 0143            if (order == NftOrderByOperation.Rarity)
 0144                return asc ? "rarest" : "less_rare";
 145
 0146            return "";
 147        }
 148    }
 149}