< Summary

Class:SignupHUD.SignupHUDController
Assembly:SignupHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/SignupHUD/SignupHUDController.cs
Covered lines:54
Uncovered lines:30
Coverable lines:84
Total lines:185
Line coverage:64.2% (54 of 84)
Covered branches:0
Total branches:0
Covered methods:13
Total methods:17
Method coverage:76.4% (13 of 17)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
SignupHUDController(...)0%110100%
Initialize()0%22090.91%
OnLoadingScreenAppear(...)0%6200%
OnSignupVisibleChanged(...)0%110100%
StartSignupProcess()0%220100%
OnNameScreenNext(...)0%220100%
OnEditAvatar()0%110100%
OnTermsOfServiceAgreedStepBeforeSaveBackpack()0%3.473062.5%
OnTermsOfServiceAgreedStepAfterSaveBackpack(...)0%2.52050%
CreateSubscriptionAsync()0%12300%
OnTermsOfServiceBack()0%110100%
OnLinkClicked(...)0%330100%
SetVisibility(...)0%330100%
Dispose()0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/SignupHUD/SignupHUDController.cs

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using DCL;
 3using DCL.Browser;
 4using DCL.Helpers;
 5using DCL.Interface;
 6using DCL.Tasks;
 7using DCLServices.SubscriptionsAPIService;
 8using System;
 9using System.Threading;
 10using UnityEngine;
 11
 12namespace SignupHUD
 13{
 14    public class SignupHUDController : IHUD
 15    {
 16        private const string TOS_URL = "https://decentraland.org/terms/";
 17        private const string PRIVACY_POLICY_URL = "https://decentraland.org/privacy/";
 18        private const string NEW_TOS_AND_EMAIL_SUBSCRIPTION_FF = "new_terms_of_service_and_email_subscription";
 19        private const string CURRENT_SUBSCRIPTION_ID_LOCAL_STORAGE_KEY = "currentSubscriptionId";
 20
 21        private readonly NewUserExperienceAnalytics newUserExperienceAnalytics;
 22        private readonly DataStore_LoadingScreen loadingScreenDataStore;
 23        private readonly DataStore_HUDs dataStoreHUDs;
 24        private readonly DataStore_FeatureFlag dataStoreFeatureFlag;
 25        private readonly DataStore_BackpackV2 dataStoreBackpack;
 26        private readonly DataStore_Common dataStoreCommon;
 27        private readonly IBrowserBridge browserBridge;
 28        private readonly ISubscriptionsAPIService subscriptionsAPIService;
 29        internal readonly ISignupHUDView view;
 30
 31        internal string name;
 32        internal string email;
 3133        private BaseVariable<bool> signupVisible => dataStoreHUDs.signupVisible;
 034        private BaseVariable<bool> backpackVisible => dataStoreHUDs.avatarEditorVisible;
 135        private bool isNewTermsOfServiceAndEmailSubscriptionEnabled => dataStoreFeatureFlag.flags.Get().IsFeatureEnabled
 36
 37        private CancellationTokenSource createSubscriptionCts;
 38
 1039        public SignupHUDController(
 40            IAnalytics analytics,
 41            ISignupHUDView view,
 42            DataStore_LoadingScreen loadingScreenDataStore,
 43            DataStore_HUDs dataStoreHUDs,
 44            DataStore_FeatureFlag dataStoreFeatureFlag,
 45            DataStore_BackpackV2 dataStoreBackpack,
 46            DataStore_Common dataStoreCommon,
 47            IBrowserBridge browserBridge,
 48            ISubscriptionsAPIService subscriptionsAPIService)
 49        {
 1050            newUserExperienceAnalytics = new NewUserExperienceAnalytics(analytics);
 1051            this.view = view;
 1052            this.loadingScreenDataStore = loadingScreenDataStore;
 1053            this.dataStoreHUDs = dataStoreHUDs;
 1054            this.dataStoreFeatureFlag = dataStoreFeatureFlag;
 1055            this.dataStoreBackpack = dataStoreBackpack;
 1056            this.dataStoreCommon = dataStoreCommon;
 1057            this.browserBridge = browserBridge;
 1058            this.subscriptionsAPIService = subscriptionsAPIService;
 1059            loadingScreenDataStore.decoupledLoadingHUD.visible.OnChange += OnLoadingScreenAppear;
 1060            dataStoreBackpack.isWaitingToBeSavedAfterSignUp.OnChange += OnTermsOfServiceAgreedStepAfterSaveBackpack;
 1061        }
 62
 63        public void Initialize()
 64        {
 1065            if (view == null)
 066                return;
 67
 1068            signupVisible.OnChange += OnSignupVisibleChanged;
 69
 1070            view.OnNameScreenNext += OnNameScreenNext;
 1071            view.OnEditAvatar += OnEditAvatar;
 1072            view.OnTermsOfServiceAgreed += OnTermsOfServiceAgreedStepBeforeSaveBackpack;
 1073            view.OnTermsOfServiceBack += OnTermsOfServiceBack;
 1074            view.OnLinkClicked += OnLinkClicked;
 75
 1076            CommonScriptableObjects.isLoadingHUDOpen.OnChange += OnLoadingScreenAppear;
 1077            signupVisible.Set(signupVisible.Get(), true);
 1078        }
 79
 80        private void OnLoadingScreenAppear(bool current, bool previous)
 81        {
 082            if (signupVisible.Get() && current)
 83            {
 084                signupVisible.Set(false);
 085                backpackVisible.Set(false);
 86            }
 087        }
 88
 89        private void OnSignupVisibleChanged(bool current, bool previous)
 90        {
 1291            SetVisibility(current);
 1292        }
 93
 94        internal void StartSignupProcess()
 95        {
 396            name = null;
 397            email = null;
 398            view?.ShowNameScreen();
 399        }
 100
 101        internal void OnNameScreenNext(string newName, string newEmail)
 102        {
 1103            name = newName;
 1104            email = newEmail;
 1105            view?.ShowTermsOfServiceScreen();
 1106        }
 107
 108        internal void OnEditAvatar()
 109        {
 1110            signupVisible.Set(false);
 1111            dataStoreHUDs.avatarEditorVisible.Set(true, true);
 1112        }
 113
 114        private void OnTermsOfServiceAgreedStepBeforeSaveBackpack()
 115        {
 1116            WebInterface.SendPassport(name, email);
 1117            dataStoreBackpack.isWaitingToBeSavedAfterSignUp.Set(true);
 118
 1119            newUserExperienceAnalytics?.SendTermsOfServiceAcceptedNux(name, email);
 120
 1121            if (!isNewTermsOfServiceAndEmailSubscriptionEnabled)
 1122                return;
 123
 0124            createSubscriptionCts = createSubscriptionCts.SafeRestart();
 0125            CreateSubscriptionAsync(email, createSubscriptionCts.Token).Forget();
 0126        }
 127
 128        private void OnTermsOfServiceAgreedStepAfterSaveBackpack(bool isBackpackWaitingToBeSaved, bool _)
 129        {
 1130            if (isBackpackWaitingToBeSaved)
 1131                return;
 132
 0133            dataStoreCommon.isSignUpFlow.Set(false);
 0134        }
 135
 136        private async UniTaskVoid CreateSubscriptionAsync(string emailAddress, CancellationToken cancellationToken)
 137        {
 138            try
 139            {
 0140                var newSubscription = await subscriptionsAPIService.CreateSubscription(emailAddress, cancellationToken);
 0141                PlayerPrefsBridge.SetString(CURRENT_SUBSCRIPTION_ID_LOCAL_STORAGE_KEY, newSubscription.id);
 0142                PlayerPrefsBridge.Save();
 0143            }
 0144            catch (Exception ex) { Debug.LogError($"An error occurred while creating the subscription for {emailAddress}
 0145        }
 146
 2147        internal void OnTermsOfServiceBack() { StartSignupProcess(); }
 148
 149        private void OnLinkClicked(string linkId)
 150        {
 151            switch (linkId)
 152            {
 153                case "tosUrl":
 1154                    browserBridge.OpenUrl(TOS_URL);
 1155                    break;
 156                case "privacyPolicyUrl":
 1157                    browserBridge.OpenUrl(PRIVACY_POLICY_URL);
 158                    break;
 159            }
 1160        }
 161
 162        public void SetVisibility(bool visible)
 163        {
 12164            view?.SetVisibility(visible);
 12165            if (visible)
 1166                StartSignupProcess();
 12167        }
 168
 169        public void Dispose()
 170        {
 0171            signupVisible.OnChange -= OnSignupVisibleChanged;
 0172            if (view == null)
 0173                return;
 0174            view.OnNameScreenNext -= OnNameScreenNext;
 0175            view.OnEditAvatar -= OnEditAvatar;
 0176            view.OnTermsOfServiceAgreed -= OnTermsOfServiceAgreedStepBeforeSaveBackpack;
 0177            view.OnTermsOfServiceBack -= OnTermsOfServiceBack;
 0178            CommonScriptableObjects.isFullscreenHUDOpen.OnChange -= OnLoadingScreenAppear;
 0179            dataStoreBackpack.isWaitingToBeSavedAfterSignUp.OnChange -= OnTermsOfServiceAgreedStepAfterSaveBackpack;
 0180            loadingScreenDataStore.decoupledLoadingHUD.visible.OnChange -= OnLoadingScreenAppear;
 0181            createSubscriptionCts.SafeCancelAndDispose();
 0182            view.Dispose();
 0183        }
 184    }
 185}