public async Task <IList <SubscriptionObject> > GetSubscriptions()
        {
            if (azureADAuthResult == null)
            {
                throw new Exception(Properties.Resources.AzureADAuthResult);
            }

            // Common subscription object to host subscriptions from RDFE & ARM
            IList <SubscriptionObject> subscriptionList = new List <SubscriptionObject>();

            subscriptionCredentials = new Microsoft.Azure.TokenCloudCredentials(azureADAuthResult.AccessToken);
            subscriptionClient      = new Microsoft.Azure.Subscriptions.SubscriptionClient(subscriptionCredentials);

            var cancelToken = new CancellationToken();

            Microsoft.Azure.Subscriptions.Models.SubscriptionListResult subscriptionResults = await subscriptionClient.Subscriptions.ListAsync(cancelToken);

            // Add any ARM subscriptions to the common subscription object
            foreach (var subscription in subscriptionResults.Subscriptions)
            {
                var subList = new SubscriptionObject();
                subList.Name           = subscription.DisplayName;
                subList.SubscriptionId = subscription.SubscriptionId;
                subList.Authority      = "common";
                subscriptionList.Add(subList);
            }

            // Add any RDFE subscriptions to the common subscription object
            IList <Microsoft.WindowsAzure.Subscriptions.Models.SubscriptionListOperationResponse.Subscription> RDFEsubscriptions = await GetRDFESubscriptions();

            foreach (var subscription in RDFEsubscriptions)
            {
                // Only add subscriptions that are not already in the subscription list
                if (subscriptionList.Where(x => x.SubscriptionId == subscription.SubscriptionId).Count() == 0)
                {
                    var subList = new SubscriptionObject();
                    subList.Name           = subscription.SubscriptionName;
                    subList.SubscriptionId = subscription.SubscriptionId;
                    subList.Authority      = subscription.ActiveDirectoryTenantId;
                    subscriptionList.Add(subList);
                }
            }

            return(subscriptionList);
        }
        public SubscriptionClient GetSubscriptionClient()
        {
            var tenantMock = new Mock<ITenantOperations>();
            tenantMock.Setup(t => t.ListAsync(It.IsAny<CancellationToken>()))
                .Returns(
                    (CancellationToken token) =>
                        Task.FromResult(new TenantListResult()
                        {
                            StatusCode = HttpStatusCode.OK,
                            RequestId = Guid.NewGuid().ToString(),
                            TenantIds = _tenants.Select((k) => new TenantIdDescription() { Id = k, TenantId = k }).ToList()
                        }));
            var subscriptionMock = new Mock<ISubscriptionOperations>();
            subscriptionMock.Setup(
                s => s.GetAsync(It.IsAny<string>(), It.IsAny<CancellationToken>())).Returns(
                    (string subId, CancellationToken token) =>
                    {
                        if (_getAsyncQueue != null && _getAsyncQueue.Any())
                        {
                            return Task.FromResult(_getAsyncQueue.Dequeue().Invoke());
                        }
                        GetSubscriptionResult result = new GetSubscriptionResult
                        {
                            RequestId = Guid.NewGuid().ToString(),
                            StatusCode = HttpStatusCode.NotFound
                        };
                        if (_subscriptionSet.Contains(subId))
                        {
                            result.StatusCode = HttpStatusCode.OK;
                            result.Subscription =
                                new Subscription
                                {
                                    DisplayName = GetSubscriptionNameFromId(subId),
                                    Id = subId,
                                    State = "Active",
                                    SubscriptionId = subId
                                };

                        }

                        return Task.FromResult(result);
                    });
            subscriptionMock.Setup(
                (s) => s.ListAsync(It.IsAny<CancellationToken>())).Returns(
                    (CancellationToken token) =>
                    {
                        if (_listAsyncQueue != null && _listAsyncQueue.Any())
                        {
                            return Task.FromResult(_listAsyncQueue.Dequeue().Invoke());
                        }
                        
                        SubscriptionListResult result = null;
                        if (_subscriptions.Count > 0)
                        {
                            var subscriptionList = _subscriptions.Dequeue();
                            result = new SubscriptionListResult
                            {
                                StatusCode = HttpStatusCode.OK,
                                RequestId = Guid.NewGuid().ToString(),
                                NextLink = "LinkToNextPage",
                                Subscriptions =
                                    new List<Subscription>(
                                        subscriptionList.Select(
                                            sub =>
                                                new Subscription
                                                {
                                                    DisplayName = GetSubscriptionNameFromId(sub),
                                                    Id = sub,
                                                    State = "enabled",
                                                    SubscriptionId = sub
                                                }))
                            };
                        }

                        return Task.FromResult(result);
                    });
            subscriptionMock.Setup(
                (s) => s.ListNextAsync("LinkToNextPage", It.IsAny<CancellationToken>())).Returns(
                    (string nextLink, CancellationToken token) =>
                    {
                        SubscriptionListResult result = null;
                        if (_subscriptions.Count > 0)
                        {
                            var subscriptionList = _subscriptions.Dequeue();
                            result = new SubscriptionListResult
                            {
                                StatusCode = HttpStatusCode.OK,
                                RequestId = Guid.NewGuid().ToString(),
                                Subscriptions =
                                    new List<Subscription>(
                                        subscriptionList.Select(
                                            sub =>
                                                new Subscription
                                                {
                                                    DisplayName = nextLink,
                                                    Id = sub,
                                                    State = "Disabled",
                                                    SubscriptionId = sub
                                                }))
                            };
                        }
                        return Task.FromResult(result);
                    });
            var client = new Mock<SubscriptionClient>();
            client.SetupGet(c => c.Subscriptions).Returns(subscriptionMock.Object);
            client.SetupGet(c => c.Tenants).Returns(tenantMock.Object);
            return client.Object;
        }