public async Task CreateDish_RecipeAlreadyAdded_ExceptionThrown()
        {
            IServiceCollection services = new ServiceCollection();

            services.AddServingDomain()
            .AddServingApplication()
            .AddServingInfrastructure("Server=.;Database=RestaurantManagementSystem;Trusted_Connection=True;MultipleActiveResultSets=true", "S0M3 M4G1C UN1C0RNS G3N3R4T3D TH1S S3CR3T");
            var serviceProviderFactory = new DefaultServiceProviderFactory();

            IServiceProvider serviceProvider = serviceProviderFactory.CreateServiceProvider(services);

            IMediator Mediator = serviceProvider.GetService <IMediator>();

            var createDishCommand = new CreateDishCommand();

            createDishCommand.Description = "Vkusno";
            createDishCommand.Name        = "Mnogo Vkusna Mandja";
            createDishCommand.RecipeId    = 2;
            createDishCommand.Price       = new Money(10);
            await Mediator.Send(createDishCommand);

            createDishCommand             = new CreateDishCommand();
            createDishCommand.Description = "Vkusno";
            createDishCommand.Name        = "Oshte Po Vkusna Mandja";
            createDishCommand.RecipeId    = 2;
            createDishCommand.Price       = new Money(10);
            await Assert.ThrowsExceptionAsync <InvalidDishException>(() => Mediator.Send(createDishCommand));
        }
        public async Task CreateDish_NewDish_SuccessfullRead()
        {
            IServiceCollection services = new ServiceCollection();

            services.AddServingDomain()
            .AddServingApplication()
            .AddServingInfrastructure("Server=.;Database=RestaurantManagementSystem;Trusted_Connection=True;MultipleActiveResultSets=true", "S0M3 M4G1C UN1C0RNS G3N3R4T3D TH1S S3CR3T");
            var serviceProviderFactory = new DefaultServiceProviderFactory();

            IServiceProvider serviceProvider = serviceProviderFactory.CreateServiceProvider(services);

            IMediator Mediator = serviceProvider.GetService <IMediator>();

            var createDishCommand = new CreateDishCommand();

            createDishCommand.Description = "Vkusno";
            createDishCommand.Name        = "Vkusna Mandja";
            createDishCommand.RecipeId    = 1;
            createDishCommand.Price       = new Money(10);
            var createDishCommandOutput = await Mediator.Send(createDishCommand);

            var getDishesQuery = new DishesQuery();
            var dbDish         = (await Mediator.Send(getDishesQuery)).Dishes.FirstOrDefault(dish => dish.Id == createDishCommandOutput.DishId);

            Assert.AreEqual(dbDish.Id, createDishCommandOutput.DishId);
            Assert.AreEqual(dbDish.Description, createDishCommand.Description);
            Assert.AreEqual(dbDish.Name, createDishCommand.Name);
            Assert.AreEqual(dbDish.Price, createDishCommand.Price);
            Assert.AreEqual(dbDish.RecipeId, createDishCommand.RecipeId);
        }
        public async Task <ActionResult> Post(CreateDishCommand dish, CancellationToken cancellationToken)
        {
            var currentDish = await this.db
                              .Dishes
                              .FirstOrDefaultAsync(d => d.ExternalId == dish.ExternalId && d.CategoryId == dish.CategoryId && d.IsActive, cancellationToken)
                              .ConfigureAwait(false);

            if (currentDish != null)
            {
                return(this.Conflict("Такое блюдо уже существует!"));
            }

            var currentCategory = await this.db
                                  .Categories
                                  .FindAsync(dish.CategoryId)
                                  .ConfigureAwait(false);

            if (currentCategory == null)
            {
                return(this.BadRequest("Категория не найдена!"));
            }

            var mappedDish = this.mapper.Map <Dish>(dish);

            mappedDish.Category = currentCategory;
            var addedDish = await this.db.AddAsync(mappedDish, cancellationToken)
                            .ConfigureAwait(false);

            var result = await this.db.SaveChangesAsync(cancellationToken).ConfigureAwait(false);

            return(result > 0
                ? CreatedAtAction(nameof(this.Get), new { id = addedDish.Entity.Id }, new { id = addedDish.Entity.Id })
                : throw new InvalidOperationException("Не удалось добавить блюдо!"));
        }
        public async Task CreateOrder_NewOrder_SuccessfullRead()
        {
            IServiceCollection services = new ServiceCollection();

            services.AddServingDomain()
            .AddServingApplication()
            .AddServingInfrastructure("Server=.;Database=RestaurantManagementSystem;Trusted_Connection=True;MultipleActiveResultSets=true", "S0M3 M4G1C UN1C0RNS G3N3R4T3D TH1S S3CR3T")
            .AddTransient <ICurrentUser, CurrentUserServiceMock>();
            var serviceProviderFactory = new DefaultServiceProviderFactory();

            IServiceProvider serviceProvider = serviceProviderFactory.CreateServiceProvider(services);

            IMediator Mediator = serviceProvider.GetService <IMediator>();

            var createDishCommand = new CreateDishCommand();

            createDishCommand.Description = "Vkusno";
            createDishCommand.Name        = "Mnogo Vkusna Mandja";
            createDishCommand.RecipeId    = 3;
            createDishCommand.Price       = new Money(10);
            await Mediator.Send(createDishCommand);

            createDishCommand             = new CreateDishCommand();
            createDishCommand.Description = "Vkusno";
            createDishCommand.Name        = "Oshte Po Vkusna Mandja";
            createDishCommand.RecipeId    = 4;
            createDishCommand.Price       = new Money(10);
            await Mediator.Send(createDishCommand);

            var createOrderCommand = new CreateOrderCommand();

            createOrderCommand.TableId    = 5;
            createOrderCommand.AssigneeId = "Goshko";
            createOrderCommand.Items.Add(new OrderItemInputModel(1, "Bez Kurkuma"));
            createOrderCommand.Items.Add(new OrderItemInputModel(2));
            var createOrderCommandOutput = await Mediator.Send(createOrderCommand);

            var getOrdersQuery = new OrdersQuery();
            var dbOrder        = (await Mediator.Send(getOrdersQuery)).Orders.FirstOrDefault(order => order.Id == createOrderCommandOutput.OrderId);

            Assert.AreEqual(dbOrder.Id, createOrderCommandOutput.OrderId);
            Assert.AreEqual(dbOrder.TableId, createOrderCommand.TableId);
            Assert.AreEqual(dbOrder.AssigneeId, createOrderCommand.AssigneeId);
            foreach (var item in dbOrder.Items)
            {
                var commandItem = createOrderCommand.Items.FirstOrDefault(commandItem => commandItem.DishId == item.Dish.Id);
                Assert.AreEqual(item.Dish.Id, commandItem.DishId);
                Assert.AreEqual(item.Note, commandItem.Note);
            }
        }
예제 #5
0
        public async Task <IActionResult> CreateAsync([FromBody] CreateDishCommand command)
        {
            var response = await _mediator.Send(command);

            return(JsonResult(response));
        }
예제 #6
0
 public async Task <ActionResult <CreateDishOutputModel> > CreateDish(CreateDishCommand createDishCommand)
 {
     return(await Send(createDishCommand));
 }