public PSAzureSubscription(AzureSubscription subscription, AzureProfile profile)
 {
     SubscriptionId = subscription.Id.ToString();
     SubscriptionName = subscription.Name;
     Environment = subscription.Environment;
     SupportedModes = subscription.GetProperty(AzureSubscription.Property.SupportedModes);
     DefaultAccount = subscription.Account;
     Accounts = profile.Accounts.Values.Where(a => a.HasSubscription(subscription.Id)).ToArray();
     IsDefault = subscription.IsPropertySet(AzureSubscription.Property.Default);
     IsCurrent = profile.Context.Subscription != null && profile.Context.Subscription.Id == subscription.Id;
     CurrentStorageAccountName = subscription.GetProperty(AzureSubscription.Property.StorageAccount);
     TenantId = subscription.GetPropertyAsArray(AzureSubscription.Property.Tenants).FirstOrDefault();
 }
 public void CanConvertValidAzureSubscriptions(string account, string name, string environment, string storageAccount, string expectedAccountName)
  {
      var oldSubscription = new AzureSubscription()
      {
          Account = account,
          Environment = environment,
          Id = Guid.NewGuid(),
          Name = name
      };
      oldSubscription.SetProperty(AzureSubscription.Property.StorageAccount, storageAccount);
      oldSubscription.SetProperty(AzureSubscription.Property.Tenants, Guid.NewGuid().ToString());
      var subscription = (PSAzureSubscription) oldSubscription;
      Assert.Equal(oldSubscription.Name, subscription.SubscriptionName);
      Assert.Equal(oldSubscription.Id.ToString(), subscription.SubscriptionId);
      Assert.Equal(oldSubscription.GetProperty(AzureSubscription.Property.Tenants), subscription.TenantId);
      Assert.Equal(expectedAccountName, subscription.CurrentStorageAccountName);
      Assert.Equal(storageAccount, subscription.CurrentStorageAccount);
      Assert.NotNull(subscription.ToString());
  }
        private PSAzureSubscriptionExtended ConstructPsAzureSubscriptionExtended(AzureSubscription subscription, IClientFactory clientFactory)
        {
            using (var client = clientFactory.CreateClient<ManagementClient>(Profile, subscription, AzureEnvironment.Endpoint.ServiceManagement))
            {
                var response = client.Subscriptions.Get();
                var environment = ProfileClient.GetEnvironmentOrDefault(subscription.Environment);
                var account = ProfileClient.Profile.Accounts[subscription.Account];
                bool isCert = account.Type == AzureAccount.AccountType.Certificate;
                var psAzureSubscription = new PSAzureSubscription(subscription, ProfileClient.Profile);
                PSAzureSubscriptionExtended result = new PSAzureSubscriptionExtended(psAzureSubscription)
                {
                    AccountAdminLiveEmailId = response.AccountAdminLiveEmailId,
                    ActiveDirectoryUserId = subscription.Account,
                    CurrentCoreCount = response.CurrentCoreCount,
                    CurrentHostedServices = response.CurrentHostedServices,
                    CurrentDnsServers = response.CurrentDnsServers,
                    CurrentLocalNetworkSites = response.CurrentLocalNetworkSites,
                    CurrentStorageAccounts = response.CurrentStorageAccounts,
                    CurrentVirtualNetworkSites = response.CurrentVirtualNetworkSites,
                    MaxCoreCount = response.MaximumCoreCount,
                    MaxDnsServers = response.MaximumDnsServers,
                    MaxHostedServices = response.MaximumHostedServices,
                    MaxLocalNetworkSites = response.MaximumLocalNetworkSites,
                    MaxStorageAccounts = response.MaximumStorageAccounts,
                    MaxVirtualNetworkSites = response.MaximumVirtualNetworkSites,
                    ServiceAdminLiveEmailId = response.ServiceAdminLiveEmailId,
                    SubscriptionRealName = response.SubscriptionName,
                    SubscriptionStatus = response.SubscriptionStatus.ToString(),
                    ServiceEndpoint = environment.GetEndpoint(AzureEnvironment.Endpoint.ServiceManagement),
                    ResourceManagerEndpoint = environment.GetEndpoint(AzureEnvironment.Endpoint.ResourceManager),
                    IsDefault = subscription.GetProperty(AzureSubscription.Property.Default) != null,
                    Account = account,
                    Certificate = isCert ? AzureSession.DataStore.GetCertificate(subscription.Account) : null,
                    CurrentStorageAccountName = subscription.GetProperty(AzureSubscription.Property.StorageAccount)
                };

                return result;
            }
        }
        private AzureSubscription MergeSubscriptionProperties(AzureSubscription subscription1, AzureSubscription subscription2)
        {
            if (subscription1 == null || subscription2 == null)
            {
                throw new ArgumentNullException("subscription1");
            }
            if (subscription1.Id != subscription2.Id)
            {
                throw new ArgumentException("Subscription Ids do not match.");
            }
            AzureSubscription mergedSubscription = new AzureSubscription
            {
                Id = subscription1.Id,
                Name = subscription1.Name,
                Environment = subscription1.Environment,
                Account = subscription1.Account ?? subscription2.Account
            };

            // Merge all properties
            foreach (AzureSubscription.Property property in Enum.GetValues(typeof(AzureSubscription.Property)))
            {
                string propertyValue = subscription1.GetProperty(property) ?? subscription2.GetProperty(property);
                if (propertyValue != null)
                {
                    mergedSubscription.Properties[property] = propertyValue;
                }
            }

            // Merge RegisteredResourceProviders
            var registeredProviders = subscription1.GetPropertyAsArray(AzureSubscription.Property.RegisteredResourceProviders)
                    .Union(subscription2.GetPropertyAsArray(AzureSubscription.Property.RegisteredResourceProviders), StringComparer.CurrentCultureIgnoreCase);

            mergedSubscription.SetProperty(AzureSubscription.Property.RegisteredResourceProviders, registeredProviders.ToArray());

            // Merge Tenants
            var tenants = subscription1.GetPropertyAsArray(AzureSubscription.Property.Tenants)
                    .Union(subscription2.GetPropertyAsArray(AzureSubscription.Property.Tenants), StringComparer.CurrentCultureIgnoreCase);

            mergedSubscription.SetProperty(AzureSubscription.Property.Tenants, tenants.ToArray());

            return mergedSubscription;
        }
        private PSAzureSubscription ConstructPsAzureSubscription(AzureSubscription subscription)
        {
            PSAzureSubscription psObject = new PSAzureSubscription();

            psObject.SubscriptionId = subscription.Id.ToString();
            psObject.SubscriptionName = subscription.Name;
            psObject.Environment = subscription.Environment;
            psObject.SupportedModes = subscription.GetProperty(AzureSubscription.Property.SupportedModes);
            psObject.DefaultAccount = subscription.Account;
            psObject.Accounts = ProfileClient.Profile.Accounts.Values.Where(a => a.HasSubscription(subscription.Id)).ToArray();
            psObject.IsDefault = subscription.IsPropertySet(AzureSubscription.Property.Default);
            psObject.IsCurrent = Profile.Context.Subscription != null && Profile.Context.Subscription.Id == subscription.Id;
            psObject.CurrentStorageAccountName = subscription.GetProperty(AzureSubscription.Property.StorageAccount);
            psObject.TenantId = subscription.GetPropertyAsArray(AzureSubscription.Property.Tenants).FirstOrDefault();
            return psObject;
        }