Skip to content

Commit

Permalink
Add tests for service lifetime instance
Browse files Browse the repository at this point in the history
  • Loading branch information
19bibo85 authored and nozzlegear committed Mar 30, 2024
1 parent 087d4b3 commit 011cf61
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 2 deletions.
Expand Up @@ -173,7 +173,7 @@ public void AddShopifySharpServiceFactories_AddsServiceFactories()
}

[Fact]
public void AddShopifySharp_AddsRequestExecutionPolicy_ThenAddsServiceFactories()
public void AddShopifySharp_AddsRequestExecutionPolicy_AddsUtilities_ThenAddsServiceFactories()
{
// Setup
var container = new ServiceCollection();
Expand All @@ -196,4 +196,44 @@ public void AddShopifySharp_AddsRequestExecutionPolicy_ThenAddsServiceFactories(
.And
.BeOfType<OrderServiceFactory>();
}
}

[Theory]
[InlineData(ServiceLifetime.Scoped)]
[InlineData(ServiceLifetime.Singleton)]
[InlineData(ServiceLifetime.Transient)]
public void AddShopifySharp_AddsRequestExecutionPolicy_AddsUtilities_ThenAddsServiceFactories_WithServiceLifetime(ServiceLifetime serviceLifetime)
{
// Setup
var container = new ServiceCollection();

// Act
container.AddShopifySharp<TestRequestExecutionPolicy>(serviceLifetime);

// Assert
var serviceProvider = container.BuildServiceProvider();
var domainUtility = serviceProvider.GetServiceInstances<IShopifyDomainUtility>();
var policy = serviceProvider.GetServiceInstances<IRequestExecutionPolicy>();
var orderServiceFactory = serviceProvider.GetServiceInstances<IOrderServiceFactory>();

domainUtility.Instance1.Should()
.NotBeNull()
.And
.ValidLifetimeInstance(domainUtility.Instance2
.Should()
.NotBeNull(), serviceLifetime);

policy.Instance1.Should()
.NotBeNull()
.And
.ValidLifetimeInstance(policy.Instance2
.Should()
.NotBeNull(), serviceLifetime);

orderServiceFactory.Instance1.Should()
.NotBeNull()
.And
.ValidLifetimeInstance(orderServiceFactory.Instance2
.Should()
.NotBeNull(), serviceLifetime);
}
}
11 changes: 11 additions & 0 deletions ShopifySharp.Extensions.DependencyInjection.Tests/TestClasses.cs
Expand Up @@ -32,3 +32,14 @@ public Task<bool> IsValidShopDomainAsync(string shopDomain, CancellationToken ca
throw new TestException();
}
}

public class TestServiceLifetime<T> where T : class
{
public readonly T? Instance1, Instance2;

public TestServiceLifetime(T? instance1, T? instance2)
{
Instance1 = instance1;
Instance2 = instance2;
}
}
@@ -0,0 +1,28 @@
namespace ShopifySharp.Extensions.DependencyInjection.Tests
{
public static class ObjectExtensions
{
private static readonly Dictionary<ServiceLifetime, bool> ServiceLifetimeInstanceValidation = new()
{
{ ServiceLifetime.Scoped, true },
{ ServiceLifetime.Singleton, true },
{ ServiceLifetime.Transient, false }
};

public static bool ValidLifetimeInstance(this object actual, object expceted, ServiceLifetime serviceLifetime)
{
return ServiceLifetimeInstanceValidation.TryGetValue(serviceLifetime, out bool value) && value ? ReferenceEquals(actual, expceted) : !ReferenceEquals(actual, expceted);
}
}

public static class ServiceProviderExtensions
{
public static TestServiceLifetime<T> GetServiceInstances<T>(this ServiceProvider? serviceProvider) where T : class
{
var service1 = serviceProvider?.GetService<T>();
var service2 = serviceProvider?.GetService<T>();

return new TestServiceLifetime<T>(service1, service2);
}
}
}

0 comments on commit 011cf61

Please sign in to comment.