< Summary

Class:DCL.RealmsInfoHandler
Assembly:RealmsInfoBridge
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Bridges/RealmsInfoBridge/RealmsInfoHandler.cs
Covered lines:15
Uncovered lines:21
Coverable lines:36
Total lines:92
Line coverage:41.6% (15 of 36)
Covered branches:0
Total branches:0
Covered methods:6
Total methods:11
Method coverage:54.5% (6 of 11)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
RealmsInfoHandler()0%110100%
Set(...)0%110100%
Set(...)0%6.296080%
SetAbout(...)0%2100%
FetchRealmsInfo(...)0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Bridges/RealmsInfoBridge/RealmsInfoHandler.cs

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using DCL.Interface;
 3using UnityEngine;
 4using System;
 5using Variables.RealmsInfo;
 6using System.Collections.Generic;
 7using System.Linq;
 8using Decentraland.Bff;
 9using Google.Protobuf;
 10using System.Threading;
 11
 12namespace DCL
 13{
 14    public class RealmsInfoHandler : IRealmsInfoBridge
 15    {
 416        private RealmsInfoModel model = new RealmsInfoModel();
 17
 118        public CurrentRealmVariable playerRealm => DataStore.i.realm.playerRealm;
 119        public BaseCollection<RealmModel> realmsInfo => DataStore.i.realm.realmsInfo;
 020        private BaseVariable<AboutResponse.Types.AboutConfiguration> playerRealmAboutConfiguration => DataStore.i.realm.
 021        private BaseVariable<AboutResponse.Types.LambdasInfo> playerRealmAboutLambda => DataStore.i.realm.playerRealmAbo
 022        private BaseVariable<AboutResponse.Types.ContentInfo> playerRealmAboutContent => DataStore.i.realm.playerRealmAb
 23
 424        private BaseVariable<string> realmName => DataStore.i.realm.realmName;
 25        private UniTaskCompletionSource<IReadOnlyList<RealmModel>> fetchRealmsTask;
 26
 27        public void Set(string json)
 28        {
 229            JsonUtility.FromJsonOverwrite(json, model);
 230            Set(model);
 231        }
 32
 33        internal void Set(RealmsInfoModel newModel)
 34        {
 535            model = newModel;
 36
 537            if (!string.IsNullOrEmpty(model.current?.serverName))
 38            {
 439                DataStore.i.realm.playerRealm.Set(model.current.Clone());
 440                realmName.Set(DataStore.i.realm.playerRealm.Get().serverName);
 41            }
 42
 543            List<RealmModel> realms = newModel.realms != null ? newModel.realms.ToList() : new List<RealmModel>();
 544            DataStore.i.realm.realmsInfo.Set(realms);
 45
 546            if (fetchRealmsTask != null)
 47            {
 048                fetchRealmsTask.TrySetResult(realms);
 049                fetchRealmsTask = null;
 50            }
 551        }
 52
 53        public void SetAbout(string json)
 54        {
 055            JsonParser jsonParser = new JsonParser(JsonParser.Settings.Default.WithIgnoreUnknownFields(true));
 056            AboutResponse aboutResponse = jsonParser.Parse<AboutResponse>(json);
 057            playerRealmAboutConfiguration.Set(aboutResponse.Configurations);
 058            playerRealmAboutContent.Set(aboutResponse.Content);
 059            playerRealmAboutLambda.Set(aboutResponse.Lambdas);
 060            realmName.Set(aboutResponse.Configurations.RealmName);
 061        }
 62
 63        public UniTask<IReadOnlyList<RealmModel>> FetchRealmsInfo(CancellationToken cancellationToken)
 64        {
 65            try
 66            {
 067                if (fetchRealmsTask != null)
 068                    return fetchRealmsTask.Task.AttachExternalCancellation(cancellationToken)
 69                                          .Timeout(TimeSpan.FromSeconds(30));
 70
 071                fetchRealmsTask = new UniTaskCompletionSource<IReadOnlyList<RealmModel>>();
 72
 073                WebInterface.FetchRealmsInfo();
 74
 075                return fetchRealmsTask.Task.AttachExternalCancellation(cancellationToken)
 76                                      .Timeout(TimeSpan.FromSeconds(30));
 77            }
 078            catch (Exception)
 79            {
 080                fetchRealmsTask = null;
 081                throw;
 82            }
 083        }
 84    }
 85
 86    [Serializable]
 87    public class RealmsInfoModel
 88    {
 89        public CurrentRealmModel current;
 90        public RealmModel[] realms;
 91    }
 92}