private async Task When(SubscriptionCreatedDomainEvent subscriptionCreated) { var period = SubscriptionPeriod.GetName(subscriptionCreated.SubscriptionPeriodCode); await _connection.ExecuteScalarAsync("INSERT INTO payments.SubscriptionDetails " + "([Id], [Period], [Status], [CountryCode], [ExpirationDate]) " + "VALUES (@SubscriptionId, @Period, @Status, @CountryCode, @ExpirationDate)", new { subscriptionCreated.SubscriptionId, period, subscriptionCreated.Status, subscriptionCreated.CountryCode, subscriptionCreated.ExpirationDate }); }
private async Task When(SubscriptionRenewedDomainEvent subscriptionRenewed) { var period = SubscriptionPeriod.GetName(subscriptionRenewed.SubscriptionPeriodCode); await _connection.ExecuteScalarAsync("UPDATE payments.SubscriptionDetails " + "SET " + "[Status] = @Status, " + "[ExpirationDate] = @ExpirationDate, " + "[Period] = @Period " + "WHERE [Id] = @SubscriptionId", new { subscriptionRenewed.SubscriptionId, subscriptionRenewed.Status, subscriptionRenewed.ExpirationDate, period }); }
private async Task When(SubscriptionPaymentCreatedDomainEvent subscriptionPaymentCreated) { string period = SubscriptionPeriod.GetName(subscriptionPaymentCreated.SubscriptionPeriodCode); await _connection.ExecuteScalarAsync( "INSERT INTO payments.SubscriptionPayments " + "([PaymentId], [PayerId], [Type], [Status], [Period], [Date], " + "[SubscriptionId], [MoneyValue], [MoneyCurrency]) " + "VALUES (@SubscriptionPaymentId, @PayerId, @Type, @Status, @Period, " + "@OccurredOn, NULL, @Value, @Currency)", new { subscriptionPaymentCreated.SubscriptionPaymentId, subscriptionPaymentCreated.PayerId, Type = "Initial Payment", subscriptionPaymentCreated.Status, period, subscriptionPaymentCreated.OccurredOn, subscriptionPaymentCreated.Value, subscriptionPaymentCreated.Currency }); }
public async Task Subscription_Buy_ThenRenew_ThenExpire_Test() { await PriceListHelper.AddPriceListItems(PaymentsModule); DateTime referenceDate = new DateTime(2020, 6, 15); SystemClock.Set(referenceDate); var subscriptionPaymentId = await PaymentsModule.ExecuteCommandAsync( new BuySubscriptionCommand( "Month", "PL", 60, "PLN")); var subscriptionPayments = await GetEventually( new GetSubscriptionPaymentsProbe(PaymentsModule, ExecutionContext.UserId, x => true), 10000); var subscriptionPayment = subscriptionPayments.Single(x => x.PaymentId == subscriptionPaymentId); Assert.That(subscriptionPayment.Status, Is.EqualTo(SubscriptionPaymentStatus.WaitingForPayment.Code)); await PaymentsModule.ExecuteCommandAsync( new MarkSubscriptionPaymentAsPaidCommand(subscriptionPaymentId)); subscriptionPayments = await GetEventually( new GetSubscriptionPaymentsProbe(PaymentsModule, ExecutionContext.UserId, x => x.Any(y => y.Status == SubscriptionPaymentStatus.Paid.Code && y.SubscriptionId.HasValue)), 10000); subscriptionPayment = subscriptionPayments.Single(x => x.PaymentId == subscriptionPaymentId); var subscriptionId = subscriptionPayment.SubscriptionId.GetValueOrDefault(); var subscription = await GetEventually( new GetSubscriptionDetailsProbe( PaymentsModule, subscriptionId, x => x.SubscriptionId == subscriptionId && x.Status == SubscriptionStatus.Active.Code && x.Period == SubscriptionPeriod.Month.Code), 5000); Assert.That(subscriptionPayments[0].Status, Is.EqualTo(SubscriptionPaymentStatus.Paid.Code)); Assert.That(subscription.ExpirationDate, Is.EqualTo(referenceDate.AddMonths(1))); var subscriptionRenewalPaymentId = await PaymentsModule.ExecuteCommandAsync( new BuySubscriptionRenewalCommand( subscriptionId, "HalfYear", "PL", 320, "PLN")); subscriptionPayments = await GetEventually( new GetSubscriptionPaymentsProbe(PaymentsModule, ExecutionContext.UserId, x => true), 10000); var renewalPayment = subscriptionPayments .Single(x => x.PaymentId == subscriptionRenewalPaymentId); Assert.That(renewalPayment.Status, Is.EqualTo(SubscriptionRenewalPaymentStatus.WaitingForPayment.Code)); await PaymentsModule.ExecuteCommandAsync( new MarkSubscriptionRenewalPaymentAsPaidCommand(subscriptionRenewalPaymentId)); subscriptionPayments = await GetEventually( new GetSubscriptionPaymentsProbe(PaymentsModule, ExecutionContext.UserId, x => x.Any(y => y.PaymentId == subscriptionRenewalPaymentId)), 10000); renewalPayment = subscriptionPayments .Single(x => x.PaymentId == subscriptionRenewalPaymentId); subscription = await GetEventually( new GetSubscriptionDetailsProbe( PaymentsModule, subscriptionId, x => x.SubscriptionId == subscriptionId && x.Period == SubscriptionPeriod.GetName(SubscriptionPeriod.HalfYear.Code) && x.Status == SubscriptionStatus.Active.Code ), 5000); Assert.That(renewalPayment.Status, Is.EqualTo(SubscriptionRenewalPaymentStatus.Paid.Code)); Assert.That(subscription.ExpirationDate, Is.EqualTo(referenceDate.AddMonths(7))); SystemClock.Set(referenceDate.AddMonths(7).AddDays(1)); await PaymentsModule.ExecuteCommandAsync(new ExpireSubscriptionsCommand()); subscription = await GetEventually( new GetSubscriptionDetailsProbe( PaymentsModule, subscriptionId, x => x.SubscriptionId == subscriptionId && x.Status == SubscriptionStatus.Expired.Code), 10000); Assert.That(subscription, Is.Not.Null); }