public async Task <Guid> Handle(BuySubscriptionCommand command, CancellationToken cancellationToken)
        {
            var priceList = await PriceListProvider.GetPriceList(_sqlConnectionFactory.GetOpenConnection());

            var subscription = SubscriptionPayment.Buy(
                _payerContext.PayerId,
                SubscriptionPeriod.Of(command.SubscriptionTypeCode),
                command.CountryCode,
                MoneyValue.Of(command.Value, command.Currency),
                priceList);

            _aggregateStore.AppendChanges(subscription);

            return(subscription.Id);
        }
        public void BuySubscriptionRenewal_WhenPriceDoesNotExist_IsNotPossible()
        {
            // Arrange
            var subscriptionPaymentTestData = CreateSubscriptionPaymentTestData();

            // Act & Assert
            AssertBrokenRule <PriceOfferMustMatchPriceInPriceListRule>(() =>
            {
                SubscriptionPayment.Buy(
                    subscriptionPaymentTestData.PayerId,
                    SubscriptionPeriod.Month,
                    "PL",
                    MoneyValue.Of(50, "PLN"),
                    subscriptionPaymentTestData.PriceList);
            });
        }
        public void BuySubscription_IsSuccessful()
        {
            // Arrange
            var subscriptionPaymentTestData = CreateSubscriptionPaymentTestData();

            // Act
            var subscriptionPayment = SubscriptionPayment.Buy(
                subscriptionPaymentTestData.PayerId,
                SubscriptionPeriod.Month,
                "PL",
                MoneyValue.Of(60, "PLN"),
                subscriptionPaymentTestData.PriceList);

            // Assert
            AssertPublishedDomainEvent <SubscriptionPaymentCreatedDomainEvent>(subscriptionPayment);
        }