Skip to content

Commit d66e253

Browse files
NoriZCNori Zhang
andauthored
Return all valid results when filter subscriptions by name. (#19335)
* Return all valid results when filter subscriptions by name. * Satisfy assert.False() check. * Modify to support SetCurrentContext function. * Revert "Modify to support SetCurrentContext function." This reverts commit d804c94. * Revert "Revert "Modify to support SetCurrentContext function."" This reverts commit 2984037. * Revert all changes of modification. * Add new function GetSubscriptionListByName. * Edit Changelog. * Update Changelog.md. Co-authored-by: Nori Zhang <“[email protected]”>
1 parent ece4b73 commit d66e253

File tree

4 files changed

+111
-3
lines changed

4 files changed

+111
-3
lines changed

src/Accounts/Accounts.Test/AzureRMProfileTests.cs

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,36 @@ public void MultipleTenantsAndSubscriptionsSucceed()
424424
Assert.Equal(DefaultSubscription.ToString(), subValue.Id.ToString());
425425
}
426426

427+
[Fact]
428+
[Trait(Category.AcceptanceType, Category.CheckIn)]
429+
public void MultipleTenantsSubscriptionListSucceed()
430+
{
431+
var tenants = new List<string> { Guid.NewGuid().ToString(), DefaultTenant.ToString() };
432+
var secondsubscriptionInTheFirstTenant = Guid.NewGuid().ToString();
433+
var firstList = new List<string> { DefaultSubscription.ToString(), secondsubscriptionInTheFirstTenant };
434+
var secondList = new List<string> { Guid.NewGuid().ToString() };
435+
var thirdList = new List<string> { DefaultSubscription.ToString(), secondsubscriptionInTheFirstTenant };
436+
var fourthList = new List<string> { DefaultSubscription.ToString(), secondsubscriptionInTheFirstTenant };
437+
var client = SetupTestEnvironment(tenants, firstList, secondList,
438+
thirdList, fourthList,
439+
thirdList, fourthList,
440+
thirdList, fourthList);
441+
var subResults = new List<IAzureSubscription>(client.ListSubscriptions());
442+
Assert.Equal(7, subResults.Count);
443+
var tenantResults = client.ListTenants();
444+
Assert.Equal(2, tenantResults.Count());
445+
tenantResults = client.ListTenants(DefaultTenant.ToString());
446+
Assert.Single(tenantResults);
447+
IAzureSubscription subValue;
448+
IEnumerable<IAzureSubscription> subValueList;
449+
Assert.True(client.TryGetSubscriptionById(DefaultTenant.ToString(), DefaultSubscription.ToString(), out subValue));
450+
Assert.Equal(DefaultSubscription.ToString(), subValue.Id.ToString());
451+
Assert.True(client.TryGetSubscriptionListByName(DefaultTenant.ToString(),
452+
MockSubscriptionClientFactory.GetSubscriptionNameFromId(DefaultSubscription.ToString()),
453+
out subValueList));
454+
Assert.Equal(DefaultSubscription.ToString(), subValue.Id.ToString());
455+
}
456+
427457
[Fact]
428458
[Trait(Category.AcceptanceType, Category.CheckIn)]
429459
public void SingleTenantAndSubscriptionSucceeds()
@@ -449,6 +479,44 @@ public void SingleTenantAndSubscriptionSucceeds()
449479
Assert.Equal(DefaultSubscription.ToString(), subValue.Id.ToString());
450480
}
451481

482+
[Fact]
483+
[Trait(Category.AcceptanceType, Category.CheckIn)]
484+
public void SingleTenantSubscriptionListSucceed()
485+
{
486+
var tenants = new List<string> { DefaultTenant.ToString() };
487+
var secondsubscriptionInTheFirstTenant = Guid.NewGuid().ToString();
488+
var firstList = new List<string> { DefaultSubscription.ToString()};
489+
var secondList = firstList;
490+
var thirdList = firstList;
491+
var fourthList = firstList;
492+
var client = SetupTestEnvironment(tenants, firstList, secondList, thirdList, fourthList);
493+
var tenantResults = client.ListTenants();
494+
Assert.Single(tenantResults);
495+
IEnumerable<IAzureSubscription> subValueList;
496+
Assert.True(client.TryGetSubscriptionListByName(DefaultTenant.ToString(),
497+
MockSubscriptionClientFactory.GetSubscriptionNameFromId(DefaultSubscription.ToString()),
498+
out subValueList));
499+
}
500+
501+
[Fact]
502+
[Trait(Category.AcceptanceType, Category.CheckIn)]
503+
public void GetSubscriptionListByNameCorrect()
504+
{
505+
var tenants = new List<string> { DefaultTenant.ToString() };
506+
var firstList = new List<string> { DefaultSubscription.ToString() };
507+
var secondList = firstList;
508+
var thirdList = firstList;
509+
var fourthList = firstList;
510+
var client = SetupTestEnvironment(tenants, firstList, secondList, thirdList, fourthList);
511+
var tenantResults = client.ListTenants();
512+
Assert.Single(tenantResults);
513+
IEnumerable<IAzureSubscription> subValueList;
514+
client.TryGetSubscriptionListByName(DefaultTenant.ToString(),
515+
MockSubscriptionClientFactory.GetSubscriptionNameFromId(DefaultSubscription.ToString()),
516+
out subValueList);
517+
Assert.Equal(2, subValueList.Count());
518+
}
519+
452520
[Fact]
453521
[Trait(Category.AcceptanceType, Category.CheckIn)]
454522
public void SubscriptionNotFoundDoesNotThrow()
@@ -470,6 +538,23 @@ public void SubscriptionNotFoundDoesNotThrow()
470538
Assert.False(client.TryGetSubscriptionByName("random-tenant", "random-subscription", out subValue));
471539
}
472540

541+
[Fact]
542+
[Trait(Category.AcceptanceType, Category.CheckIn)]
543+
public void SubscriptionListNotFoundDoesNotThrow()
544+
{
545+
var tenants = new List<string> { DefaultTenant.ToString() };
546+
string randomSubscriptionId = Guid.NewGuid().ToString();
547+
var firstList = new List<string> { randomSubscriptionId };
548+
var secondList = firstList;
549+
var thirdList = firstList;
550+
var fourthList = firstList;
551+
var client = SetupTestEnvironment(tenants, firstList, secondList,
552+
thirdList, fourthList,
553+
thirdList, fourthList);
554+
IEnumerable<IAzureSubscription> subValueList;
555+
Assert.False(client.TryGetSubscriptionListByName("random-tenant", "random-subscription", out subValueList));
556+
}
557+
473558
[Fact]
474559
[Trait(Category.AcceptanceType, Category.CheckIn)]
475560
public void NoTenantsDoesNotThrow()
@@ -496,6 +581,20 @@ public void NoSubscriptionsInListDoesNotThrow()
496581
Assert.False(client.TryGetSubscriptionByName(DefaultTenant.ToString(), "random-name", out subValue));
497582
}
498583

584+
[Fact]
585+
[Trait(Category.AcceptanceType, Category.CheckIn)]
586+
public void NoSubscriptionsInListDoesNotThrowForList()
587+
{
588+
var tenants = new List<string> { DefaultTenant.ToString() };
589+
var subscriptions = new List<string>();
590+
var client = SetupTestEnvironment(tenants, subscriptions, subscriptions,
591+
subscriptions, subscriptions,
592+
subscriptions, subscriptions);
593+
Assert.Empty(client.ListSubscriptions());
594+
IEnumerable<IAzureSubscription> subValueList;
595+
Assert.False(client.TryGetSubscriptionListByName(DefaultTenant.ToString(), "random-name", out subValueList));
596+
}
597+
499598
[Fact]
500599
[Trait(Category.AcceptanceType, Category.CheckIn)]
501600
public void SetContextPreservesTokenCache()

src/Accounts/Accounts/ChangeLog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
-->
2020

2121
## Upcoming Release
22+
* Supported returning all subscriptions with specified name while using `Get-AzSubscription` with paramater `SubscriptionName`. [#19295]
2223

2324
## Version 2.9.1
2425
* Implemented `SupportsShouldProcess` for `Invoke-AzRestMethod`

src/Accounts/Accounts/Models/RMProfileClient.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,13 @@ public bool TryGetSubscriptionByName(string tenantId, string subscriptionName, o
421421
return subscription != null;
422422
}
423423

424+
public bool TryGetSubscriptionListByName(string tenantId, string subscriptionName, out IEnumerable<IAzureSubscription> subscriptionList)
425+
{
426+
subscriptionList = ListSubscriptions(tenantId);
427+
subscriptionList = subscriptionList.Where(s => s.Name.Equals(subscriptionName, StringComparison.OrdinalIgnoreCase));
428+
return subscriptionList.Any();
429+
}
430+
424431
private IAzureSubscription GetFirstSubscription(string tenantId)
425432
{
426433
IEnumerable<IAzureSubscription> subscriptionList = ListSubscriptions(tenantId);

src/Accounts/Accounts/Subscription/GetAzureRMSubscription.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using Microsoft.Azure.Commands.Profile.Properties;
2020
using Microsoft.Azure.Commands.ResourceManager.Common;
2121
using System;
22+
using System.Collections.Generic;
2223
using System.Diagnostics;
2324
using System.Linq;
2425
using System.Management.Automation;
@@ -66,15 +67,15 @@ public override void ExecuteCmdlet()
6667
{
6768
if (!string.IsNullOrWhiteSpace(this.SubscriptionName))
6869
{
69-
IAzureSubscription result;
70+
IEnumerable<IAzureSubscription> result;
7071
try
7172
{
72-
if (!this._client.TryGetSubscriptionByName(TenantId, this.SubscriptionName, out result))
73+
if (!this._client.TryGetSubscriptionListByName(TenantId, this.SubscriptionName, out result))
7374
{
7475
ThrowSubscriptionNotFoundError(this.TenantId, this.SubscriptionName);
7576
}
7677

77-
WriteObject(new PSAzureSubscription(result));
78+
WriteObject(result.Select((s) => new PSAzureSubscription(s)), enumerateCollection: true);
7879
}
7980
catch (AadAuthenticationException exception)
8081
{

0 commit comments

Comments
 (0)