diff --git a/src/Common/Commands.Common.Test/Common/ProfileClientTests.cs b/src/Common/Commands.Common.Test/Common/ProfileClientTests.cs index f16bd866e80b..850e66b46cc2 100644 --- a/src/Common/Commands.Common.Test/Common/ProfileClientTests.cs +++ b/src/Common/Commands.Common.Test/Common/ProfileClientTests.cs @@ -109,7 +109,7 @@ public void ProfileMigratesAccountsAndDefaultSubscriptions() Assert.Equal("https://api-dogfood.resources.windows-int.net", client.Profile.Environments["Dogfood"].Endpoints[AzureEnvironment.Endpoint.ResourceManager]); Assert.Equal("https://management-preview.core.windows-int.net/", client.Profile.Environments["Dogfood"].Endpoints[AzureEnvironment.Endpoint.ServiceManagement]); Assert.Equal(".database.windows.net", client.Profile.Environments["Dogfood"].Endpoints[AzureEnvironment.Endpoint.SqlDatabaseDnsSuffix]); - + // Verify subscriptions Assert.Equal(3, client.Profile.Subscriptions.Count); Assert.False(client.Profile.Subscriptions.ContainsKey(new Guid("06E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E"))); @@ -157,7 +157,7 @@ public void ProfileMigratesAccountsSkipsBadOnesAndBacksUpFile() // Verify Environment migration Assert.Equal(2, client.Profile.Environments.Count); - + // Verify subscriptions Assert.Equal(3, client.Profile.Subscriptions.Count); Assert.True(client.Profile.Subscriptions.ContainsKey(new Guid("06E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1F"))); @@ -168,7 +168,7 @@ public void ProfileMigratesAccountsSkipsBadOnesAndBacksUpFile() Assert.True(client.Profile.Subscriptions.ContainsKey(new Guid("d1e52cbc-b073-42e2-a0a0-c2f547118a6f"))); Assert.Equal("Test Bad Cert", client.Profile.Subscriptions[new Guid("d1e52cbc-b073-42e2-a0a0-c2f547118a6f")].Name); - + // Verify accounts Assert.Equal(2, client.Profile.Accounts.Count); Assert.Equal("test@mail.com", client.Profile.Accounts["test@mail.com"].Id); @@ -204,10 +204,10 @@ public void ProfileMigratesCorruptedFileAndCreatedBackup() // Verify Environment migration Assert.Equal(2, client.Profile.Environments.Count); - + // Verify subscriptions Assert.Equal(0, client.Profile.Subscriptions.Count); - + // Verify accounts Assert.Equal(0, client.Profile.Accounts.Count); @@ -258,7 +258,7 @@ public void AddAzureAccountReturnsAccountWithAllSubscriptionsInRdfeMode() ProfileClient.DataStore = dataStore; ProfileClient client = new ProfileClient(); - var account = client.AddAccountAndLoadSubscriptions(new AzureAccount { Id = "test", Type = AzureAccount.AccountType.User }, AzureEnvironment.PublicEnvironments[ EnvironmentName.AzureCloud], null); + var account = client.AddAccountAndLoadSubscriptions(new AzureAccount { Id = "test", Type = AzureAccount.AccountType.User }, AzureEnvironment.PublicEnvironments[EnvironmentName.AzureCloud], null); Assert.Equal("test", account.Id); Assert.Equal(3, account.GetSubscriptions(client.Profile).Count); @@ -603,7 +603,7 @@ public void SetAzureEnvironmentUpdatesEnvironment() Assert.Equal(2, client.Profile.Environments.Count); Assert.Throws(() => client.AddOrSetEnvironment(null)); - + var env2 = client.AddOrSetEnvironment(azureEnvironment); Assert.Equal(env2.Name, azureEnvironment.Name); Assert.NotNull(env2.Endpoints[AzureEnvironment.Endpoint.ServiceManagement]); @@ -672,7 +672,7 @@ public void AddOrSetAzureSubscriptionChecksAndUpdates() Assert.Equal(subscription, azureSubscription1); Assert.Throws(() => client.AddOrSetSubscription(null)); Assert.Throws(() => client.AddOrSetSubscription( - new AzureSubscription { Id = new Guid(), Environment = null, Name = "foo"})); + new AzureSubscription { Id = new Guid(), Environment = null, Name = "foo" })); } [Fact] @@ -792,7 +792,7 @@ public void RefreshSubscriptionsWorksWithMooncake() MockDataStore dataStore = new MockDataStore(); ProfileClient.DataStore = dataStore; ProfileClient client = new ProfileClient(); - + client.Profile.Accounts[azureAccount.Id] = azureAccount; var subscriptions = client.RefreshSubscriptions(client.Profile.Environments[EnvironmentName.AzureChinaCloud]); @@ -878,7 +878,7 @@ public void SetAzureSubscriptionAsDefaultSetsDefaultAndCurrent() Assert.Equal(azureSubscription2.Id, client.Profile.DefaultSubscription.Id); Assert.Equal(azureSubscription2.Id, AzureSession.CurrentContext.Subscription.Id); Assert.Throws(() => client.SetSubscriptionAsDefault("bad", null)); - Assert.Throws(() => client.SetSubscriptionAsDefault(null, null)); + Assert.Throws(() => client.SetSubscriptionAsDefault(null, null)); } [Fact] @@ -917,7 +917,7 @@ public void SetAzureSubscriptionAsCurrentSetsCurrent() Assert.Equal(azureSubscription2.Id, AzureSession.CurrentContext.Subscription.Id); Assert.Throws(() => client.SetSubscriptionAsCurrent("bad", null)); - Assert.Throws(() => client.SetSubscriptionAsCurrent(null, null)); + Assert.Throws(() => client.SetSubscriptionAsCurrent(null, null)); } [Fact] @@ -1076,6 +1076,73 @@ public void ImportPublishSettingsUsesPassedInEnvironment() Assert.Equal(7, client.Profile.Subscriptions.Count); } + [Fact] + public void SelectAzureSubscriptionByIdWorks() + { + MockDataStore dataStore = new MockDataStore(); + ProfileClient.DataStore = dataStore; + ProfileClient client = new ProfileClient(); + + var tempSubscriptions = new List + { + new AzureSubscription + { + Id = new Guid("11111111-1383-4740-8A69-748C5B63ADBA"), + Name = "Same Name Subscription", + Environment = azureEnvironment.Name, + Account = azureAccount.Id, + Properties = new Dictionary + { + { AzureSubscription.Property.Default, "True" } + } + }, + + new AzureSubscription + { + Id = new Guid("22222222-1383-4740-8A69-748C5B63ADBA"), + Name = "Same Name Subscription", + Environment = azureEnvironment.Name, + Account = azureAccount.Id, + Properties = new Dictionary() + }, + + new AzureSubscription + { + Id = new Guid("33333333-1383-4740-8A69-748C5B63ADBA"), + Name = "Same Name Subscription", + Environment = azureEnvironment.Name, + Account = azureAccount.Id, + Properties = new Dictionary() + } + }; + + client.Profile.Accounts[azureAccount.Id] = azureAccount; + client.AddOrSetEnvironment(azureEnvironment); + + foreach (var s in tempSubscriptions) + { + client.AddOrSetSubscription(s); + } + + client.SetSubscriptionAsCurrent(tempSubscriptions[0].Name, tempSubscriptions[0].Account); + client.Profile.Save(); + + Assert.Equal(tempSubscriptions[0].Id, AzureSession.CurrentContext.Subscription.Id); + + var cmdlt = new SelectAzureSubscriptionCommand(); + + cmdlt.CommandRuntime = new MockCommandRuntime(); + cmdlt.SubscriptionId = tempSubscriptions[2].Id.ToString(); + cmdlt.SetParameterSet("SelectSubscriptionByIdParameterSet"); + + // Act + cmdlt.InvokeBeginProcessing(); + cmdlt.ExecuteCmdlet(); + cmdlt.InvokeEndProcessing(); + + Assert.Equal(tempSubscriptions[2].Id, AzureSession.CurrentContext.Subscription.Id); + } + [Fact] public void ImportPublishSettingsAddsSecondCertificate() { diff --git a/src/Common/Commands.Common/Common/ProfileClient.cs b/src/Common/Commands.Common/Common/ProfileClient.cs index 5db8aec5e895..9e89e74ff103 100644 --- a/src/Common/Commands.Common/Common/ProfileClient.cs +++ b/src/Common/Commands.Common/Common/ProfileClient.cs @@ -372,7 +372,7 @@ private AzureAccount GetSubscriptionAccount(Guid subscriptionId) #endregion - #region Subscripton management + #region Subscription management public AzureSubscription AddOrSetSubscription(AzureSubscription subscription) { @@ -521,31 +521,31 @@ public AzureSubscription GetSubscription(string name) } } - public AzureSubscription SetSubscriptionAsCurrent(Guid id, string accountName) + public AzureSubscription SetSubscriptionAsCurrent(string name, string accountName) { - var subscription = Profile.Subscriptions.Values.FirstOrDefault(s => s.Id == id); + var subscription = Profile.Subscriptions.Values.FirstOrDefault(s => s.Name == name); if (subscription == null) { - throw new ArgumentException(string.Format(Resources.InvalidSubscriptionId, id), "id"); + throw new ArgumentException(string.Format(Resources.InvalidSubscriptionName, name), "name"); } - return SetSubscriptionAsCurrent(subscription.Name, accountName); + return SetSubscriptionAsCurrent(subscription.Id, accountName); } - public AzureSubscription SetSubscriptionAsCurrent(string name, string accountName) + public AzureSubscription SetSubscriptionAsCurrent(Guid id, string accountName) { - if (string.IsNullOrEmpty(name)) + if (Guid.Empty == id) { - throw new ArgumentNullException("name", string.Format(Resources.InvalidSubscription, name)); + throw new ArgumentNullException("id", string.Format(Resources.InvalidSubscriptionId, id)); } AzureSubscription currentSubscription = null; - var subscription = Profile.Subscriptions.Values.FirstOrDefault(s => s.Name == name); + var subscription = Profile.Subscriptions.Values.FirstOrDefault(s => s.Id == id); if (subscription == null) { - throw new ArgumentException(string.Format(Resources.InvalidSubscription, name), "name"); + throw new ArgumentException(string.Format(Resources.InvalidSubscriptionId, id), "id"); } else { @@ -561,21 +561,21 @@ public AzureSubscription SetSubscriptionAsCurrent(string name, string accountNam return currentSubscription; } - public AzureSubscription SetSubscriptionAsDefault(Guid id, string accountName) + public AzureSubscription SetSubscriptionAsDefault(string name, string accountName) { - var subscription = Profile.Subscriptions.Values.FirstOrDefault(s => s.Id == id); + var subscription = Profile.Subscriptions.Values.FirstOrDefault(s => s.Name == name); if (subscription == null) { - throw new ArgumentException(string.Format(Resources.InvalidSubscriptionId, id), "id"); + throw new ArgumentException(string.Format(Resources.InvalidSubscriptionName, name), "name"); } - return SetSubscriptionAsDefault(subscription.Name, accountName); + return SetSubscriptionAsDefault(subscription.Id, accountName); } - public AzureSubscription SetSubscriptionAsDefault(string name, string accountName) + public AzureSubscription SetSubscriptionAsDefault(Guid id, string accountName) { - AzureSubscription subscription = SetSubscriptionAsCurrent(name, accountName); + AzureSubscription subscription = SetSubscriptionAsCurrent(id, accountName); if (subscription != null) { diff --git a/src/Common/Commands.ScenarioTests.Common/PowerShellExtensions.cs b/src/Common/Commands.ScenarioTests.Common/PowerShellExtensions.cs index a27b604985da..38c071b43059 100644 --- a/src/Common/Commands.ScenarioTests.Common/PowerShellExtensions.cs +++ b/src/Common/Commands.ScenarioTests.Common/PowerShellExtensions.cs @@ -27,7 +27,7 @@ public static class PowerShellExtensions public static string CredentialImportFormat = "Import-AzurePublishSettingsFile '{0}'"; /// - /// Gets a powershell varibale from the current session and convernts it back to it's original type. + /// Gets a powershell variable from the current session and converts it back to it's original type. /// /// The powershell object original type /// The PowerShell instance