Skip to content

Commit

Permalink
Added basic files structure of EventStoreDB Application Logic and Opt…
Browse files Browse the repository at this point in the history
…imistic Concurrency tests based on the Marten versions

Removed also obsolete EventStoreDB business logic tests
  • Loading branch information
oskardudycz committed May 2, 2024
1 parent 919c733 commit 5ce1e42
Show file tree
Hide file tree
Showing 162 changed files with 7,838 additions and 3,709 deletions.
77 changes: 56 additions & 21 deletions EventSourcing.NetCore.sln
Expand Up @@ -293,18 +293,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "07-BusinessLogic", "Worksho
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "07-BusinessLogic", "Workshops\IntroductionToEventSourcing\Solved\07-BusinessLogic\07-BusinessLogic.csproj", "{2B630D31-F68C-447E-82C4-48E2B17322B5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "09-BusinessLogic.EventStoreDB", "Workshops\IntroductionToEventSourcing\09-BusinessLogic.EventStoreDB\09-BusinessLogic.EventStoreDB.csproj", "{6A93A4C6-7C50-453A-B3DA-48812DEC1C0F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "09-BusinessLogic.EventStoreDB", "Workshops\IntroductionToEventSourcing\Solved\09-BusinessLogic.EventStoreDB\09-BusinessLogic.EventStoreDB.csproj", "{26E884E8-4E81-4C87-A643-FE7327F218CE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "10-OptimisticConcurrency.Marten", "Workshops\IntroductionToEventSourcing\10-OptimisticConcurrency.Marten\10-OptimisticConcurrency.Marten.csproj", "{DFC5BD15-8718-469A-B0FE-D21E473F1133}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "11-OptimisticConcurrency.EventStoreDB", "Workshops\IntroductionToEventSourcing\11-OptimisticConcurrency.EventStoreDB\11-OptimisticConcurrency.EventStoreDB.csproj", "{84F2A740-C461-4F1F-BF3D-2BFC4D6C7F4F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "10-OptimisticConcurrency.Marten", "Workshops\IntroductionToEventSourcing\Solved\10-OptimisticConcurrency.Marten\10-OptimisticConcurrency.Marten.csproj", "{C33A067F-5335-4011-B955-66901D877B24}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "11-OptimisticConcurrency.EventStoreDB", "Workshops\IntroductionToEventSourcing\Solved\11-OptimisticConcurrency.EventStoreDB\11-OptimisticConcurrency.EventStoreDB.csproj", "{01F3743A-F751-471D-9CEC-E8D66C25CBCD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "12-Projections.SingleStream", "Workshops\IntroductionToEventSourcing\12-Projections.SingleStream\12-Projections.SingleStream.csproj", "{F21F4280-8B2A-43E1-8044-3E6E2905F60B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "13-Projections.SingleStream.Idempotency", "Workshops\IntroductionToEventSourcing\13-Projections.SingleStream.Idempotency\13-Projections.SingleStream.Idempotency.csproj", "{D3DDFAD6-3B1D-43FD-8310-3F078D0CAD17}"
Expand Down Expand Up @@ -459,6 +453,22 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "10-OptimisticConcurrency.Ma
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "10-OptimisticConcurrency.Marten.Tests", "Workshops\IntroductionToEventSourcing\Solved\10-OptimisticConcurrency.Marten.Tests\10-OptimisticConcurrency.Marten.Tests.csproj", "{44BE49F6-8F70-48B7-8AC0-4B99DF855341}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "09-ApplicationLogic.EventStoreDB", "Workshops\IntroductionToEventSourcing\Solved\09-ApplicationLogic.EventStoreDB\09-ApplicationLogic.EventStoreDB.csproj", "{FF18D668-D7EC-4F20-BCEA-806CC4626952}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "09-ApplicationLogic.EventStoreDB.Tests", "Workshops\IntroductionToEventSourcing\Solved\09-ApplicationLogic.EventStoreDB.Tests\09-ApplicationLogic.EventStoreDB.Tests.csproj", "{FDF47EF4-3956-404B-AC58-B9F2B7E3FFCA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "11-OptimisticConcurrency.EventStoreDB", "Workshops\IntroductionToEventSourcing\Solved\11-OptimisticConcurrency.EventStoreDB\11-OptimisticConcurrency.EventStoreDB.csproj", "{AF0FC35B-EB97-4EE3-9461-FE17B4A37DC1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "11-OptimisticConcurrency.EventStoreDB.Tests", "Workshops\IntroductionToEventSourcing\Solved\11-OptimisticConcurrency.EventStoreDB.Tests\11-OptimisticConcurrency.EventStoreDB.Tests.csproj", "{EB6D55F2-3D3B-44E1-B6A2-12D6A42A2321}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "09-ApplicationLogic.EventStoreDB", "Workshops\IntroductionToEventSourcing\09-ApplicationLogic.EventStoreDB\09-ApplicationLogic.EventStoreDB.csproj", "{10CA3C99-7C1C-4CA5-9BE9-7092A0949CF7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "09-ApplicationLogic.EventStoreDB.Tests", "Workshops\IntroductionToEventSourcing\09-ApplicationLogic.EventStoreDB.Tests\09-ApplicationLogic.EventStoreDB.Tests.csproj", "{3AE580AB-209E-4F2A-AE7E-0BB89602A338}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "11-OptimisticConcurrency.EventStoreDB", "Workshops\IntroductionToEventSourcing\11-OptimisticConcurrency.EventStoreDB\11-OptimisticConcurrency.EventStoreDB.csproj", "{7829C11A-59AF-4C10-A679-312B8940A68D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "11-OptimisticConcurrency.EventStoreDB.Tests", "Workshops\IntroductionToEventSourcing\11-OptimisticConcurrency.EventStoreDB.Tests\11-OptimisticConcurrency.EventStoreDB.Tests.csproj", "{37E05147-F579-458D-9B4F-25B54AC078DE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -805,10 +815,6 @@ Global
{2B630D31-F68C-447E-82C4-48E2B17322B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2B630D31-F68C-447E-82C4-48E2B17322B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2B630D31-F68C-447E-82C4-48E2B17322B5}.Release|Any CPU.Build.0 = Release|Any CPU
{6A93A4C6-7C50-453A-B3DA-48812DEC1C0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6A93A4C6-7C50-453A-B3DA-48812DEC1C0F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6A93A4C6-7C50-453A-B3DA-48812DEC1C0F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6A93A4C6-7C50-453A-B3DA-48812DEC1C0F}.Release|Any CPU.Build.0 = Release|Any CPU
{26E884E8-4E81-4C87-A643-FE7327F218CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{26E884E8-4E81-4C87-A643-FE7327F218CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{26E884E8-4E81-4C87-A643-FE7327F218CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand All @@ -817,18 +823,10 @@ Global
{DFC5BD15-8718-469A-B0FE-D21E473F1133}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DFC5BD15-8718-469A-B0FE-D21E473F1133}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DFC5BD15-8718-469A-B0FE-D21E473F1133}.Release|Any CPU.Build.0 = Release|Any CPU
{84F2A740-C461-4F1F-BF3D-2BFC4D6C7F4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{84F2A740-C461-4F1F-BF3D-2BFC4D6C7F4F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{84F2A740-C461-4F1F-BF3D-2BFC4D6C7F4F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{84F2A740-C461-4F1F-BF3D-2BFC4D6C7F4F}.Release|Any CPU.Build.0 = Release|Any CPU
{C33A067F-5335-4011-B955-66901D877B24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C33A067F-5335-4011-B955-66901D877B24}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C33A067F-5335-4011-B955-66901D877B24}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C33A067F-5335-4011-B955-66901D877B24}.Release|Any CPU.Build.0 = Release|Any CPU
{01F3743A-F751-471D-9CEC-E8D66C25CBCD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{01F3743A-F751-471D-9CEC-E8D66C25CBCD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{01F3743A-F751-471D-9CEC-E8D66C25CBCD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{01F3743A-F751-471D-9CEC-E8D66C25CBCD}.Release|Any CPU.Build.0 = Release|Any CPU
{F21F4280-8B2A-43E1-8044-3E6E2905F60B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F21F4280-8B2A-43E1-8044-3E6E2905F60B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F21F4280-8B2A-43E1-8044-3E6E2905F60B}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand Down Expand Up @@ -1021,6 +1019,38 @@ Global
{44BE49F6-8F70-48B7-8AC0-4B99DF855341}.Debug|Any CPU.Build.0 = Debug|Any CPU
{44BE49F6-8F70-48B7-8AC0-4B99DF855341}.Release|Any CPU.ActiveCfg = Release|Any CPU
{44BE49F6-8F70-48B7-8AC0-4B99DF855341}.Release|Any CPU.Build.0 = Release|Any CPU
{FF18D668-D7EC-4F20-BCEA-806CC4626952}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FF18D668-D7EC-4F20-BCEA-806CC4626952}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FF18D668-D7EC-4F20-BCEA-806CC4626952}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FF18D668-D7EC-4F20-BCEA-806CC4626952}.Release|Any CPU.Build.0 = Release|Any CPU
{FDF47EF4-3956-404B-AC58-B9F2B7E3FFCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FDF47EF4-3956-404B-AC58-B9F2B7E3FFCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FDF47EF4-3956-404B-AC58-B9F2B7E3FFCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FDF47EF4-3956-404B-AC58-B9F2B7E3FFCA}.Release|Any CPU.Build.0 = Release|Any CPU
{AF0FC35B-EB97-4EE3-9461-FE17B4A37DC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AF0FC35B-EB97-4EE3-9461-FE17B4A37DC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AF0FC35B-EB97-4EE3-9461-FE17B4A37DC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AF0FC35B-EB97-4EE3-9461-FE17B4A37DC1}.Release|Any CPU.Build.0 = Release|Any CPU
{EB6D55F2-3D3B-44E1-B6A2-12D6A42A2321}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EB6D55F2-3D3B-44E1-B6A2-12D6A42A2321}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EB6D55F2-3D3B-44E1-B6A2-12D6A42A2321}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EB6D55F2-3D3B-44E1-B6A2-12D6A42A2321}.Release|Any CPU.Build.0 = Release|Any CPU
{10CA3C99-7C1C-4CA5-9BE9-7092A0949CF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{10CA3C99-7C1C-4CA5-9BE9-7092A0949CF7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{10CA3C99-7C1C-4CA5-9BE9-7092A0949CF7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{10CA3C99-7C1C-4CA5-9BE9-7092A0949CF7}.Release|Any CPU.Build.0 = Release|Any CPU
{3AE580AB-209E-4F2A-AE7E-0BB89602A338}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3AE580AB-209E-4F2A-AE7E-0BB89602A338}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3AE580AB-209E-4F2A-AE7E-0BB89602A338}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3AE580AB-209E-4F2A-AE7E-0BB89602A338}.Release|Any CPU.Build.0 = Release|Any CPU
{7829C11A-59AF-4C10-A679-312B8940A68D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7829C11A-59AF-4C10-A679-312B8940A68D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7829C11A-59AF-4C10-A679-312B8940A68D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7829C11A-59AF-4C10-A679-312B8940A68D}.Release|Any CPU.Build.0 = Release|Any CPU
{37E05147-F579-458D-9B4F-25B54AC078DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{37E05147-F579-458D-9B4F-25B54AC078DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{37E05147-F579-458D-9B4F-25B54AC078DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{37E05147-F579-458D-9B4F-25B54AC078DE}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -1134,12 +1164,9 @@ Global
{0FE43045-AC67-4DB9-9820-82C9D55EA09A} = {14C7B928-9D6C-441A-8A1F-0C49173E73EB}
{2FFCF9EC-9C75-497B-BC94-B0051367780F} = {14C7B928-9D6C-441A-8A1F-0C49173E73EB}
{2B630D31-F68C-447E-82C4-48E2B17322B5} = {65F6E2BE-B2D4-4E56-B0CB-3062C4882B9E}
{6A93A4C6-7C50-453A-B3DA-48812DEC1C0F} = {14C7B928-9D6C-441A-8A1F-0C49173E73EB}
{26E884E8-4E81-4C87-A643-FE7327F218CE} = {65F6E2BE-B2D4-4E56-B0CB-3062C4882B9E}
{DFC5BD15-8718-469A-B0FE-D21E473F1133} = {14C7B928-9D6C-441A-8A1F-0C49173E73EB}
{84F2A740-C461-4F1F-BF3D-2BFC4D6C7F4F} = {14C7B928-9D6C-441A-8A1F-0C49173E73EB}
{C33A067F-5335-4011-B955-66901D877B24} = {65F6E2BE-B2D4-4E56-B0CB-3062C4882B9E}
{01F3743A-F751-471D-9CEC-E8D66C25CBCD} = {65F6E2BE-B2D4-4E56-B0CB-3062C4882B9E}
{F21F4280-8B2A-43E1-8044-3E6E2905F60B} = {14C7B928-9D6C-441A-8A1F-0C49173E73EB}
{D3DDFAD6-3B1D-43FD-8310-3F078D0CAD17} = {14C7B928-9D6C-441A-8A1F-0C49173E73EB}
{95D8A870-5300-4C1D-BFF1-DBBDD183C8A1} = {14C7B928-9D6C-441A-8A1F-0C49173E73EB}
Expand Down Expand Up @@ -1208,6 +1235,14 @@ Global
{9A07F586-2D4B-46F4-AF8F-AF8290AE4A73} = {65F6E2BE-B2D4-4E56-B0CB-3062C4882B9E}
{E03F9212-A1C3-4E3A-8DB6-C2FE05130C03} = {14C7B928-9D6C-441A-8A1F-0C49173E73EB}
{44BE49F6-8F70-48B7-8AC0-4B99DF855341} = {65F6E2BE-B2D4-4E56-B0CB-3062C4882B9E}
{FF18D668-D7EC-4F20-BCEA-806CC4626952} = {65F6E2BE-B2D4-4E56-B0CB-3062C4882B9E}
{FDF47EF4-3956-404B-AC58-B9F2B7E3FFCA} = {65F6E2BE-B2D4-4E56-B0CB-3062C4882B9E}
{AF0FC35B-EB97-4EE3-9461-FE17B4A37DC1} = {65F6E2BE-B2D4-4E56-B0CB-3062C4882B9E}
{EB6D55F2-3D3B-44E1-B6A2-12D6A42A2321} = {65F6E2BE-B2D4-4E56-B0CB-3062C4882B9E}
{10CA3C99-7C1C-4CA5-9BE9-7092A0949CF7} = {14C7B928-9D6C-441A-8A1F-0C49173E73EB}
{3AE580AB-209E-4F2A-AE7E-0BB89602A338} = {14C7B928-9D6C-441A-8A1F-0C49173E73EB}
{7829C11A-59AF-4C10-A679-312B8940A68D} = {14C7B928-9D6C-441A-8A1F-0C49173E73EB}
{37E05147-F579-458D-9B4F-25B54AC078DE} = {14C7B928-9D6C-441A-8A1F-0C49173E73EB}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {A5F55604-2FF3-43B7-B657-4F18E6E95D3B}
Expand Down
@@ -0,0 +1,32 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>ApplicationLogic.EventStoreDB.Tests</RootNamespace>
<AssemblyName>ApplicationLogic.EventStoreDB.Tests</AssemblyName>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="FluentAssertions" Version="6.12.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageReference Include="NSubstitute" Version="5.1.0" />
<PackageReference Include="xunit" Version="2.7.1" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="8.0.4" />
<PackageReference Include="Ogooreck" Version="0.8.0" />
<PackageReference Include="Bogus" Version="35.5.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.8">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\09-ApplicationLogic.EventStoreDB\09-ApplicationLogic.EventStoreDB.csproj" />
</ItemGroup>

<Import Project="..\..\..\Tests.Build.props" />

</Project>
@@ -0,0 +1,18 @@
using Oakton;
using Xunit;
using Xunit.Abstractions;
using Xunit.Sdk;

[assembly: TestFramework("ApplicationLogic.Marten.Tests.AssemblyFixture", "ApplicationLogic.Marten.Tests")]
[assembly: CollectionBehavior(DisableTestParallelization = true)]

namespace ApplicationLogic.Marten.Tests;

public sealed class AssemblyFixture : XunitTestFramework
{
public AssemblyFixture(IMessageSink messageSink)
:base(messageSink)
{
OaktonEnvironment.AutoStartHost = true;
}
}
@@ -0,0 +1,118 @@
using ApplicationLogic.Marten.Immutable.ShoppingCarts;
using Bogus;
using Ogooreck.API;
using Xunit;
using static Ogooreck.API.ApiSpecification;
using static ApplicationLogic.Marten.Tests.ShoppingCarts.Scenarios;
using static ApplicationLogic.Marten.Tests.ShoppingCarts.Fixtures;

namespace ApplicationLogic.Marten.Tests.ShoppingCarts;

public class AddProductItemToShoppingCartTests(ApiSpecification<Program> api):
IClassFixture<ApiSpecification<Program>>
{

[Theory]
[Trait("Category", "SkipCI")]
[InlineData("immutable")]
[InlineData("mutable")]
[InlineData("mixed")]
public Task CantAddProductItemToNotExistingShoppingCart(string apiPrefix) =>
api.Given()
.When(
POST,
URI(ShoppingCartProductItemsUrl(apiPrefix, ClientId, NotExistingShoppingCartId)),
BODY(new AddProductRequest(ProductItem))
)
.Then(NOT_FOUND);


[Theory]
[Trait("Category", "SkipCI")]
[InlineData("immutable")]
[InlineData("mutable")]
[InlineData("mixed")]
public Task AddsProductItemToEmptyShoppingCart(string apiPrefix) =>
api.Given(OpenedShoppingCart(apiPrefix, ClientId))
.When(
POST,
URI(ctx => ShoppingCartProductItemsUrl(apiPrefix, ClientId, ctx.GetCreatedId<Guid>())),
BODY(new AddProductRequest(ProductItem))
)
.Then(NO_CONTENT);


[Theory]
[Trait("Category", "SkipCI")]
[InlineData("immutable")]
[InlineData("mutable")]
[InlineData("mixed")]
public Task AddsProductItemToNonEmptyShoppingCart(string apiPrefix) =>
api.Given(
OpenedShoppingCart(apiPrefix, ClientId),
WithProductItem(apiPrefix, ClientId, ProductItem)
)
.When(
POST,
URI(ctx => ShoppingCartProductItemsUrl(apiPrefix, ClientId, ctx.GetCreatedId<Guid>())),
BODY(new AddProductRequest(ProductItem))
)
.Then(NO_CONTENT);


[Theory]
[Trait("Category", "SkipCI")]
[InlineData("immutable")]
[InlineData("mutable")]
[InlineData("mixed")]
public Task CantAddProductItemToConfirmedShoppingCart(string apiPrefix) =>
api.Given(
OpenedShoppingCart(apiPrefix, ClientId),
WithProductItem(apiPrefix, ClientId, ProductItem),
ThenConfirmed(apiPrefix, ClientId)
)
.When(
POST,
URI(ctx => ShoppingCartProductItemsUrl(apiPrefix, ClientId, ctx.GetCreatedId<Guid>())),
BODY(new AddProductRequest(ProductItem))
)
.Then(CONFLICT);


[Theory]
[Trait("Category", "SkipCI")]
[InlineData("immutable")]
[InlineData("mutable")]
[InlineData("mixed")]
public Task CantAddProductItemToCanceledShoppingCart(string apiPrefix) =>
api.Given(
OpenedShoppingCart(apiPrefix, ClientId),
WithProductItem(apiPrefix, ClientId, ProductItem),
ThenCanceled(apiPrefix, ClientId)
)
.When(
POST,
URI(ctx => ShoppingCartProductItemsUrl(apiPrefix, ClientId, ctx.GetCreatedId<Guid>())),
BODY(new AddProductRequest(ProductItem))
)
.Then(CONFLICT);


[Theory]
[Trait("Category", "SkipCI")]
[InlineData("immutable")]
[InlineData("mutable")]
[InlineData("mixed")]
public Task ReturnsNonEmptyShoppingCart(string apiPrefix) =>
api.Given(
OpenedShoppingCart(apiPrefix, ClientId),
WithProductItem(apiPrefix, ClientId, ProductItem)
)
.When(GET, URI(ctx => ShoppingCartUrl(apiPrefix, ClientId, ctx.GetCreatedId<Guid>())))
.Then(OK);

private static readonly Faker Faker = new();
private readonly Guid NotExistingShoppingCartId = Guid.NewGuid();
private readonly Guid ClientId = Guid.NewGuid();
private readonly ProductItemRequest ProductItem = new(Guid.NewGuid(), Faker.Random.Number(1, 500));
}

0 comments on commit 5ce1e42

Please sign in to comment.