Browse Source

Unit tests for DaprActorsProductInventoryProvider

pull/160/head
gdlcf88 4 years ago
parent
commit
e84fe3b2bb
  1. 7
      EShop.sln
  2. 48
      plugins/Inventories/DaprActors/test/EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests/DaprActorsProductInventoryProviderTests.cs
  3. 16
      plugins/Inventories/DaprActors/test/EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests/EShopProductsDaprActorsInventoryDomainTestModule.cs
  4. 24
      plugins/Inventories/DaprActors/test/EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests/EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests.csproj
  5. 43
      plugins/Inventories/DaprActors/test/EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests/FakeInventoryActor.cs
  6. 61
      plugins/Inventories/DaprActors/test/EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests/ProductsDaprActorsInventoryTestBase.cs
  7. 26
      plugins/Inventories/DaprActors/test/EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests/TestInventoryActorProvider.cs

7
EShop.sln

@ -355,6 +355,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{F468A386-566
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{485204B1-7603-4EA0-B3A4-73CB89B0D5BC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests", "plugins\Inventories\DaprActors\test\EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests\EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests.csproj", "{733C51A3-19C8-45C4-8B22-3FD40CAF4EFB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -921,6 +923,10 @@ Global
{B6F3ACD5-463E-4455-A094-057A82941A94}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B6F3ACD5-463E-4455-A094-057A82941A94}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B6F3ACD5-463E-4455-A094-057A82941A94}.Release|Any CPU.Build.0 = Release|Any CPU
{733C51A3-19C8-45C4-8B22-3FD40CAF4EFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{733C51A3-19C8-45C4-8B22-3FD40CAF4EFB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{733C51A3-19C8-45C4-8B22-3FD40CAF4EFB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{733C51A3-19C8-45C4-8B22-3FD40CAF4EFB}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -1098,6 +1104,7 @@ Global
{CF4DE32D-9629-4C48-9BE8-5B83A1C27291} = {F468A386-5660-4888-981A-6ECF15182D32}
{6CD1A8B5-8AB7-4A31-8333-024A7FB602D1} = {F468A386-5660-4888-981A-6ECF15182D32}
{485204B1-7603-4EA0-B3A4-73CB89B0D5BC} = {6E6FE4B9-4117-4F57-B219-EE47E4046096}
{733C51A3-19C8-45C4-8B22-3FD40CAF4EFB} = {485204B1-7603-4EA0-B3A4-73CB89B0D5BC}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {28315BFD-90E7-4E14-A2EA-F3D23AF4126F}

48
plugins/Inventories/DaprActors/test/EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests/DaprActorsProductInventoryProviderTests.cs

@ -0,0 +1,48 @@
using System.Threading.Tasks;
using EasyAbp.EShop.Products.ProductInventories;
using Microsoft.Extensions.DependencyInjection;
using Shouldly;
using Xunit;
namespace EasyAbp.EShop.Products.DaprActorsInventory.Domain;
public class DaprActorsProductInventoryProviderTests : ProductsDaprActorsInventoryTestBase
{
[Fact]
public async Task Should_Get_Inventory()
{
var inventoryProvider = ServiceProvider.GetRequiredService<DaprActorsProductInventoryProvider>();
var inventoryDataModel = await inventoryProvider.GetInventoryDataAsync(new InventoryQueryModel());
inventoryDataModel.ShouldNotBeNull();
inventoryDataModel.Inventory.ShouldBe(100);
inventoryDataModel.Sold.ShouldBe(0);
}
[Fact]
public async Task Should_Change_Inventory()
{
var inventoryProvider = ServiceProvider.GetRequiredService<DaprActorsProductInventoryProvider>();
var result = await inventoryProvider.TryReduceInventoryAsync(new InventoryQueryModel(), 2, true);
result.ShouldBeTrue();
var inventoryDataModel = await inventoryProvider.GetInventoryDataAsync(new InventoryQueryModel());
inventoryDataModel.ShouldNotBeNull();
inventoryDataModel.Inventory.ShouldBe(98);
inventoryDataModel.Sold.ShouldBe(2);
result = await inventoryProvider.TryIncreaseInventoryAsync(new InventoryQueryModel(), 1, true);
result.ShouldBeTrue();
inventoryDataModel = await inventoryProvider.GetInventoryDataAsync(new InventoryQueryModel());
inventoryDataModel.ShouldNotBeNull();
inventoryDataModel.Inventory.ShouldBe(99);
inventoryDataModel.Sold.ShouldBe(1);
}
}

16
plugins/Inventories/DaprActors/test/EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests/EShopProductsDaprActorsInventoryDomainTestModule.cs

@ -0,0 +1,16 @@
using Volo.Abp;
using Volo.Abp.Authorization;
using Volo.Abp.Autofac;
using Volo.Abp.Modularity;
namespace EasyAbp.EShop.Products.DaprActorsInventory.Domain;
[DependsOn(
typeof(AbpAutofacModule),
typeof(AbpTestBaseModule),
typeof(AbpAuthorizationModule),
typeof(EShopProductsDaprActorsInventoryDomainModule)
)]
public class EShopProductsDaprActorsInventoryDomainTestModule : AbpModule
{
}

24
plugins/Inventories/DaprActors/test/EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests/EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests.csproj

@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>EasyAbp.EShop.Products.DaprActorsInventory.Domain</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
<PackageReference Include="NSubstitute" Version="4.2.2" />
<PackageReference Include="Shouldly" Version="4.0.1" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.extensibility.execution" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" />
<PackageReference Include="Volo.Abp.Autofac" Version="$(AbpVersion)" />
<PackageReference Include="Volo.Abp.Authorization" Version="$(AbpVersion)" />
<PackageReference Include="Volo.Abp.TestBase" Version="$(AbpVersion)" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\EasyAbp.EShop.Products.DaprActorsInventory.Domain\EasyAbp.EShop.Products.DaprActorsInventory.Domain.csproj" />
</ItemGroup>
</Project>

43
plugins/Inventories/DaprActors/test/EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests/FakeInventoryActor.cs

@ -0,0 +1,43 @@
using System.Threading.Tasks;
using EasyAbp.EShop.Plugins.Inventories.DaprActors;
using Volo.Abp.DependencyInjection;
namespace EasyAbp.EShop.Products.DaprActorsInventory.Domain;
public class FakeInventoryActor : IInventoryActor, ITransientDependency
{
private InventoryStateModel StateModel { get; } = new()
{
Inventory = 100,
Sold = 0
};
public Task<InventoryStateModel> GetInventoryStateAsync()
{
return Task.FromResult(StateModel);
}
public Task IncreaseInventoryAsync(int quantity, bool decreaseSold)
{
StateModel.Inventory += quantity;
if (decreaseSold)
{
StateModel.Sold -= quantity;
}
return Task.CompletedTask;
}
public Task ReduceInventoryAsync(int quantity, bool increaseSold)
{
StateModel.Inventory -= quantity;
if (increaseSold)
{
StateModel.Sold += quantity;
}
return Task.CompletedTask;
}
}

61
plugins/Inventories/DaprActors/test/EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests/ProductsDaprActorsInventoryTestBase.cs

@ -0,0 +1,61 @@
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.Modularity;
using Volo.Abp.Testing;
using Volo.Abp.Uow;
namespace EasyAbp.EShop.Products.DaprActorsInventory.Domain
{
/* All test classes are derived from this class, directly or indirectly. */
public abstract class
ProductsDaprActorsInventoryTestBase : AbpIntegratedTest<EShopProductsDaprActorsInventoryDomainTestModule>
{
protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
{
options.UseAutofac();
}
protected virtual Task WithUnitOfWorkAsync(Func<Task> func)
{
return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func);
}
protected virtual async Task WithUnitOfWorkAsync(AbpUnitOfWorkOptions options, Func<Task> action)
{
using (var scope = ServiceProvider.CreateScope())
{
var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
using (var uow = uowManager.Begin(options))
{
await action();
await uow.CompleteAsync();
}
}
}
protected virtual Task<TResult> WithUnitOfWorkAsync<TResult>(Func<Task<TResult>> func)
{
return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func);
}
protected virtual async Task<TResult> WithUnitOfWorkAsync<TResult>(AbpUnitOfWorkOptions options,
Func<Task<TResult>> func)
{
using (var scope = ServiceProvider.CreateScope())
{
var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
using (var uow = uowManager.Begin(options))
{
var result = await func();
await uow.CompleteAsync();
return result;
}
}
}
}
}

26
plugins/Inventories/DaprActors/test/EasyAbp.EShop.Products.DaprActorsInventory.Domain.Tests/TestInventoryActorProvider.cs

@ -0,0 +1,26 @@
using System;
using System.Threading.Tasks;
using Dapr.Actors;
using EasyAbp.EShop.Plugins.Inventories.DaprActors;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.DependencyInjection;
namespace EasyAbp.EShop.Products.DaprActorsInventory.Domain;
[Dependency(ReplaceServices = true)]
public class TestInventoryActorProvider : IInventoryActorProvider, ITransientDependency
{
private IInventoryActor Actor { get; set; }
private readonly IServiceProvider _serviceProvider;
public TestInventoryActorProvider(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public Task<IInventoryActor> GetAsync(ActorId actorId, string actorType)
{
return Task.FromResult(Actor ??= _serviceProvider.GetRequiredService<FakeInventoryActor>());
}
}
Loading…
Cancel
Save