示例#1
0
        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
            });
        }
示例#2
0
        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
            });
        }
示例#3
0
        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
            });
        }
示例#4
0
        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);
        }