Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ECommerce samples alignment #118

Merged
merged 3 commits into from
Mar 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

namespace Core.EventStoreDB.Events;

public static class StreamEventExtensions
public static class EventEnvelopeExtensions
{
public static EventEnvelope? ToStreamEvent(this ResolvedEvent resolvedEvent)
public static EventEnvelope? ToEventEnvelope(this ResolvedEvent resolvedEvent)
{
var eventData = resolvedEvent.Deserialize();
var eventMetadata = resolvedEvent.DeserializeMetadata();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ private async Task HandleEvent(StreamSubscription subscription, ResolvedEvent re
{
if (IsEventWithEmptyData(resolvedEvent) || IsCheckpointEvent(resolvedEvent)) return;

var streamEvent = resolvedEvent.ToStreamEvent();
var streamEvent = resolvedEvent.ToEventEnvelope();

if (streamEvent == null)
{
Expand Down
4 changes: 2 additions & 2 deletions Core.Marten/Config.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,14 @@ private static StoreOptions SetStoreOptions(
"MartenSubscription"
);

configureOptions?.Invoke(options);

if (config.UseMetadata)
{
options.Events.MetadataConfig.CausationIdEnabled = true;
options.Events.MetadataConfig.CorrelationIdEnabled = true;
}

configureOptions?.Invoke(options);

return options;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,10 @@ public async Task Invoke(HttpContext context /* other scoped dependencies */)
private Task HandleExceptionAsync(HttpContext context, Exception exception)
{
logger.LogError(exception, exception.Message);
Console.WriteLine(exception.Message);
Console.WriteLine("ERROR:" + exception.Message + exception.StackTrace);

if(exception.InnerException != null)
Console.WriteLine("INNER DETAILS:" + exception.InnerException.Message + exception.InnerException.StackTrace);

var codeInfo = ExceptionToHttpStatusMapper.Map(exception);

Expand Down Expand Up @@ -70,4 +73,4 @@ public static IApplicationBuilder UseExceptionHandlingMiddleware(
ExceptionToHttpStatusMapper.CustomMap = customMap;
return app.UseMiddleware<ExceptionHandlingMiddleware>();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ public class AddProductFixture: ApiWithEventsFixture<Startup>

public override async Task InitializeAsync()
{
var initializeResponse = await Post(new InitializeShoppingCartRequest(ClientId));
initializeResponse.EnsureSuccessStatusCode();
var openResponse = await Post(new OpenShoppingCartRequest(ClientId));
openResponse.EnsureSuccessStatusCode();

ShoppingCartId = await initializeResponse.GetResultFromJson<Guid>();
ShoppingCartId = await openResponse.GetResultFromJson<Guid>();

CommandResponse = await Post(
$"{ShoppingCartId}/products",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
using System.Net;
using Carts.Api.Requests.Carts;
using Carts.ShoppingCarts;
using Carts.ShoppingCarts.FinalizingCart;
using Carts.ShoppingCarts.GettingCartById;
using Core.Api.Testing;
using Core.Testing;
using FluentAssertions;
using Xunit;

namespace Carts.Api.Tests.ShoppingCarts.Canceling;

public class ConfirmShoppingCartFixture: ApiWithEventsFixture<Startup>
{
protected override string ApiUrl => "/api/ShoppingCarts";

public Guid ShoppingCartId { get; private set; }

public readonly Guid ClientId = Guid.NewGuid();

public HttpResponseMessage CommandResponse = default!;

public override async Task InitializeAsync()
{
var openResponse = await Post(new OpenShoppingCartRequest(ClientId));
openResponse.EnsureSuccessStatusCode();

ShoppingCartId = await openResponse.GetResultFromJson<Guid>();

CommandResponse = await Delete(
$"{ShoppingCartId}",
new RequestOptions { IfMatch = 1.ToString() }
);
}
}

public class ConfirmShoppingCartTests: IClassFixture<ConfirmShoppingCartFixture>
{
private readonly ConfirmShoppingCartFixture fixture;

public ConfirmShoppingCartTests(ConfirmShoppingCartFixture fixture)
{
this.fixture = fixture;
}

[Fact]
[Trait("Category", "Acceptance")]
public Task Put_Should_Return_OK()
{
var commandResponse = fixture.CommandResponse.EnsureSuccessStatusCode();
commandResponse.StatusCode.Should().Be(HttpStatusCode.OK);

return Task.CompletedTask;
}

[Fact]
[Trait("Category", "Acceptance")]
public async Task Put_Should_Confirm_ShoppingCart()
{
// prepare query
var query = $"{fixture.ShoppingCartId}";

//send query
var queryResponse = await fixture.Get(query, 30,
check: async response => (await response.GetResultFromJson<ShoppingCartDetails>()).Version == 2);

queryResponse.EnsureSuccessStatusCode();

var cartDetails = await queryResponse.GetResultFromJson<ShoppingCartDetails>();
cartDetails.Should().NotBeNull();
cartDetails.Id.Should().Be(fixture.ShoppingCartId);
cartDetails.Status.Should().Be(ShoppingCartStatus.Canceled);
cartDetails.ClientId.Should().Be(fixture.ClientId);
cartDetails.Version.Should().Be(2);

fixture.PublishedExternalEventsOfType<CartFinalized>();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ public class ConfirmShoppingCartFixture: ApiWithEventsFixture<Startup>

public override async Task InitializeAsync()
{
var initializeResponse = await Post(new InitializeShoppingCartRequest(ClientId));
initializeResponse.EnsureSuccessStatusCode();
var openResponse = await Post(new OpenShoppingCartRequest(ClientId));
openResponse.EnsureSuccessStatusCode();

ShoppingCartId = await initializeResponse.GetResultFromJson<Guid>();
ShoppingCartId = await openResponse.GetResultFromJson<Guid>();

CommandResponse = await Put(
$"{ShoppingCartId}/confirmation",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
using FluentAssertions;
using Xunit;

namespace Carts.Api.Tests.ShoppingCarts.Initializing;
namespace Carts.Api.Tests.ShoppingCarts.Opening;

public class InitializeShoppingCartFixture: ApiWithEventsFixture<Startup>
public class OpenShoppingCartFixture: ApiWithEventsFixture<Startup>
{
protected override string ApiUrl => "/api/ShoppingCarts";

Expand All @@ -19,15 +19,15 @@ public class InitializeShoppingCartFixture: ApiWithEventsFixture<Startup>

public override async Task InitializeAsync()
{
CommandResponse = await Post(new InitializeShoppingCartRequest(ClientId));
CommandResponse = await Post(new OpenShoppingCartRequest(ClientId));
}
}

public class InitializeShoppingCartTests: IClassFixture<InitializeShoppingCartFixture>
public class OpenShoppingCartTests: IClassFixture<OpenShoppingCartFixture>
{
private readonly InitializeShoppingCartFixture fixture;
private readonly OpenShoppingCartFixture fixture;

public InitializeShoppingCartTests(InitializeShoppingCartFixture fixture)
public OpenShoppingCartTests(OpenShoppingCartFixture fixture)
{
this.fixture = fixture;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ public class RemoveProductFixture: ApiWithEventsFixture<Startup>

public override async Task InitializeAsync()
{
var initializeResponse = await Post(new InitializeShoppingCartRequest(ClientId));
initializeResponse.EnsureSuccessStatusCode();
var openResponse = await Post(new OpenShoppingCartRequest(ClientId));
openResponse.EnsureSuccessStatusCode();

ShoppingCartId = await initializeResponse.GetResultFromJson<Guid>();
ShoppingCartId = await openResponse.GetResultFromJson<Guid>();

var addResponse = await Post(
$"{ShoppingCartId}/products",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
using Carts.Api.Requests.Carts;
using Carts.ShoppingCarts.CancelingCart;
using Carts.ShoppingCarts.ConfirmingCart;
using Carts.ShoppingCarts.GettingCartAtVersion;
using Carts.ShoppingCarts.GettingCartById;
using Carts.ShoppingCarts.GettingCartHistory;
using Carts.ShoppingCarts.GettingCarts;
using Carts.ShoppingCarts.InitializingCart;
using Carts.ShoppingCarts.OpeningCart;
using Carts.ShoppingCarts.Products;
using Microsoft.AspNetCore.Mvc;
using Core.Commands;
Expand Down Expand Up @@ -35,11 +36,11 @@ public ShoppingCartsController(
}

[HttpPost]
public async Task<IActionResult> InitializeCart([FromBody] InitializeShoppingCartRequest? request)
public async Task<IActionResult> OpenCart([FromBody] OpenShoppingCartRequest? request)
{
var cartId = idGenerator.New();

var command = InitializeShoppingCart.Create(
var command = OpenShoppingCart.Create(
cartId,
request?.ClientId
);
Expand Down Expand Up @@ -102,6 +103,20 @@ public async Task<IActionResult> ConfirmCart(Guid id)
return Ok();
}



[HttpDelete("{id}")]
public async Task<IActionResult> CancelCart(Guid id)
{
var command = CancelShoppingCart.Create(
id
);

await commandBus.Send(command);

return Ok();
}

[HttpGet("{id}")]
public async Task<ShoppingCartDetails> Get(Guid id)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace Carts.Api.Requests.Carts;

public record InitializeShoppingCartRequest(
public record OpenShoppingCartRequest(
Guid? ClientId
);

Expand Down
6 changes: 3 additions & 3 deletions Sample/ECommerce/Carts/Carts.Tests/Builders/CartBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ internal class CartBuilder
{
private Func<ShoppingCart> build = () => new ShoppingCart();

public CartBuilder Initialized()
public CartBuilder Opened()
{
var cartId = Guid.NewGuid();
var clientId = Guid.NewGuid();

// When
var cart = ShoppingCart.Initialize(
var cart = ShoppingCart.Open(
cartId,
clientId
);
Expand All @@ -31,4 +31,4 @@ public ShoppingCart Build()
((IAggregate)cart).DequeueUncommittedEvents();
return cart;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public void ForTentativeCart_ShouldSucceed()
// Given
var cart = CartBuilder
.Create()
.Initialized()
.Opened()
.Build();

// When
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,19 @@ public void ForValidParams_ShouldCreateCartWithPendingStatus()
var clientId = Guid.NewGuid();

// When
var cart = ShoppingCart.Initialize(
var cart = ShoppingCart.Open(
cartId,
clientId
);

// Then

cart
.IsInitializedCartWith(
.IsOpenedCartWith(
cartId,
clientId
)
.HasCartInitializedEventWith(
.HasCartOpenedEventWith(
cartId,
clientId
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Carts.ShoppingCarts;
using Carts.ShoppingCarts.InitializingCart;
using Carts.ShoppingCarts.OpeningCart;
using Carts.Tests.Extensions.Reservations;
using Carts.Tests.Stubs.Events;
using Carts.Tests.Stubs.Repositories;
Expand All @@ -8,7 +8,7 @@

namespace Carts.Tests.Carts.InitializingCart;

public class InitializeCardCommandHandlerTests
public class OpenShoppingCardCommandHandlerTests
{
[Fact]
public async Task ForInitCardCommand_ShouldAddNewCart()
Expand All @@ -17,12 +17,12 @@ public async Task ForInitCardCommand_ShouldAddNewCart()
var repository = new FakeRepository<ShoppingCart>();
var scope = new DummyMartenAppendScope();

var commandHandler = new HandleInitializeCart(
var commandHandler = new HandleOpenShoppingCart(
repository,
scope
);

var command = InitializeShoppingCart.Create(Guid.NewGuid(), Guid.NewGuid());
var command = OpenShoppingCart.Create(Guid.NewGuid(), Guid.NewGuid());

// When
await commandHandler.Handle(command, CancellationToken.None);
Expand All @@ -33,11 +33,11 @@ public async Task ForInitCardCommand_ShouldAddNewCart()
var cart = repository.Aggregates.Values.Single();

cart
.IsInitializedCartWith(
.IsOpenedCartWith(
command.CartId,
command.ClientId
)
.HasCartInitializedEventWith(
.HasCartOpenedEventWith(
command.CartId,
command.ClientId
);
Expand Down
Loading