Пример #1
0
        public async Task When_adding_card_details()
        {
            using (var uow = new CardDetailsContext(_options))
            {
                //arrange
                var cardDetails = new AccountCardDetails(
                    Guid.NewGuid(),
                    "Jack TOrrance",
                    "4104231121998973",
                    "517",
                    "3 Kennebunkport Avenue",
                    "OH");

                var repository = new AccountCardDetailsRepositoryAsync(new EFUnitOfWork(uow));

                //act
                await repository.AddAsync(cardDetails);

                var savedRecord = await repository.GetAsync(cardDetails.AccountId);

                //assert
                Assert.That(savedRecord.AccountId, Is.EqualTo(cardDetails.AccountId));
                Assert.That(savedRecord.Name, Is.EqualTo(cardDetails.Name));
                Assert.That(savedRecord.CardNumber, Is.EqualTo(cardDetails.CardNumber));
                Assert.That(savedRecord.CardSecurityCode, Is.EqualTo(cardDetails.CardSecurityCode));
                Assert.That(savedRecord.FirstLineOfAddress, Is.EqualTo(cardDetails.FirstLineOfAddress));
                Assert.That(savedRecord.ZipCode, Is.EqualTo(cardDetails.ZipCode));
            }
        }
        public async Task HandleAsync(UpsertAccountEvent @event, CancellationToken cancellationToken = new CancellationToken())
        {
            using (var uow = new CardDetailsContext(_options))
            {
                var billingAddress = @event.Addresses.FirstOrDefault(addr => addr.AddressType == "Billing");
                if (billingAddress == null)
                {
                    throw new ArgumentException("Must have a billing address", "@event");
                }

                var repository = new AccountCardDetailsRepositoryAsync(new EFUnitOfWork(uow));

                var cardDetails = new AccountCardDetails(
                    accountId: Guid.Parse(@event.AccountId),
                    name: @event.Name.FirstName + " " + @event.Name.LastName,
                    cardNumber: @event.CardDetails.CardNumber,
                    cardSecurityCode: @event.CardDetails.CardSecurityCode,
                    firstLineOfAddress: billingAddress.FistLineOfAddress,
                    zipCode: billingAddress.ZipCode
                    );

                cardDetails.Version = @event.Version;

                await repository.UpsertAsync(cardDetails);
            }
        }
Пример #3
0
        public async Task When_updating_an_account()
        {
            using (var uow = new CardDetailsContext(_options))
            {
                //arrange
                var cardDetails = new AccountCardDetails(
                    accountId: Guid.NewGuid(),
                    name: "Jack Torrance",
                    cardNumber: "4104231121998973",
                    cardSecurityCode: "517",
                    firstLineOfAddress: "Overlook Hotel",
                    zipCode: "40125"
                    );

                var repository = new AccountCardDetailsRepositoryAsync(new EFUnitOfWork(uow));

                await repository.AddAsync(cardDetails);

                var @event = new UpsertAccountEvent()
                {
                    AccountId = cardDetails.AccountId.ToString(),
                    Name      = new Name {
                        FirstName = "Charles", LastName = "Grady"
                    },
                    Addresses = new List <Address>
                    {
                        new Address
                        {
                            FistLineOfAddress = "Overlook Hotel",
                            AddressType       = "Billing",
                            State             = "CO",
                            ZipCode           = "80517"
                        }
                    },
                    ContactDetails = new ContactDetails
                    {
                        Email = "*****@*****.**", TelephoneNumber = "666-6666"
                    },
                    CardDetails = new CardDetails {
                        CardNumber = "4172097052597788", CardSecurityCode = "459"
                    },
                    Version = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 }
                };

                var handler = new UpsertAccountEventHandler(_options);

                //act
                await handler.HandleAsync(@event);

                var accountCardDetails = await repository.GetAsync(Guid.Parse(@event.AccountId));

                //assert
                Assert.That(accountCardDetails.AccountId, Is.EqualTo(Guid.Parse(@event.AccountId)));
                Assert.That(accountCardDetails.Name, Is.EqualTo(@event.Name.FirstName + " " + @event.Name.LastName));
                var sourceAddress = @event.Addresses.First(addr => addr.AddressType == "Billing");
                Assert.That(accountCardDetails.FirstLineOfAddress, Is.EqualTo(sourceAddress.FistLineOfAddress));
                Assert.That(accountCardDetails.ZipCode, Is.EqualTo(sourceAddress.ZipCode));
            }
        }
Пример #4
0
        private static void EnsureDatabaseCreated(IServiceProvider serviceProvider)
        {
            var contextOptions = serviceProvider.GetService <DbContextOptions <CardDetailsContext> >();

            using (var context = new CardDetailsContext(contextOptions))
            {
                context.Database.EnsureCreated();
            }
        }
Пример #5
0
        public void Initialise()
        {
            _options = new DbContextOptionsBuilder <CardDetailsContext>()
                       .UseMySql("Server=localhost;Uid=root;Pwd=root;Database=CardDetails")
                       .Options;

            using (var context = new CardDetailsContext(_options))
            {
                context.Database.EnsureCreated();
            }
        }
Пример #6
0
        public async Task When_adding_an_account()
        {
            using (var uow = new CardDetailsContext(_options))
            {
                //arrange
                var handler = new UpsertAccountEventHandler(_options);
                var @event  = new UpsertAccountEvent()
                {
                    AccountId = Guid.NewGuid().ToString(),
                    Name      = new Name {
                        FirstName = "Jack", LastName = "Torrance"
                    },
                    Addresses = new List <Address>
                    {
                        new Address
                        {
                            FistLineOfAddress = "Overlook Hotel",
                            AddressType       = "Billing",
                            State             = "CO",
                            ZipCode           = "80517"
                        },
                        new Address
                        {
                            FistLineOfAddress = "3 Kennebunkport Avenue",
                            AddressType       = "Home",
                            State             = "MN",
                            ZipCode           = "40125"
                        }
                    },
                    ContactDetails = new ContactDetails
                    {
                        Email = "*****@*****.**", TelephoneNumber = "666-6666"
                    },
                    CardDetails = new CardDetails {
                        CardNumber = "4104231121998973", CardSecurityCode = "517"
                    },
                    Version = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 }
                };

                //act
                await handler.HandleAsync(@event);

                var repository         = new AccountCardDetailsRepositoryAsync(new EFUnitOfWork(uow));
                var accountCardDetails = await repository.GetAsync(Guid.Parse(@event.AccountId));

                //assert
                Assert.That(accountCardDetails.AccountId, Is.EqualTo(Guid.Parse(@event.AccountId)));
                Assert.That(accountCardDetails.Name, Is.EqualTo(@event.Name.FirstName + " " + @event.Name.LastName));
                var sourceAddress = @event.Addresses.First(addr => addr.AddressType == "Billing");
                Assert.That(accountCardDetails.FirstLineOfAddress, Is.EqualTo(sourceAddress.FistLineOfAddress));
                Assert.That(accountCardDetails.ZipCode, Is.EqualTo(sourceAddress.ZipCode));
            }
        }
Пример #7
0
        public override GuestRoomBookingMade Handle(GuestRoomBookingMade @event)
        {
            AccountCardDetails cardDetails;

            using (var uow = new CardDetailsContext(_options))
            {
                var repo = new AccountCardDetailsRepositoryAsync(new EFUnitOfWork(uow));

                cardDetails = repo.GetAsync(Guid.Parse(@event.AccountId)).GetAwaiter().GetResult();

                if (cardDetails == null)
                {
                    _logger.LogError("Unable to find card details for account: {0}", @event.AccountId);
                    throw new InvalidOperationException(
                              $"Unable to find card details for account {cardDetails.AccountId}");
                }
            }

            TakePayment(cardDetails);

            return(base.Handle(@event));
        }