public async Task HandleAsync_WithValidData_ShouldStoreItem()
        {
            // Arrange
            var local   = new LocalFixture();
            var handler = local.CreateCommandHandler();

            IStoreItem             storeItem    = local.StoreItemFixture.CreateValid();
            IStoreItemAvailability availability = local.CommonFixture.ChooseRandom(storeItem.Availabilities);

            var command = local.CreateCommand(availability);

            local.StoreItemFactoryMock.SetupCreate(command.TemporaryItemCreation, storeItem);

            // Act
            var result = await handler.HandleAsync(command, default);

            // Assert
            using (new AssertionScope())
            {
                result.Should().BeTrue();
                local.AvailabilityValidationServiceMock.VerifyValidateOnce(
                    command.TemporaryItemCreation.Availability.ToMonoList());
                local.ItemRepositoryMock.VerifyStoreAsyncOnce(storeItem);
            }
        }
            public CreateTemporaryItemCommand CreateCommand(IStoreItemAvailability availability)
            {
                var fixture = CommonFixture.GetNewFixture();

                fixture.ConstructorArgumentFor <TemporaryItemCreation, IStoreItemAvailability>("availability", availability);

                return(fixture.Create <CreateTemporaryItemCommand>());
            }
 public void SetupCreate(StoreId storeId, float price, SectionId sectionId,
                         IStoreItemAvailability returnValue)
 {
     mock.Setup(i => i.Create(
                    It.Is <StoreId>(id => id == storeId),
                    It.Is <float>(p => p == price),
                    It.Is <SectionId>(id => id == sectionId)))
     .Returns(returnValue);
 }
 private void ValidateItemIsAvailableAtStore(IStoreItem storeItem, StoreId storeId,
                                             out IStoreItemAvailability availability)
 {
     availability = storeItem.Availabilities.FirstOrDefault(av => av.StoreId == storeId);
     if (availability == null)
     {
         throw new DomainException(new ItemAtStoreNotAvailableReason(storeItem.Id, storeId));
     }
 }
 private AvailableAt ToAvailableAt(IStoreItemAvailability availability, IStoreItem source)
 {
     return(new AvailableAt()
     {
         StoreId = availability.StoreId.Value,
         Price = availability.Price,
         ItemId = source.Id?.Value ?? 0,
         DefaultSectionId = availability.DefaultSectionId.Value
     });
 }
Пример #6
0
        public TemporaryItemCreation(Guid clientSideId, string name, IStoreItemAvailability availability)
        {
            if (string.IsNullOrWhiteSpace(name))
            {
                throw new ArgumentException($"'{nameof(name)}' cannot be null or whitespace", nameof(name));
            }

            ClientSideId = clientSideId;
            Name         = name;
            Availability = availability ?? throw new ArgumentNullException(nameof(availability));
        }
        public async Task <IEnumerable <ItemSearchReadModel> > ConvertAsync(IEnumerable <IStoreItem> items,
                                                                            IStore store, CancellationToken cancellationToken)
        {
            var itemCategoryIds = items
                                  .Where(i => i.ItemCategoryId != null)
                                  .Select(i => i.ItemCategoryId)
                                  .Distinct();
            var itemCategoryDict = (await itemCategoryRepository.FindByAsync(itemCategoryIds, cancellationToken))
                                   .ToDictionary(i => i.Id);

            var manufacturerIds = items
                                  .Where(i => i.ManufacturerId != null)
                                  .Select(i => i.ManufacturerId)
                                  .Distinct();
            var manufaturerDict = (await manufacturerRepository.FindByAsync(manufacturerIds, cancellationToken))
                                  .ToDictionary(m => m.Id);

            return(items
                   .Select(item =>
            {
                IManufacturer manufacturer = item.ManufacturerId == null ? null : manufaturerDict[item.ManufacturerId];
                IItemCategory itemCategory = item.ItemCategoryId == null ? null : itemCategoryDict[item.ItemCategoryId];

                IStoreItemAvailability storeAvailability = item.Availabilities
                                                           .Single(av => av.StoreId == store.Id);

                var section = store.Sections.Single(s => s.Id == storeAvailability.DefaultSectionId);

                return new ItemSearchReadModel(
                    item.Id,
                    item.Name,
                    item.QuantityType.GetAttribute <DefaultQuantityAttribute>().DefaultQuantity,
                    storeAvailability.Price,
                    manufacturer?.ToReadModel(),
                    itemCategory?.ToReadModel(),
                    section.ToReadModel());
            }));
        }
 public static StoreItemAvailabilityReadModel ToReadModel(this IStoreItemAvailability model, IStore store,
                                                          IStoreSection section)
 {
     return(new StoreItemAvailabilityReadModel(store.ToStoreItemStoreReadModel(), model.Price,
                                               section.ToReadModel()));
 }