diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cdac14e2..48fe03bc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -64,7 +64,7 @@ dotnet test test/OpenFeature.Tests/ To be able to run the e2e tests, first we need to initialize the submodule and copy the test files: ```bash -git submodule update --init --recursive && cp test-harness/features/evaluation.feature test/OpenFeature.E2ETests/Features/ +git submodule update --init --recursive && cp spec/specification/assets/gherkin/evaluation.feature test/OpenFeature.E2ETests/Features/ ``` Now you can run the tests using: diff --git a/Directory.Packages.props b/Directory.Packages.props index 92a172f0..adcf05a6 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -21,7 +21,6 @@ - diff --git a/test/OpenFeature.DependencyInjection.Tests/FeatureLifecycleManagerTests.cs b/test/OpenFeature.DependencyInjection.Tests/FeatureLifecycleManagerTests.cs index b0176bc4..c5573604 100644 --- a/test/OpenFeature.DependencyInjection.Tests/FeatureLifecycleManagerTests.cs +++ b/test/OpenFeature.DependencyInjection.Tests/FeatureLifecycleManagerTests.cs @@ -1,4 +1,3 @@ -using FluentAssertions; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -44,7 +43,7 @@ public async Task EnsureInitializedAsync_ShouldLogAndSetProvider_WhenProviderExi await _systemUnderTest.EnsureInitializedAsync().ConfigureAwait(true); // Assert - Api.Instance.GetProvider().Should().BeSameAs(featureProvider); + Assert.Equal(featureProvider, Api.Instance.GetProvider()); } [Fact] @@ -58,7 +57,7 @@ public async Task EnsureInitializedAsync_ShouldThrowException_WhenProviderDoesNo // Assert var exception = await Assert.ThrowsAsync(act).ConfigureAwait(true); - exception.Should().NotBeNull(); - exception.Message.Should().NotBeNullOrWhiteSpace(); + Assert.NotNull(exception); + Assert.False(string.IsNullOrWhiteSpace(exception.Message)); } } diff --git a/test/OpenFeature.DependencyInjection.Tests/OpenFeature.DependencyInjection.Tests.csproj b/test/OpenFeature.DependencyInjection.Tests/OpenFeature.DependencyInjection.Tests.csproj index e4c16ee5..4d714afe 100644 --- a/test/OpenFeature.DependencyInjection.Tests/OpenFeature.DependencyInjection.Tests.csproj +++ b/test/OpenFeature.DependencyInjection.Tests/OpenFeature.DependencyInjection.Tests.csproj @@ -20,7 +20,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/test/OpenFeature.DependencyInjection.Tests/OpenFeatureBuilderExtensionsTests.cs b/test/OpenFeature.DependencyInjection.Tests/OpenFeatureBuilderExtensionsTests.cs index 087336a0..6985125d 100644 --- a/test/OpenFeature.DependencyInjection.Tests/OpenFeatureBuilderExtensionsTests.cs +++ b/test/OpenFeature.DependencyInjection.Tests/OpenFeatureBuilderExtensionsTests.cs @@ -1,4 +1,3 @@ -using FluentAssertions; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using OpenFeature.Model; @@ -28,12 +27,11 @@ public void AddContext_Delegate_ShouldAddServiceToCollection(bool useServiceProv _systemUnderTest.AddContext((_, _) => { }); // Assert - featureBuilder.Should().BeSameAs(_systemUnderTest, "The method should return the same builder instance."); - _systemUnderTest.IsContextConfigured.Should().BeTrue("The context should be configured."); - _services.Should().ContainSingle(serviceDescriptor => + Assert.Equal(_systemUnderTest, featureBuilder); + Assert.True(_systemUnderTest.IsContextConfigured, "The context should be configured."); + Assert.Single(_services, serviceDescriptor => serviceDescriptor.ServiceType == typeof(EvaluationContext) && - serviceDescriptor.Lifetime == ServiceLifetime.Transient, - "A transient service of type EvaluationContext should be added."); + serviceDescriptor.Lifetime == ServiceLifetime.Transient); } [Theory] @@ -54,9 +52,9 @@ public void AddContext_Delegate_ShouldCorrectlyHandles(bool useServiceProviderDe var context = serviceProvider.GetService(); // Assert - _systemUnderTest.IsContextConfigured.Should().BeTrue("The context should be configured."); - context.Should().NotBeNull("The EvaluationContext should be resolvable."); - delegateCalled.Should().BeTrue("The delegate should be invoked."); + Assert.True(_systemUnderTest.IsContextConfigured, "The context should be configured."); + Assert.NotNull(context); + Assert.True(delegateCalled, "The delegate should be invoked."); } #if NET8_0_OR_GREATER @@ -80,15 +78,14 @@ public void AddProvider_ShouldAddProviderToCollection(int providerRegistrationTy }; // Assert - _systemUnderTest.IsContextConfigured.Should().BeFalse("The context should not be configured."); - _systemUnderTest.HasDefaultProvider.Should().Be(expectsDefaultProvider, "The default provider flag should be set correctly."); - _systemUnderTest.IsPolicyConfigured.Should().BeFalse("The policy should not be configured."); - _systemUnderTest.DomainBoundProviderRegistrationCount.Should().Be(expectsDomainBoundProvider, "The domain-bound provider count should be correct."); - featureBuilder.Should().BeSameAs(_systemUnderTest, "The method should return the same builder instance."); - _services.Should().ContainSingle(serviceDescriptor => + Assert.False(_systemUnderTest.IsContextConfigured, "The context should not be configured."); + Assert.Equal(expectsDefaultProvider, _systemUnderTest.HasDefaultProvider); + Assert.False(_systemUnderTest.IsPolicyConfigured, "The policy should not be configured."); + Assert.Equal(expectsDomainBoundProvider, _systemUnderTest.DomainBoundProviderRegistrationCount); + Assert.Equal(_systemUnderTest, featureBuilder); + Assert.Single(_services, serviceDescriptor => serviceDescriptor.ServiceType == typeof(FeatureProvider) && - serviceDescriptor.Lifetime == ServiceLifetime.Transient, - "A singleton service of type FeatureProvider should be added."); + serviceDescriptor.Lifetime == ServiceLifetime.Transient); } class TestOptions : OpenFeatureOptions { } @@ -124,8 +121,8 @@ public void AddProvider_ShouldResolveCorrectProvider(int providerRegistrationTyp }; // Assert - provider.Should().NotBeNull("The FeatureProvider should be resolvable."); - provider.Should().BeOfType("The resolved provider should be of type DefaultFeatureProvider."); + Assert.NotNull(provider); + Assert.IsType(provider); } [Theory] @@ -172,11 +169,11 @@ public void AddProvider_VerifiesDefaultAndDomainBoundProvidersBasedOnConfigurati }; // Assert - _systemUnderTest.IsContextConfigured.Should().BeFalse("The context should not be configured."); - _systemUnderTest.HasDefaultProvider.Should().Be(expectsDefaultProvider, "The default provider flag should be set correctly."); - _systemUnderTest.IsPolicyConfigured.Should().BeFalse("The policy should not be configured."); - _systemUnderTest.DomainBoundProviderRegistrationCount.Should().Be(expectsDomainBoundProvider, "The domain-bound provider count should be correct."); - featureBuilder.Should().BeSameAs(_systemUnderTest, "The method should return the same builder instance."); + Assert.False(_systemUnderTest.IsContextConfigured, "The context should not be configured."); + Assert.Equal(expectsDefaultProvider, _systemUnderTest.HasDefaultProvider); + Assert.False(_systemUnderTest.IsPolicyConfigured, "The policy should not be configured."); + Assert.Equal(expectsDomainBoundProvider, _systemUnderTest.DomainBoundProviderRegistrationCount); + Assert.Equal(_systemUnderTest, featureBuilder); } [Theory] @@ -240,8 +237,8 @@ public void AddProvider_ConfiguresPolicyNameAcrossMultipleProviderSetups(int pro serviceProvider.GetRequiredKeyedService(name); // Assert - featureBuilder.IsPolicyConfigured.Should().BeTrue("The policy should be configured."); - provider.Should().NotBeNull("The FeatureProvider should be resolvable."); - provider.Should().BeOfType("The resolved provider should be of type DefaultFeatureProvider."); + Assert.True(featureBuilder.IsPolicyConfigured, "The policy should be configured."); + Assert.NotNull(provider); + Assert.IsType(provider); } } diff --git a/test/OpenFeature.DependencyInjection.Tests/OpenFeatureServiceCollectionExtensionsTests.cs b/test/OpenFeature.DependencyInjection.Tests/OpenFeatureServiceCollectionExtensionsTests.cs index 40e761d2..d3ce5c8e 100644 --- a/test/OpenFeature.DependencyInjection.Tests/OpenFeatureServiceCollectionExtensionsTests.cs +++ b/test/OpenFeature.DependencyInjection.Tests/OpenFeatureServiceCollectionExtensionsTests.cs @@ -1,4 +1,3 @@ -using FluentAssertions; using Microsoft.Extensions.DependencyInjection; using NSubstitute; using Xunit; @@ -22,9 +21,9 @@ public void AddOpenFeature_ShouldRegisterApiInstanceAndLifecycleManagerAsSinglet // Act _systemUnderTest.AddOpenFeature(_configureAction); - _systemUnderTest.Should().ContainSingle(s => s.ServiceType == typeof(Api) && s.Lifetime == ServiceLifetime.Singleton); - _systemUnderTest.Should().ContainSingle(s => s.ServiceType == typeof(IFeatureLifecycleManager) && s.Lifetime == ServiceLifetime.Singleton); - _systemUnderTest.Should().ContainSingle(s => s.ServiceType == typeof(IFeatureClient) && s.Lifetime == ServiceLifetime.Scoped); + Assert.Single(_systemUnderTest, s => s.ServiceType == typeof(Api) && s.Lifetime == ServiceLifetime.Singleton); + Assert.Single(_systemUnderTest, s => s.ServiceType == typeof(IFeatureLifecycleManager) && s.Lifetime == ServiceLifetime.Singleton); + Assert.Single(_systemUnderTest, s => s.ServiceType == typeof(IFeatureClient) && s.Lifetime == ServiceLifetime.Scoped); } [Fact] diff --git a/test/OpenFeature.E2ETests/OpenFeature.E2ETests.csproj b/test/OpenFeature.E2ETests/OpenFeature.E2ETests.csproj index 50cf1a6a..001a3a36 100644 --- a/test/OpenFeature.E2ETests/OpenFeature.E2ETests.csproj +++ b/test/OpenFeature.E2ETests/OpenFeature.E2ETests.csproj @@ -19,7 +19,6 @@ - diff --git a/test/OpenFeature.IntegrationTests/FeatureFlagIntegrationTest.cs b/test/OpenFeature.IntegrationTests/FeatureFlagIntegrationTest.cs index 559bf4bb..24561f1a 100644 --- a/test/OpenFeature.IntegrationTests/FeatureFlagIntegrationTest.cs +++ b/test/OpenFeature.IntegrationTests/FeatureFlagIntegrationTest.cs @@ -1,6 +1,5 @@ using System.Net.Http.Json; using System.Text.Json; -using FluentAssertions; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.TestHost; @@ -54,10 +53,10 @@ public async Task VerifyFeatureFlagBehaviorAcrossServiceLifetimesAsync(string us var responseContent = await response.Content.ReadFromJsonAsync>().ConfigureAwait(true); ; // Assert - response.IsSuccessStatusCode.Should().BeTrue("Expected HTTP status code 200 OK."); - responseContent.Should().NotBeNull("Expected response content to be non-null."); - responseContent!.FeatureName.Should().Be(FeatureA, "Expected feature name to be 'feature-a'."); - responseContent.FeatureValue.Should().Be(expectedResult, "Expected feature value to match the expected result."); + Assert.True(response.IsSuccessStatusCode, "Expected HTTP status code 200 OK."); + Assert.NotNull(responseContent); + Assert.Equal(FeatureA, responseContent!.FeatureName); + Assert.Equal(expectedResult, responseContent.FeatureValue); } private static async Task CreateServerAsync(Action? configureServices = null) diff --git a/test/OpenFeature.IntegrationTests/OpenFeature.IntegrationTests.csproj b/test/OpenFeature.IntegrationTests/OpenFeature.IntegrationTests.csproj index 13c2f21e..e95aa810 100644 --- a/test/OpenFeature.IntegrationTests/OpenFeature.IntegrationTests.csproj +++ b/test/OpenFeature.IntegrationTests/OpenFeature.IntegrationTests.csproj @@ -15,7 +15,6 @@ - diff --git a/test/OpenFeature.Tests/FeatureProviderExceptionTests.cs b/test/OpenFeature.Tests/FeatureProviderExceptionTests.cs index fe011711..1498056f 100644 --- a/test/OpenFeature.Tests/FeatureProviderExceptionTests.cs +++ b/test/OpenFeature.Tests/FeatureProviderExceptionTests.cs @@ -1,5 +1,4 @@ using System; -using FluentAssertions; using OpenFeature.Constant; using OpenFeature.Error; using OpenFeature.Extension; @@ -18,7 +17,8 @@ public class FeatureProviderExceptionTests public void FeatureProviderException_Should_Resolve_Description(ErrorType errorType, string errorDescription) { var ex = new FeatureProviderException(errorType); - ex.ErrorType.GetDescription().Should().Be(errorDescription); + + Assert.Equal(errorDescription, ex.ErrorType.GetDescription()); } [Theory] @@ -27,9 +27,10 @@ public void FeatureProviderException_Should_Resolve_Description(ErrorType errorT public void FeatureProviderException_Should_Allow_Custom_ErrorCode_Messages(ErrorType errorCode, string message) { var ex = new FeatureProviderException(errorCode, message, new ArgumentOutOfRangeException("flag")); - ex.ErrorType.Should().Be(errorCode); - ex.Message.Should().Be(message); - ex.InnerException.Should().BeOfType(); + + Assert.Equal(errorCode, ex.ErrorType); + Assert.Equal(message, ex.Message); + Assert.IsType(ex.InnerException); } private enum TestEnum diff --git a/test/OpenFeature.Tests/FeatureProviderTests.cs b/test/OpenFeature.Tests/FeatureProviderTests.cs index 53a67443..ce1de36b 100644 --- a/test/OpenFeature.Tests/FeatureProviderTests.cs +++ b/test/OpenFeature.Tests/FeatureProviderTests.cs @@ -1,7 +1,6 @@ using System.Diagnostics.CodeAnalysis; using System.Threading.Tasks; using AutoFixture; -using FluentAssertions; using NSubstitute; using OpenFeature.Constant; using OpenFeature.Model; @@ -19,7 +18,7 @@ public void Provider_Must_Have_Metadata() { var provider = new TestProvider(); - provider.GetMetadata().Name.Should().Be(TestProvider.DefaultName); + Assert.Equal(TestProvider.DefaultName, provider.GetMetadata().Name); } [Fact] @@ -44,28 +43,23 @@ public async Task Provider_Must_Resolve_Flag_Values() var boolResolutionDetails = new ResolutionDetails(flagName, defaultBoolValue, ErrorType.None, NoOpProvider.ReasonNoOp, NoOpProvider.Variant); - (await provider.ResolveBooleanValueAsync(flagName, defaultBoolValue)).Should() - .BeEquivalentTo(boolResolutionDetails); + Assert.Equivalent(boolResolutionDetails, await provider.ResolveBooleanValueAsync(flagName, defaultBoolValue)); var integerResolutionDetails = new ResolutionDetails(flagName, defaultIntegerValue, ErrorType.None, NoOpProvider.ReasonNoOp, NoOpProvider.Variant); - (await provider.ResolveIntegerValueAsync(flagName, defaultIntegerValue)).Should() - .BeEquivalentTo(integerResolutionDetails); + Assert.Equivalent(integerResolutionDetails, await provider.ResolveIntegerValueAsync(flagName, defaultIntegerValue)); var doubleResolutionDetails = new ResolutionDetails(flagName, defaultDoubleValue, ErrorType.None, NoOpProvider.ReasonNoOp, NoOpProvider.Variant); - (await provider.ResolveDoubleValueAsync(flagName, defaultDoubleValue)).Should() - .BeEquivalentTo(doubleResolutionDetails); + Assert.Equivalent(doubleResolutionDetails, await provider.ResolveDoubleValueAsync(flagName, defaultDoubleValue)); var stringResolutionDetails = new ResolutionDetails(flagName, defaultStringValue, ErrorType.None, NoOpProvider.ReasonNoOp, NoOpProvider.Variant); - (await provider.ResolveStringValueAsync(flagName, defaultStringValue)).Should() - .BeEquivalentTo(stringResolutionDetails); + Assert.Equivalent(stringResolutionDetails, await provider.ResolveStringValueAsync(flagName, defaultStringValue)); var structureResolutionDetails = new ResolutionDetails(flagName, defaultStructureValue, ErrorType.None, NoOpProvider.ReasonNoOp, NoOpProvider.Variant); - (await provider.ResolveStructureValueAsync(flagName, defaultStructureValue)).Should() - .BeEquivalentTo(structureResolutionDetails); + Assert.Equivalent(structureResolutionDetails, await provider.ResolveStructureValueAsync(flagName, defaultStructureValue)); } [Fact] @@ -113,32 +107,32 @@ public async Task Provider_Must_ErrorType() NoOpProvider.ReasonNoOp, NoOpProvider.Variant)); var boolRes = await providerMock.ResolveBooleanValueAsync(flagName, defaultBoolValue); - boolRes.ErrorType.Should().Be(ErrorType.General); - boolRes.ErrorMessage.Should().Be(testMessage); + Assert.Equal(ErrorType.General, boolRes.ErrorType); + Assert.Equal(testMessage, boolRes.ErrorMessage); var intRes = await providerMock.ResolveIntegerValueAsync(flagName, defaultIntegerValue); - intRes.ErrorType.Should().Be(ErrorType.ParseError); - intRes.ErrorMessage.Should().Be(testMessage); + Assert.Equal(ErrorType.ParseError, intRes.ErrorType); + Assert.Equal(testMessage, intRes.ErrorMessage); var doubleRes = await providerMock.ResolveDoubleValueAsync(flagName, defaultDoubleValue); - doubleRes.ErrorType.Should().Be(ErrorType.InvalidContext); - doubleRes.ErrorMessage.Should().Be(testMessage); + Assert.Equal(ErrorType.InvalidContext, doubleRes.ErrorType); + Assert.Equal(testMessage, doubleRes.ErrorMessage); var stringRes = await providerMock.ResolveStringValueAsync(flagName, defaultStringValue); - stringRes.ErrorType.Should().Be(ErrorType.TypeMismatch); - stringRes.ErrorMessage.Should().Be(testMessage); + Assert.Equal(ErrorType.TypeMismatch, stringRes.ErrorType); + Assert.Equal(testMessage, stringRes.ErrorMessage); var structRes1 = await providerMock.ResolveStructureValueAsync(flagName, defaultStructureValue); - structRes1.ErrorType.Should().Be(ErrorType.FlagNotFound); - structRes1.ErrorMessage.Should().Be(testMessage); + Assert.Equal(ErrorType.FlagNotFound, structRes1.ErrorType); + Assert.Equal(testMessage, structRes1.ErrorMessage); var structRes2 = await providerMock.ResolveStructureValueAsync(flagName2, defaultStructureValue); - structRes2.ErrorType.Should().Be(ErrorType.ProviderNotReady); - structRes2.ErrorMessage.Should().Be(testMessage); + Assert.Equal(ErrorType.ProviderNotReady, structRes2.ErrorType); + Assert.Equal(testMessage, structRes2.ErrorMessage); var boolRes2 = await providerMock.ResolveBooleanValueAsync(flagName2, defaultBoolValue); - boolRes2.ErrorType.Should().Be(ErrorType.TargetingKeyMissing); - boolRes2.ErrorMessage.Should().BeNull(); + Assert.Equal(ErrorType.TargetingKeyMissing, boolRes2.ErrorType); + Assert.Null(boolRes2.ErrorMessage); } } } diff --git a/test/OpenFeature.Tests/OpenFeature.Tests.csproj b/test/OpenFeature.Tests/OpenFeature.Tests.csproj index 270b6a50..a556655a 100644 --- a/test/OpenFeature.Tests/OpenFeature.Tests.csproj +++ b/test/OpenFeature.Tests/OpenFeature.Tests.csproj @@ -16,7 +16,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/test/OpenFeature.Tests/OpenFeatureClientTests.cs b/test/OpenFeature.Tests/OpenFeatureClientTests.cs index 1cab2d76..c16824cb 100644 --- a/test/OpenFeature.Tests/OpenFeatureClientTests.cs +++ b/test/OpenFeature.Tests/OpenFeatureClientTests.cs @@ -6,7 +6,6 @@ using System.Threading; using System.Threading.Tasks; using AutoFixture; -using FluentAssertions; using Microsoft.Extensions.Logging; using NSubstitute; using NSubstitute.ExceptionExtensions; @@ -37,12 +36,13 @@ public void OpenFeatureClient_Should_Allow_Hooks() client.AddHooks(new[] { hook1, hook2 }); - client.GetHooks().Should().ContainInOrder(hook1, hook2); - client.GetHooks().Count().Should().Be(2); + var expectedHooks = new[] { hook1, hook2 }.AsEnumerable(); + Assert.Equal(expectedHooks, client.GetHooks()); client.AddHooks(hook3); - client.GetHooks().Should().ContainInOrder(hook1, hook2, hook3); - client.GetHooks().Count().Should().Be(3); + + expectedHooks = new[] { hook1, hook2, hook3 }.AsEnumerable(); + Assert.Equal(expectedHooks, client.GetHooks()); client.ClearHooks(); Assert.Empty(client.GetHooks()); @@ -57,8 +57,8 @@ public void OpenFeatureClient_Metadata_Should_Have_Name() var clientVersion = fixture.Create(); var client = Api.Instance.GetClient(domain, clientVersion); - client.GetMetadata().Name.Should().Be(domain); - client.GetMetadata().Version.Should().Be(clientVersion); + Assert.Equal(domain, client.GetMetadata().Name); + Assert.Equal(clientVersion, client.GetMetadata().Version); } [Fact] @@ -81,25 +81,25 @@ public async Task OpenFeatureClient_Should_Allow_Flag_Evaluation() await Api.Instance.SetProviderAsync(new NoOpFeatureProvider()); var client = Api.Instance.GetClient(domain, clientVersion); - (await client.GetBooleanValueAsync(flagName, defaultBoolValue)).Should().Be(defaultBoolValue); - (await client.GetBooleanValueAsync(flagName, defaultBoolValue, EvaluationContext.Empty)).Should().Be(defaultBoolValue); - (await client.GetBooleanValueAsync(flagName, defaultBoolValue, EvaluationContext.Empty, emptyFlagOptions)).Should().Be(defaultBoolValue); + Assert.Equal(defaultBoolValue, await client.GetBooleanValueAsync(flagName, defaultBoolValue)); + Assert.Equal(defaultBoolValue, await client.GetBooleanValueAsync(flagName, defaultBoolValue, EvaluationContext.Empty)); + Assert.Equal(defaultBoolValue, await client.GetBooleanValueAsync(flagName, defaultBoolValue, EvaluationContext.Empty, emptyFlagOptions)); - (await client.GetIntegerValueAsync(flagName, defaultIntegerValue)).Should().Be(defaultIntegerValue); - (await client.GetIntegerValueAsync(flagName, defaultIntegerValue, EvaluationContext.Empty)).Should().Be(defaultIntegerValue); - (await client.GetIntegerValueAsync(flagName, defaultIntegerValue, EvaluationContext.Empty, emptyFlagOptions)).Should().Be(defaultIntegerValue); + Assert.Equal(defaultIntegerValue, await client.GetIntegerValueAsync(flagName, defaultIntegerValue)); + Assert.Equal(defaultIntegerValue, await client.GetIntegerValueAsync(flagName, defaultIntegerValue, EvaluationContext.Empty)); + Assert.Equal(defaultIntegerValue, await client.GetIntegerValueAsync(flagName, defaultIntegerValue, EvaluationContext.Empty, emptyFlagOptions)); - (await client.GetDoubleValueAsync(flagName, defaultDoubleValue)).Should().Be(defaultDoubleValue); - (await client.GetDoubleValueAsync(flagName, defaultDoubleValue, EvaluationContext.Empty)).Should().Be(defaultDoubleValue); - (await client.GetDoubleValueAsync(flagName, defaultDoubleValue, EvaluationContext.Empty, emptyFlagOptions)).Should().Be(defaultDoubleValue); + Assert.Equal(defaultDoubleValue, await client.GetDoubleValueAsync(flagName, defaultDoubleValue)); + Assert.Equal(defaultDoubleValue, await client.GetDoubleValueAsync(flagName, defaultDoubleValue, EvaluationContext.Empty)); + Assert.Equal(defaultDoubleValue, await client.GetDoubleValueAsync(flagName, defaultDoubleValue, EvaluationContext.Empty, emptyFlagOptions)); - (await client.GetStringValueAsync(flagName, defaultStringValue)).Should().Be(defaultStringValue); - (await client.GetStringValueAsync(flagName, defaultStringValue, EvaluationContext.Empty)).Should().Be(defaultStringValue); - (await client.GetStringValueAsync(flagName, defaultStringValue, EvaluationContext.Empty, emptyFlagOptions)).Should().Be(defaultStringValue); + Assert.Equal(defaultStringValue, await client.GetStringValueAsync(flagName, defaultStringValue)); + Assert.Equal(defaultStringValue, await client.GetStringValueAsync(flagName, defaultStringValue, EvaluationContext.Empty)); + Assert.Equal(defaultStringValue, await client.GetStringValueAsync(flagName, defaultStringValue, EvaluationContext.Empty, emptyFlagOptions)); - (await client.GetObjectValueAsync(flagName, defaultStructureValue)).Should().BeEquivalentTo(defaultStructureValue); - (await client.GetObjectValueAsync(flagName, defaultStructureValue, EvaluationContext.Empty)).Should().BeEquivalentTo(defaultStructureValue); - (await client.GetObjectValueAsync(flagName, defaultStructureValue, EvaluationContext.Empty, emptyFlagOptions)).Should().BeEquivalentTo(defaultStructureValue); + Assert.Equivalent(defaultStructureValue, await client.GetObjectValueAsync(flagName, defaultStructureValue)); + Assert.Equivalent(defaultStructureValue, await client.GetObjectValueAsync(flagName, defaultStructureValue, EvaluationContext.Empty)); + Assert.Equivalent(defaultStructureValue, await client.GetObjectValueAsync(flagName, defaultStructureValue, EvaluationContext.Empty, emptyFlagOptions)); } [Fact] @@ -128,29 +128,29 @@ public async Task OpenFeatureClient_Should_Allow_Details_Flag_Evaluation() var client = Api.Instance.GetClient(domain, clientVersion); var boolFlagEvaluationDetails = new FlagEvaluationDetails(flagName, defaultBoolValue, ErrorType.None, NoOpProvider.ReasonNoOp, NoOpProvider.Variant); - (await client.GetBooleanDetailsAsync(flagName, defaultBoolValue)).Should().BeEquivalentTo(boolFlagEvaluationDetails); - (await client.GetBooleanDetailsAsync(flagName, defaultBoolValue, EvaluationContext.Empty)).Should().BeEquivalentTo(boolFlagEvaluationDetails); - (await client.GetBooleanDetailsAsync(flagName, defaultBoolValue, EvaluationContext.Empty, emptyFlagOptions)).Should().BeEquivalentTo(boolFlagEvaluationDetails); + Assert.Equivalent(boolFlagEvaluationDetails, await client.GetBooleanDetailsAsync(flagName, defaultBoolValue)); + Assert.Equivalent(boolFlagEvaluationDetails, await client.GetBooleanDetailsAsync(flagName, defaultBoolValue, EvaluationContext.Empty)); + Assert.Equivalent(boolFlagEvaluationDetails, await client.GetBooleanDetailsAsync(flagName, defaultBoolValue, EvaluationContext.Empty, emptyFlagOptions)); var integerFlagEvaluationDetails = new FlagEvaluationDetails(flagName, defaultIntegerValue, ErrorType.None, NoOpProvider.ReasonNoOp, NoOpProvider.Variant); - (await client.GetIntegerDetailsAsync(flagName, defaultIntegerValue)).Should().BeEquivalentTo(integerFlagEvaluationDetails); - (await client.GetIntegerDetailsAsync(flagName, defaultIntegerValue, EvaluationContext.Empty)).Should().BeEquivalentTo(integerFlagEvaluationDetails); - (await client.GetIntegerDetailsAsync(flagName, defaultIntegerValue, EvaluationContext.Empty, emptyFlagOptions)).Should().BeEquivalentTo(integerFlagEvaluationDetails); + Assert.Equivalent(integerFlagEvaluationDetails, await client.GetIntegerDetailsAsync(flagName, defaultIntegerValue)); + Assert.Equivalent(integerFlagEvaluationDetails, await client.GetIntegerDetailsAsync(flagName, defaultIntegerValue, EvaluationContext.Empty)); + Assert.Equivalent(integerFlagEvaluationDetails, await client.GetIntegerDetailsAsync(flagName, defaultIntegerValue, EvaluationContext.Empty, emptyFlagOptions)); var doubleFlagEvaluationDetails = new FlagEvaluationDetails(flagName, defaultDoubleValue, ErrorType.None, NoOpProvider.ReasonNoOp, NoOpProvider.Variant); - (await client.GetDoubleDetailsAsync(flagName, defaultDoubleValue)).Should().BeEquivalentTo(doubleFlagEvaluationDetails); - (await client.GetDoubleDetailsAsync(flagName, defaultDoubleValue, EvaluationContext.Empty)).Should().BeEquivalentTo(doubleFlagEvaluationDetails); - (await client.GetDoubleDetailsAsync(flagName, defaultDoubleValue, EvaluationContext.Empty, emptyFlagOptions)).Should().BeEquivalentTo(doubleFlagEvaluationDetails); + Assert.Equivalent(doubleFlagEvaluationDetails, await client.GetDoubleDetailsAsync(flagName, defaultDoubleValue)); + Assert.Equivalent(doubleFlagEvaluationDetails, await client.GetDoubleDetailsAsync(flagName, defaultDoubleValue, EvaluationContext.Empty)); + Assert.Equivalent(doubleFlagEvaluationDetails, await client.GetDoubleDetailsAsync(flagName, defaultDoubleValue, EvaluationContext.Empty, emptyFlagOptions)); var stringFlagEvaluationDetails = new FlagEvaluationDetails(flagName, defaultStringValue, ErrorType.None, NoOpProvider.ReasonNoOp, NoOpProvider.Variant); - (await client.GetStringDetailsAsync(flagName, defaultStringValue)).Should().BeEquivalentTo(stringFlagEvaluationDetails); - (await client.GetStringDetailsAsync(flagName, defaultStringValue, EvaluationContext.Empty)).Should().BeEquivalentTo(stringFlagEvaluationDetails); - (await client.GetStringDetailsAsync(flagName, defaultStringValue, EvaluationContext.Empty, emptyFlagOptions)).Should().BeEquivalentTo(stringFlagEvaluationDetails); + Assert.Equivalent(stringFlagEvaluationDetails, await client.GetStringDetailsAsync(flagName, defaultStringValue)); + Assert.Equivalent(stringFlagEvaluationDetails, await client.GetStringDetailsAsync(flagName, defaultStringValue, EvaluationContext.Empty)); + Assert.Equivalent(stringFlagEvaluationDetails, await client.GetStringDetailsAsync(flagName, defaultStringValue, EvaluationContext.Empty, emptyFlagOptions)); var structureFlagEvaluationDetails = new FlagEvaluationDetails(flagName, defaultStructureValue, ErrorType.None, NoOpProvider.ReasonNoOp, NoOpProvider.Variant); - (await client.GetObjectDetailsAsync(flagName, defaultStructureValue)).Should().BeEquivalentTo(structureFlagEvaluationDetails); - (await client.GetObjectDetailsAsync(flagName, defaultStructureValue, EvaluationContext.Empty)).Should().BeEquivalentTo(structureFlagEvaluationDetails); - (await client.GetObjectDetailsAsync(flagName, defaultStructureValue, EvaluationContext.Empty, emptyFlagOptions)).Should().BeEquivalentTo(structureFlagEvaluationDetails); + Assert.Equivalent(structureFlagEvaluationDetails, await client.GetObjectDetailsAsync(flagName, defaultStructureValue)); + Assert.Equivalent(structureFlagEvaluationDetails, await client.GetObjectDetailsAsync(flagName, defaultStructureValue, EvaluationContext.Empty)); + Assert.Equivalent(structureFlagEvaluationDetails, await client.GetObjectDetailsAsync(flagName, defaultStructureValue, EvaluationContext.Empty, emptyFlagOptions)); } [Fact] @@ -179,8 +179,8 @@ public async Task OpenFeatureClient_Should_Return_DefaultValue_When_Type_Mismatc var client = Api.Instance.GetClient(domain, clientVersion, mockedLogger); var evaluationDetails = await client.GetObjectDetailsAsync(flagName, defaultValue); - evaluationDetails.ErrorType.Should().Be(ErrorType.TypeMismatch); - evaluationDetails.ErrorMessage.Should().Be(new InvalidCastException().Message); + Assert.Equal(ErrorType.TypeMismatch, evaluationDetails.ErrorType); + Assert.Equal(new InvalidCastException().Message, evaluationDetails.ErrorMessage); _ = mockedFeatureProvider.Received(1).ResolveStructureValueAsync(flagName, defaultValue, Arg.Any()); @@ -290,7 +290,7 @@ public async Task Should_Resolve_BooleanValue() await Api.Instance.SetProviderAsync(featureProviderMock); var client = Api.Instance.GetClient(domain, clientVersion); - (await client.GetBooleanValueAsync(flagName, defaultValue)).Should().Be(defaultValue); + Assert.Equal(defaultValue, await client.GetBooleanValueAsync(flagName, defaultValue)); _ = featureProviderMock.Received(1).ResolveBooleanValueAsync(flagName, defaultValue, Arg.Any()); } @@ -312,7 +312,7 @@ public async Task Should_Resolve_StringValue() await Api.Instance.SetProviderAsync(featureProviderMock); var client = Api.Instance.GetClient(domain, clientVersion); - (await client.GetStringValueAsync(flagName, defaultValue)).Should().Be(defaultValue); + Assert.Equal(defaultValue, await client.GetStringValueAsync(flagName, defaultValue)); _ = featureProviderMock.Received(1).ResolveStringValueAsync(flagName, defaultValue, Arg.Any()); } @@ -334,7 +334,7 @@ public async Task Should_Resolve_IntegerValue() await Api.Instance.SetProviderAsync(featureProviderMock); var client = Api.Instance.GetClient(domain, clientVersion); - (await client.GetIntegerValueAsync(flagName, defaultValue)).Should().Be(defaultValue); + Assert.Equal(defaultValue, await client.GetIntegerValueAsync(flagName, defaultValue)); _ = featureProviderMock.Received(1).ResolveIntegerValueAsync(flagName, defaultValue, Arg.Any()); } @@ -356,7 +356,7 @@ public async Task Should_Resolve_DoubleValue() await Api.Instance.SetProviderAsync(featureProviderMock); var client = Api.Instance.GetClient(domain, clientVersion); - (await client.GetDoubleValueAsync(flagName, defaultValue)).Should().Be(defaultValue); + Assert.Equal(defaultValue, await client.GetDoubleValueAsync(flagName, defaultValue)); _ = featureProviderMock.Received(1).ResolveDoubleValueAsync(flagName, defaultValue, Arg.Any()); } @@ -378,7 +378,7 @@ public async Task Should_Resolve_StructureValue() await Api.Instance.SetProviderAsync(featureProviderMock); var client = Api.Instance.GetClient(domain, clientVersion); - (await client.GetObjectValueAsync(flagName, defaultValue)).Should().Be(defaultValue); + Assert.Equal(defaultValue, await client.GetObjectValueAsync(flagName, defaultValue)); _ = featureProviderMock.Received(1).ResolveStructureValueAsync(flagName, defaultValue, Arg.Any()); } @@ -402,9 +402,9 @@ public async Task When_Error_Is_Returned_From_Provider_Should_Return_Error() var client = Api.Instance.GetClient(domain, clientVersion); var response = await client.GetObjectDetailsAsync(flagName, defaultValue); - response.ErrorType.Should().Be(ErrorType.ParseError); - response.Reason.Should().Be(Reason.Error); - response.ErrorMessage.Should().Be(testMessage); + Assert.Equal(ErrorType.ParseError, response.ErrorType); + Assert.Equal(Reason.Error, response.Reason); + Assert.Equal(testMessage, response.ErrorMessage); _ = featureProviderMock.Received(1).ResolveStructureValueAsync(flagName, defaultValue, Arg.Any()); } @@ -427,9 +427,9 @@ public async Task When_Exception_Occurs_During_Evaluation_Should_Return_Error() var client = Api.Instance.GetClient(domain, clientVersion); var response = await client.GetObjectDetailsAsync(flagName, defaultValue); - response.ErrorType.Should().Be(ErrorType.ParseError); - response.Reason.Should().Be(Reason.Error); - response.ErrorMessage.Should().Be(testMessage); + Assert.Equal(ErrorType.ParseError, response.ErrorType); + Assert.Equal(Reason.Error, response.Reason); + Assert.Equal(testMessage, response.ErrorMessage); _ = featureProviderMock.Received(1).ResolveStructureValueAsync(flagName, defaultValue, Arg.Any()); } @@ -456,9 +456,9 @@ public async Task When_Error_Is_Returned_From_Provider_Should_Not_Run_After_Hook client.AddHooks(testHook); var response = await client.GetObjectDetailsAsync(flagName, defaultValue); - response.ErrorType.Should().Be(ErrorType.ParseError); - response.Reason.Should().Be(Reason.Error); - response.ErrorMessage.Should().Be(testMessage); + Assert.Equal(ErrorType.ParseError, response.ErrorType); + Assert.Equal(Reason.Error, response.Reason); + Assert.Equal(testMessage, response.ErrorMessage); _ = featureProviderMock.Received(1) .ResolveStructureValueAsync(flagName, defaultValue, Arg.Any()); @@ -501,8 +501,8 @@ public async Task Cancellation_Token_Added_Is_Passed_To_Provider() cts.Cancel(); // cancel before awaiting var response = await task; - response.Value.Should().Be(defaultString); - response.Reason.Should().Be(cancelledReason); + Assert.Equal(defaultString, response.Value); + Assert.Equal(cancelledReason, response.Reason); _ = featureProviderMock.Received(1).ResolveStringValueAsync(flagName, defaultString, Arg.Any(), cts.Token); } @@ -538,7 +538,7 @@ public void ToFlagEvaluationDetails_Should_Convert_All_Properties() var expected = new ResolutionDetails(flagName, boolValue, errorType, reason, variant, errorMessage, flagMetadata); var result = expected.ToFlagEvaluationDetails(); - result.Should().BeEquivalentTo(expected); + Assert.Equivalent(expected, result); } [Fact] diff --git a/test/OpenFeature.Tests/OpenFeatureEvaluationContextTests.cs b/test/OpenFeature.Tests/OpenFeatureEvaluationContextTests.cs index 826ac68e..20b0ec2e 100644 --- a/test/OpenFeature.Tests/OpenFeatureEvaluationContextTests.cs +++ b/test/OpenFeature.Tests/OpenFeatureEvaluationContextTests.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using AutoFixture; -using FluentAssertions; using OpenFeature.Model; using OpenFeature.Tests.Internal; using Xunit; @@ -91,34 +90,34 @@ public void EvaluationContext_Should_All_Types() var context = contextBuilder.Build(); - context.TargetingKey.Should().Be("targeting_key"); + Assert.Equal("targeting_key", context.TargetingKey); var targetingKeyValue = context.GetValue(context.TargetingKey!); - targetingKeyValue.IsString.Should().BeTrue(); - targetingKeyValue.AsString.Should().Be("userId"); + Assert.True(targetingKeyValue.IsString); + Assert.Equal("userId", targetingKeyValue.AsString); var value1 = context.GetValue("key1"); - value1.IsString.Should().BeTrue(); - value1.AsString.Should().Be("value"); + Assert.True(value1.IsString); + Assert.Equal("value", value1.AsString); var value2 = context.GetValue("key2"); - value2.IsNumber.Should().BeTrue(); - value2.AsInteger.Should().Be(1); + Assert.True(value2.IsNumber); + Assert.Equal(1, value2.AsInteger); var value3 = context.GetValue("key3"); - value3.IsBoolean.Should().Be(true); - value3.AsBoolean.Should().Be(true); + Assert.True(value3.IsBoolean); + Assert.True(value3.AsBoolean); var value4 = context.GetValue("key4"); - value4.IsDateTime.Should().BeTrue(); - value4.AsDateTime.Should().Be(now); + Assert.True(value4.IsDateTime); + Assert.Equal(now, value4.AsDateTime); var value5 = context.GetValue("key5"); - value5.IsStructure.Should().BeTrue(); - value5.AsStructure.Should().Equal(structure); + Assert.True(value5.IsStructure); + Assert.Equal(structure, value5.AsStructure); var value6 = context.GetValue("key6"); - value6.IsNumber.Should().BeTrue(); - value6.AsDouble.Should().Be(1.0); + Assert.True(value6.IsNumber); + Assert.Equal(1.0, value6.AsDouble); } [Fact] @@ -146,11 +145,11 @@ public void Should_Be_Able_To_Get_All_Values() var count = 0; foreach (var keyValue in context) { - context.GetValue(keyValue.Key).AsString.Should().Be(keyValue.Value.AsString); + Assert.Equal(keyValue.Value.AsString, context.GetValue(keyValue.Key).AsString); count++; } - context.Count.Should().Be(count); + Assert.Equal(count, context.Count); } [Fact] diff --git a/test/OpenFeature.Tests/OpenFeatureHookTests.cs b/test/OpenFeature.Tests/OpenFeatureHookTests.cs index 442b3491..bbb4da3f 100644 --- a/test/OpenFeature.Tests/OpenFeatureHookTests.cs +++ b/test/OpenFeature.Tests/OpenFeatureHookTests.cs @@ -6,7 +6,6 @@ using System.Threading; using System.Threading.Tasks; using AutoFixture; -using FluentAssertions; using NSubstitute; using NSubstitute.ExceptionExtensions; using OpenFeature.Constant; @@ -122,11 +121,11 @@ public void Hook_Context_Should_Have_Properties_And_Be_Immutable() var context = new HookContext("test", testStructure, FlagValueType.Object, clientMetadata, providerMetadata, EvaluationContext.Empty); - context.ClientMetadata.Should().BeSameAs(clientMetadata); - context.ProviderMetadata.Should().BeSameAs(providerMetadata); - context.FlagKey.Should().Be("test"); - context.DefaultValue.Should().BeSameAs(testStructure); - context.FlagValueType.Should().Be(FlagValueType.Object); + Assert.Equal(clientMetadata, context.ClientMetadata); + Assert.Equal(providerMetadata, context.ProviderMetadata); + Assert.Equal("test", context.FlagKey); + Assert.Equal(testStructure, context.DefaultValue); + Assert.Equal(FlagValueType.Object, context.FlagValueType); } [Fact] @@ -264,9 +263,9 @@ public async Task Hook_Should_Return_No_Errors() await hook.FinallyAsync(hookContext, evaluationDetails, hookHints); await hook.ErrorAsync(hookContext, new Exception(), hookHints); - hookContext.ClientMetadata.Name.Should().BeNull(); - hookContext.ClientMetadata.Version.Should().BeNull(); - hookContext.ProviderMetadata.Name.Should().BeNull(); + Assert.Null(hookContext.ClientMetadata.Name); + Assert.Null(hookContext.ClientMetadata.Version); + Assert.Null(hookContext.ProviderMetadata.Name); } [Fact] @@ -329,8 +328,8 @@ await client.GetBooleanValueAsync("test", false, null, new FlagEvaluationOptions(hook3, ImmutableDictionary.Empty)); Assert.Single(Api.Instance.GetHooks()); - client.GetHooks().Count().Should().Be(1); - testProvider.GetProviderHooks().Count.Should().Be(1); + Assert.Single(client.GetHooks()); + Assert.Single(testProvider.GetProviderHooks()); } [Fact] @@ -356,7 +355,7 @@ public async Task Finally_Hook_Should_Be_Executed_Even_If_Abnormal_Termination() await Api.Instance.SetProviderAsync(featureProvider); var client = Api.Instance.GetClient(); client.AddHooks(new[] { hook1, hook2 }); - client.GetHooks().Count().Should().Be(2); + Assert.Equal(2, client.GetHooks().Count()); await client.GetBooleanValueAsync("test", false); @@ -522,7 +521,7 @@ public async Task When_Error_Occurs_In_Before_Hook_Should_Return_Default_Value() hook.FinallyAsync(Arg.Any>(), Arg.Any>(), null); }); - resolvedFlag.Should().BeTrue(); + Assert.True(resolvedFlag); _ = hook.Received(1).BeforeAsync(Arg.Any>(), null); _ = hook.Received(1).ErrorAsync(Arg.Any>(), exceptionToThrow, null); _ = hook.Received(1).FinallyAsync(Arg.Any>(), Arg.Any>(), null); @@ -563,7 +562,7 @@ public async Task When_Error_Occurs_In_After_Hook_Should_Invoke_Error_Hook() var resolvedFlag = await client.GetBooleanValueAsync("test", true, config: flagOptions); - resolvedFlag.Should().BeTrue(); + Assert.True(resolvedFlag); Received.InOrder(() => { diff --git a/test/OpenFeature.Tests/OpenFeatureTests.cs b/test/OpenFeature.Tests/OpenFeatureTests.cs index 1955f82d..24caf9ad 100644 --- a/test/OpenFeature.Tests/OpenFeatureTests.cs +++ b/test/OpenFeature.Tests/OpenFeatureTests.cs @@ -2,7 +2,6 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Threading.Tasks; -using FluentAssertions; using NSubstitute; using OpenFeature.Constant; using OpenFeature.Model; @@ -21,7 +20,7 @@ public void OpenFeature_Should_Be_Singleton() var openFeature = Api.Instance; var openFeature2 = Api.Instance; - openFeature.Should().BeSameAs(openFeature2); + Assert.Equal(openFeature2, openFeature); } [Fact] @@ -104,8 +103,8 @@ public async Task OpenFeature_Should_Not_Change_Named_Providers_When_Setting_Def var defaultClient = openFeature.GetProviderMetadata(); var domainScopedClient = openFeature.GetProviderMetadata(TestProvider.DefaultName); - defaultClient?.Name.Should().Be(NoOpProvider.NoOpProviderName); - domainScopedClient?.Name.Should().Be(TestProvider.DefaultName); + Assert.Equal(NoOpProvider.NoOpProviderName, defaultClient?.Name); + Assert.Equal(TestProvider.DefaultName, domainScopedClient?.Name); } [Fact] @@ -118,7 +117,7 @@ public async Task OpenFeature_Should_Set_Default_Provide_When_No_Name_Provided() var defaultClient = openFeature.GetProviderMetadata(); - defaultClient?.Name.Should().Be(TestProvider.DefaultName); + Assert.Equal(TestProvider.DefaultName, defaultClient?.Name); } [Fact] @@ -131,7 +130,7 @@ public async Task OpenFeature_Should_Assign_Provider_To_Existing_Client() await openFeature.SetProviderAsync(name, new TestProvider()); await openFeature.SetProviderAsync(name, new NoOpFeatureProvider()); - openFeature.GetProviderMetadata(name)?.Name.Should().Be(NoOpProvider.NoOpProviderName); + Assert.Equal(NoOpProvider.NoOpProviderName, openFeature.GetProviderMetadata(name)?.Name); } [Fact] @@ -147,7 +146,7 @@ public async Task OpenFeature_Should_Allow_Multiple_Client_Names_Of_Same_Instanc var clientA = openFeature.GetProvider("a"); var clientB = openFeature.GetProvider("b"); - clientA.Should().Be(clientB); + Assert.Equal(clientB, clientA); } [Fact] @@ -164,16 +163,16 @@ public void OpenFeature_Should_Add_Hooks() openFeature.AddHooks(hook1); - openFeature.GetHooks().Should().Contain(hook1); + Assert.Contains(hook1, openFeature.GetHooks()); Assert.Single(openFeature.GetHooks()); openFeature.AddHooks(hook2); - openFeature.GetHooks().Should().ContainInOrder(hook1, hook2); - openFeature.GetHooks().Count().Should().Be(2); + var expectedHooks = new[] { hook1, hook2 }.AsEnumerable(); + Assert.Equal(expectedHooks, openFeature.GetHooks()); openFeature.AddHooks(new[] { hook3, hook4 }); - openFeature.GetHooks().Should().ContainInOrder(hook1, hook2, hook3, hook4); - openFeature.GetHooks().Count().Should().Be(4); + expectedHooks = new[] { hook1, hook2, hook3, hook4 }.AsEnumerable(); + Assert.Equal(expectedHooks, openFeature.GetHooks()); openFeature.ClearHooks(); Assert.Empty(openFeature.GetHooks()); @@ -187,8 +186,8 @@ public async Task OpenFeature_Should_Get_Metadata() var openFeature = Api.Instance; var metadata = openFeature.GetProviderMetadata(); - metadata.Should().NotBeNull(); - metadata?.Name.Should().Be(NoOpProvider.NoOpProviderName); + Assert.NotNull(metadata); + Assert.Equal(NoOpProvider.NoOpProviderName, metadata?.Name); } [Theory] @@ -201,9 +200,9 @@ public void OpenFeature_Should_Create_Client(string? name = null, string? versio var openFeature = Api.Instance; var client = openFeature.GetClient(name, version); - client.Should().NotBeNull(); - client.GetMetadata().Name.Should().Be(name); - client.GetMetadata().Version.Should().Be(version); + Assert.NotNull(client); + Assert.Equal(name, client.GetMetadata().Name); + Assert.Equal(version, client.GetMetadata().Version); } [Fact] @@ -213,19 +212,19 @@ public void Should_Set_Given_Context() Api.Instance.SetContext(context); - Api.Instance.GetContext().Should().BeSameAs(context); + Assert.Equal(context, Api.Instance.GetContext()); context = EvaluationContext.Builder().Build(); Api.Instance.SetContext(context); - Api.Instance.GetContext().Should().BeSameAs(context); + Assert.Equal(context, Api.Instance.GetContext()); } [Fact] public void Should_Always_Have_Provider() { - Api.Instance.GetProvider().Should().NotBeNull(); + Assert.NotNull(Api.Instance.GetProvider()); } [Fact] @@ -239,11 +238,11 @@ public async Task OpenFeature_Should_Allow_Multiple_Client_Mapping() var client1 = openFeature.GetClient("client1"); var client2 = openFeature.GetClient("client2"); - client1.GetMetadata().Name.Should().Be("client1"); - client2.GetMetadata().Name.Should().Be("client2"); + Assert.Equal("client1", client1.GetMetadata().Name); + Assert.Equal("client2", client2.GetMetadata().Name); - (await client1.GetBooleanValueAsync("test", false)).Should().BeTrue(); - (await client2.GetBooleanValueAsync("test", false)).Should().BeFalse(); + Assert.True(await client1.GetBooleanValueAsync("test", false)); + Assert.False(await client2.GetBooleanValueAsync("test", false)); } [Fact]