public async Task ShouldGetAllTokensUsingServerFeatures()
        {
            var request = new GetAllOwnedTokensSharedRequest();

            GetAllOwnedTokensSharedResponse totalTokens = await Mediator.Send(request);

            totalTokens.TokenIdList.Count.ShouldBe(3);
        }
            public override async Task <WebThreeState> Handle
            (
                GetAllOwnedTokensAction aGetAllOwnedTokensClientRequest,
                CancellationToken aCancellationToken
            )
            {
                TokenDataList = new List <TokenBase>();
                WebThreeState WebThreeState = Store.GetState <WebThreeState>();
                GetAllOwnedTokensSharedResponse aTokenList = await HttpClient.GetJsonAsync <GetAllOwnedTokensSharedResponse>(GetAllOwnedTokensSharedRequest.Route);

                WebThreeState.OwnedTokenIdList = aTokenList.TokenIdList;

                if (aTokenList.TokenIdList.Count > 0)
                {
                    foreach (uint token in aTokenList.TokenIdList)
                    {
                        // TokenId

                        var ownedToken = new TokenBase()
                        {
                            TokenId = token
                        };

                        // TokenNFtTypeId

                        ownedToken.TemplateData = await GetNft(ownedToken.TokenId);

                        // Get Token Nft Type Data


                        // Token Balance

                        ownedToken.Balance = await GetBalance(token);

                        // Token ImmutableData (Data)

                        string aDataString = await GetDataString(token);

                        DeserializeAndAddData(ownedToken, aDataString);
                    }
                    WebThreeState.TokenDataList       = TokenDataList;
                    WebThreeState.CurrentTokenData    = TokenDataList[0];
                    WebThreeState.CurrentTokenNftType = WebThreeState.CurrentTokenData.TemplateData.NftId;
                }
                return(WebThreeState);
            }
        //List<NftTemplate> TemplateDataList => WebThreeState.TemplateDataList;

        public async Task ShouldBuildTokenList()
        {
            WebThreeState webThree = await Mediator.Send(new GetNftTypesClientFeaturesAction());

            GetAllOwnedTokensSharedResponse aTokenList = await HttpClient.GetJsonAsync <GetAllOwnedTokensSharedResponse>(GetAllOwnedTokensSharedRequest.Route);

            aTokenList.TokenIdList.Count.ShouldBeGreaterThan(3);
            aTokenList.TokenIdList.Contains(3).ShouldBe(true);
            aTokenList.TokenIdList.Contains(4).ShouldBe(true);
            aTokenList.TokenIdList.Contains(5).ShouldBe(true);

            foreach (uint token in aTokenList.TokenIdList)
            {
                // TokenId
                var ownedToken = new TokenBase()
                {
                    TokenId = token
                };

                // TokenNFtTypeId
                string getNftTypeUri = GetTokenNftTypeSharedRequest.RouteFactory((int)token);

                WebThreeState NftTypeContainer = await Mediator.Send(new FetchTokenNftTypeAction()
                {
                    TokenId = (int)ownedToken.TokenId
                });

                // TokenNftTypeData Should already have the data in state so no need to make a service call
                NftTemplate nftType = webThree.TemplateDataList.Find(nft => nft.NftId == NftTypeContainer.CurrentTokenNftType);

                ownedToken.TemplateData = nftType;

                // Token Balance

                BalanceOfSharedResponse BalanceContainer = await HttpClient.GetJsonAsync <BalanceOfSharedResponse>(BalanceOfSharedRequest.RouteFactory((int)token));

                ownedToken.Balance = BalanceContainer.Balance;

                // Token ImmutableData (Data)

                ownedToken.TemplateData.ShouldBeOfType <NftTemplate>();

                ViewTokenDataSharedResponse DataString = await HttpClient.GetJsonAsync <ViewTokenDataSharedResponse>(ViewTokenDataSharedRequest.RouteFactory((int)token));

                DataString.TokenDataString.ShouldNotBe(null);
                if (token == 3)
                {
                    byte[] serializedImmutableData = Convert.FromBase64String(DataString.TokenDataString);
                    // need to figure out a way to get the type occording to the nftId
                    ImmutableData DeserializedObject = Serializer.Deserialize <ImmutableData>(serializedImmutableData, options); // options == 0

                    ownedToken.ImmDataObj = DeserializedObject;

                    // Add to StateList
                    TokenDataList.Add(ownedToken);
                }
                else
                {
                    ownedToken.Data = DataString.TokenDataString;

                    TokenDataList.Add(ownedToken);
                }
            }

            TokenDataList.Count.ShouldBe(3);
        }