public void GetProviderFeatureTests()
{
// setup return values
const string Provider1Namespace = "Providers.Test1";
const string Feature1Name = "feature1";
const string Provider2Namespace = "Providers.Test2";
const string Feature2Name = "feature2";
var provider1RegisteredFeature = new FeatureResult
{
Id = "featureId1",
Name = Provider1Namespace + "/" + Feature1Name,
Properties = new FeatureProperties
{
State = ProviderFeatureClient.RegisteredStateName,
},
Type = "Microsoft.Features/feature"
};
var provider1UnregisteredFeature = new FeatureResult
{
Id = "featureId1",
Name = Provider1Namespace + "/" + Feature2Name,
Properties = new FeatureProperties
{
State = "Unregistered",
},
Type = "Microsoft.Features/feature"
};
var provider2UnregisteredFeature = new FeatureResult
{
Id = "featureId2",
Name = Provider2Namespace + "/" + Feature1Name,
Properties = new FeatureProperties
{
State = "Unregistered",
},
Type = "Microsoft.Features/feature"
};
var pagableResult = new Page<FeatureResult>();
//var listResult = new[] { provider1RegisteredFeature, provider1UnregisteredFeature, provider2UnregisteredFeature };
var listResult = new List<FeatureResult>() { provider1RegisteredFeature, provider1UnregisteredFeature, provider2UnregisteredFeature };
pagableResult.SetItemValue<FeatureResult>(listResult);
var result = new AzureOperationResponse<IPage<FeatureResult>>()
{
Body = pagableResult
};
this.featureOperationsMock
.Setup(f => f.ListAllWithHttpMessagesAsync(null, It.IsAny<CancellationToken>()))
.Returns(() => Task.FromResult(result));
// 1. List only registered features of providers
this.commandRuntimeMock
.Setup(m => m.WriteObject(It.IsAny<object>()))
.Callback((object obj) =>
{
Assert.IsType<PSProviderFeature[]>(obj);
var features = (PSProviderFeature[])obj;
Assert.Equal(1, features.Length);
var provider = features.Single();
Assert.Equal(Provider1Namespace, provider.ProviderName, StringComparer.OrdinalIgnoreCase);
Assert.Equal(Feature1Name, provider.FeatureName, StringComparer.OrdinalIgnoreCase);
Assert.Equal(ProviderFeatureClient.RegisteredStateName, provider.RegistrationState, StringComparer.OrdinalIgnoreCase);
});
this.cmdlet.ParameterSetOverride = GetAzureProviderFeatureCmdlet.ListAvailableParameterSet;
this.cmdlet.ExecuteCmdlet();
this.VerifyListAllCallPatternAndReset();
// 2. List all features of all providers
this.cmdlet.ListAvailable = true;
this.commandRuntimeMock
.Setup(m => m.WriteObject(It.IsAny<object>()))
.Callback((object obj) =>
{
Assert.IsType<PSProviderFeature[]>(obj);
var features = (PSProviderFeature[])obj;
Assert.Equal(listResult.Count(), features.Length);
});
this.cmdlet.ExecuteCmdlet();
this.VerifyListAllCallPatternAndReset();
// 3.a. List only registered features of a particular provider - and they exist
string providerOfChoice = Provider1Namespace;
this.cmdlet.ListAvailable = false;
this.cmdlet.ProviderNamespace = providerOfChoice;
//pagableResult.SetItemValue<FeatureResult>(new List<FeatureResult>() { provider1RegisteredFeature, provider1UnregisteredFeature });
this.featureOperationsMock
.Setup(f => f.ListWithHttpMessagesAsync(It.IsAny<string>(), null, It.IsAny<CancellationToken>()))
.Callback((string providerName, Dictionary<string, List<string>> customHeaders, CancellationToken ignored) => Assert.Equal(providerOfChoice, providerName, StringComparer.OrdinalIgnoreCase))
.Returns(() => Task.FromResult(
new AzureOperationResponse<IPage<FeatureResult>>()
{
Body = pagableResult
}));
this.commandRuntimeMock
.Setup(m => m.WriteObject(It.IsAny<object>()))
.Callback((object obj) =>
{
Assert.IsType<PSProviderFeature[]>(obj);
var features = (PSProviderFeature[])obj;
Assert.Equal(1, features.Length);
var provider = features.Single();
Assert.Equal(Provider1Namespace, provider.ProviderName, StringComparer.OrdinalIgnoreCase);
Assert.Equal(Feature1Name, provider.FeatureName, StringComparer.OrdinalIgnoreCase);
Assert.Equal(ProviderFeatureClient.RegisteredStateName, provider.RegistrationState, StringComparer.OrdinalIgnoreCase);
});
this.cmdlet.ParameterSetOverride = GetAzureProviderFeatureCmdlet.GetFeatureParameterSet;
this.cmdlet.ExecuteCmdlet();
this.VerifyListProviderFeaturesCallPatternAndReset();
// 3.b. List only registered features of a particular provider - and they do not exist
providerOfChoice = Provider2Namespace;
this.cmdlet.ListAvailable = false;
this.cmdlet.ProviderNamespace = providerOfChoice;
//pagableResult.SetItemValue<FeatureResult>(new List<FeatureResult>() { provider2UnregisteredFeature });
this.commandRuntimeMock
.Setup(m => m.WriteObject(It.IsAny<object>()))
.Callback((object obj) =>
{
Assert.IsType<PSProviderFeature[]>(obj);
var features = (PSProviderFeature[])obj;
Assert.Equal(0, features.Length);
});
this.cmdlet.ExecuteCmdlet();
this.VerifyListProviderFeaturesCallPatternAndReset();
// 4. List all features of a particular provider
providerOfChoice = Provider1Namespace;
this.cmdlet.ProviderNamespace = providerOfChoice;
this.cmdlet.ListAvailable = true;
//pagableResult.SetItemValue<FeatureResult>(new List<FeatureResult>() { provider1RegisteredFeature, provider1UnregisteredFeature });
this.commandRuntimeMock
.Setup(m => m.WriteObject(It.IsAny<object>()))
.Callback((object obj) =>
{
Assert.IsType<PSProviderFeature[]>(obj);
var features = (PSProviderFeature[])obj;
Assert.Equal(2, features.Length);
Assert.True(features.Any(feature => string.Equals(feature.FeatureName, Feature1Name, StringComparison.OrdinalIgnoreCase)));
Assert.True(features.Any(feature => string.Equals(feature.FeatureName, Feature2Name, StringComparison.OrdinalIgnoreCase)));
Assert.True(features.All(feature => string.Equals(feature.ProviderName, Provider1Namespace, StringComparison.OrdinalIgnoreCase)));
});
this.cmdlet.ParameterSetOverride = GetAzureProviderFeatureCmdlet.ListAvailableParameterSet;
this.cmdlet.ExecuteCmdlet();
this.VerifyListProviderFeaturesCallPatternAndReset();
// 5. get a single provider feature by name
this.cmdlet.ProviderNamespace = Provider2Namespace;
this.cmdlet.FeatureName = Feature1Name;
this.cmdlet.ListAvailable = false;
this.featureOperationsMock
.Setup(f => f.GetWithHttpMessagesAsync(It.IsAny<string>(), It.IsAny<string>(), null, It.IsAny<CancellationToken>()))
.Callback((string providerName, string featureName, Dictionary<string, List<string>> customHeaders, CancellationToken ignored) =>
{
Assert.Equal(Provider2Namespace, providerName, StringComparer.OrdinalIgnoreCase);
Assert.Equal(Feature1Name, featureName, StringComparer.OrdinalIgnoreCase);
})
.Returns(() => Task.FromResult(new AzureOperationResponse<FeatureResult>()
{
Body = provider2UnregisteredFeature
}));
this.commandRuntimeMock
.Setup(m => m.WriteObject(It.IsAny<object>()))
.Callback((object obj) =>
{
Assert.IsType<PSProviderFeature[]>(obj);
var features = (PSProviderFeature[])obj;
Assert.Equal(1, features.Length);
var feature = features.Single();
Assert.Equal(Provider2Namespace, feature.ProviderName, StringComparer.OrdinalIgnoreCase);
Assert.Equal(Feature1Name, feature.FeatureName, StringComparer.OrdinalIgnoreCase);
Assert.Equal("Unregistered", feature.RegistrationState, StringComparer.OrdinalIgnoreCase);
});
this.cmdlet.ParameterSetOverride = GetAzureProviderFeatureCmdlet.GetFeatureParameterSet;
this.cmdlet.ExecuteCmdlet();
this.VerifyGetCallPatternAndReset();
}