Skip to content

Commit cbeef4c

Browse files
committed
Merge pull request #190 from stankovski/dev
Fixed issue with account being wiped out by Select-AzureSubscription
2 parents 1549b8e + 9a42d39 commit cbeef4c

File tree

2 files changed

+74
-4
lines changed

2 files changed

+74
-4
lines changed

src/Common/Commands.Common.Test/Common/ProfileCmdltsTests.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,50 @@ public void SelectAzureSubscriptionByNameUpdatesProfile()
517517
Assert.Equal(azureSubscription2.Id, cmdlt.Profile.Context.Subscription.Id);
518518
}
519519

520+
[Fact]
521+
public void SelectAzureSubscriptionByNameWithoutAccountPreservesTheAccount()
522+
{
523+
SetupDefaultProfile();
524+
SelectAzureSubscriptionCommand cmdlt = new SelectAzureSubscriptionCommand();
525+
526+
// Setup
527+
cmdlt.CommandRuntime = commandRuntimeMock;
528+
cmdlt.SetParameterSet("SelectSubscriptionByNameParameterSet");
529+
cmdlt.SubscriptionName = azureSubscription2.Name;
530+
531+
// Act
532+
cmdlt.InvokeBeginProcessing();
533+
cmdlt.ExecuteCmdlet();
534+
cmdlt.InvokeEndProcessing();
535+
536+
// Verify
537+
Assert.NotNull(cmdlt.Profile.Context.Subscription);
538+
Assert.Equal(azureSubscription2.Account, cmdlt.Profile.Context.Subscription.Account);
539+
Assert.Equal(azureSubscription2.Id, cmdlt.Profile.Context.Subscription.Id);
540+
}
541+
542+
[Fact]
543+
public void SelectAzureSubscriptionByIdWithoutAccountPreservesTheAccount()
544+
{
545+
SetupDefaultProfile();
546+
SelectAzureSubscriptionCommand cmdlt = new SelectAzureSubscriptionCommand();
547+
548+
// Setup
549+
cmdlt.CommandRuntime = commandRuntimeMock;
550+
cmdlt.SetParameterSet("SelectSubscriptionByIdParameterSet");
551+
cmdlt.SubscriptionId = azureSubscription2.Id.ToString();
552+
553+
// Act
554+
cmdlt.InvokeBeginProcessing();
555+
cmdlt.ExecuteCmdlet();
556+
cmdlt.InvokeEndProcessing();
557+
558+
// Verify
559+
Assert.NotNull(cmdlt.Profile.Context.Subscription);
560+
Assert.Equal(azureSubscription2.Account, cmdlt.Profile.Context.Subscription.Account);
561+
Assert.Equal(azureSubscription2.Id, cmdlt.Profile.Context.Subscription.Id);
562+
}
563+
520564
[Fact]
521565
public void SelectAzureSubscriptionWithoutPassthroughDoesNotPrint()
522566
{

src/Common/Commands.Profile/Subscription/SelectAzureSubscription.cs

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
// ----------------------------------------------------------------------------------
1414

1515
using System;
16+
using System.Linq;
1617
using System.Management.Automation;
1718
using Microsoft.WindowsAzure.Commands.Common;
1819
using Microsoft.Azure.Common.Authentication.Models;
@@ -94,20 +95,20 @@ public override void ExecuteCmdlet()
9495
switch (ParameterSetName)
9596
{
9697
case SelectSubscriptionByNameParameterSet:
97-
azureSubscription = ProfileClient.SetSubscriptionAsDefault(SubscriptionName, Account);
98+
azureSubscription = ProfileClient.SetSubscriptionAsDefault(SubscriptionName, GetAccount());
9899
break;
99100

100101
case SelectSubscriptionByIdParameterSet:
101-
azureSubscription = ProfileClient.SetSubscriptionAsDefault(SubscriptionIdAsGuid(), Account);
102+
azureSubscription = ProfileClient.SetSubscriptionAsDefault(SubscriptionIdAsGuid(), GetAccount());
102103
break;
103104

104105
case SelectDefaultSubscriptionByNameParameterSet:
105-
azureSubscription = ProfileClient.SetSubscriptionAsDefault(SubscriptionName, Account);
106+
azureSubscription = ProfileClient.SetSubscriptionAsDefault(SubscriptionName, GetAccount());
106107
WriteWarning("Current and Default parameters have been deprecated. Select-AzureSubscription will always update the Default Subscription.");
107108
break;
108109

109110
case SelectDefaultSubscriptionByIdParameterSet:
110-
azureSubscription = ProfileClient.SetSubscriptionAsDefault(SubscriptionIdAsGuid(), Account);
111+
azureSubscription = ProfileClient.SetSubscriptionAsDefault(SubscriptionIdAsGuid(), GetAccount());
111112
WriteWarning("Current and Default parameters have been deprecated. Select-AzureSubscription will always update the Default Subscription.");
112113
break;
113114

@@ -126,6 +127,31 @@ public override void ExecuteCmdlet()
126127
}
127128
}
128129

130+
/// <summary>
131+
/// Returns Account specified in the parameter or current account of the subscription
132+
/// </summary>
133+
/// <returns></returns>
134+
private string GetAccount()
135+
{
136+
if (!string.IsNullOrEmpty(Account))
137+
{
138+
return Account;
139+
}
140+
141+
AzureSubscription subscription = ProfileClient.Profile.Subscriptions.Values
142+
.FirstOrDefault(s => s.Name.Equals(SubscriptionName, StringComparison.InvariantCultureIgnoreCase) ||
143+
s.Id.ToString().Equals(SubscriptionId, StringComparison.InvariantCultureIgnoreCase));
144+
145+
if (subscription != null)
146+
{
147+
return subscription.Account;
148+
}
149+
else
150+
{
151+
return null;
152+
}
153+
}
154+
129155
private Guid SubscriptionIdAsGuid()
130156
{
131157
Guid subscriptionIdGuid;

0 commit comments

Comments
 (0)