コード例 #1
0
        public async Task <IActionResult> Edit(int?id)
        {
            string[] allCategories = Context.Items.Select(i => i.Category).Distinct().ToArray();

            if (id == null)
            {
                return(NotFound());
            }

            Item item = await Context.Items.FindAsync(id);

            if (item == null)
            {
                return(NotFound());
            }

            item.Manufacturer = item.Manufacturer.Trim().FirstCharToUpper();

            var viewModel = new CreateEditItemViewModel()
            {
                Item       = item,
                Categories = allCategories,
            };

            return(View(viewModel));
        }
コード例 #2
0
        public async Task <IActionResult> Create(CreateEditItemViewModel model)
        {
            try
            {
                model.Item.Manufacturer = model.Item.Manufacturer.Trim().FirstCharToUpper();
                string uploadFolder = await UploadImages(model);

                await Context.Items.AddAsync(model.Item);

                await Context.SaveChangesAsync();

                #region TwitterPost

                if (model.PublishItemFlag)
                {
                    PublishTweet(model.Item, uploadFolder);
                }

                #endregion

                _flashMessage.Confirmation($"Product '{model.Item.Title}' created with price of ${model.Item.Price}");
            }
            catch (Exception e)
            {
                _flashMessage.Danger("Product could not be created");
                _logger.LogError($"Product# '{model.Item.Title}' could not be created, ex: {e}");
            }

            return(RedirectToAction("ListItems", "Administration"));
        }
コード例 #3
0
        private static async Task CopyImage(CreateEditItemViewModel model, string uploadFolder, int imageNumber)
        {
            Directory.CreateDirectory(uploadFolder);
            string uniqueFileName = $"{imageNumber}.jpg";
            string filePath       = Path.Combine(uploadFolder, uniqueFileName);
            var    fileStream     = new FileStream(filePath, FileMode.Create);
            await model.File1.CopyToAsync(fileStream);

            fileStream.Close();
        }
コード例 #4
0
        public ActionResult Edit(CreateEditItemViewModel item)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.View(item));
            }

            this.storeService.EditItem(item.Id, item.ItemName, item.Description, item.DestinationFor, item.ImageUrl, item.Brand, item.Price.ToString());

            return(this.RedirectToAction("Details", new { id = item.Id }));
        }
コード例 #5
0
        public ActionResult Create(CreateEditItemViewModel item)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.View(item));
            }

            this.storeService.AddNewItem(item.ItemName, item.Description, item.DestinationFor, item.ImageUrl, item.Brand, item.Price.ToString());

            return(this.RedirectToAction("Index"));
        }
コード例 #6
0
        public void RedirectToIndexAction_WhenParamsAreValid()
        {
            // Arrange
            var storeServiceMock   = new Mock <IStoreService>();
            var mappingServiceMock = new Mock <IMappingService>();
            var utilsMock          = new Mock <IUtilitiesService>();

            var controller = new StoreItemsController(storeServiceMock.Object, mappingServiceMock.Object, utilsMock.Object);

            var model = new CreateEditItemViewModel();

            // Act & Assert
            controller.WithCallTo(x => x.Create(model))
            .ShouldRedirectTo(x => x.Index(null, null));
        }
コード例 #7
0
        public void RedirectToAction_WhenParamsAreValid()
        {
            // Arrange
            var storeServiceMock   = new Mock <IStoreService>();
            var mappingServiceMock = new Mock <IMappingService>();
            var utilsMock          = new Mock <IUtilitiesService>();

            var controller = new StoreItemsController(storeServiceMock.Object, mappingServiceMock.Object, utilsMock.Object);

            var model = new CreateEditItemViewModel();

            storeServiceMock.Setup(x => x.EditItem(It.IsAny <Guid>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()));

            // Act & Assert
            controller.WithCallTo(x => x.Edit(model))
            .ShouldRedirectTo(x => x.Details(model.Id));
        }
コード例 #8
0
        public async Task <IActionResult> Edit(CreateEditItemViewModel model)
        {
            Item itemOnDb = await Context.Items.FirstOrDefaultAsync(i => i.Id == model.Item.Id);

            if (itemOnDb == null)
            {
                _flashMessage.Danger("Item could not be found on DB");

                return(RedirectToAction("ListItems", "Administration"));
            }


            var currentUser = await GetCurrentUserAsync();

            IList <string> userRoles = await UserManager.GetRolesAsync(currentUser);

            if (!userRoles.Any(r => r.Equals("Admin")))
            {
                _flashMessage.Danger("Your changes were not saved.\n You do not have the right permissions to edit items.");
                return(RedirectToAction("ListItems", "Administration"));
            }

            try
            {
                itemOnDb.Title        = model.Item.Title;
                itemOnDb.Description  = model.Item.Description;
                itemOnDb.Manufacturer = model.Item.Manufacturer.Trim().FirstCharToUpper();
                itemOnDb.Price        = model.Item.Price;
                itemOnDb.Category     = model.Item.Category;
                itemOnDb.Active       = model.Item.Active;

                await UploadImages(model);

                Context.Update(itemOnDb);
                await Context.SaveChangesAsync();

                _flashMessage.Confirmation("Item information has been updated");
            }
            catch (Exception e)
            {
                _flashMessage.Danger("Product could not be updated");
                _logger.LogError($"Product# '{model.Item.Id}' could not be updated, ex: {e}");
            }

            return(RedirectToAction("ListItems", "Administration"));
        }
コード例 #9
0
        public void CallAddNewItemMethod_WhenParamsAreValid()
        {
            // Arrange
            var storeServiceMock   = new Mock <IStoreService>();
            var mappingServiceMock = new Mock <IMappingService>();
            var utilsMock          = new Mock <IUtilitiesService>();

            var controller = new StoreItemsController(storeServiceMock.Object, mappingServiceMock.Object, utilsMock.Object);

            storeServiceMock.Setup(x => x.AddNewItem(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()));
            var model = new CreateEditItemViewModel();

            // Act
            controller.Create(model);

            // Assert
            storeServiceMock.Verify(x => x.AddNewItem(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()), Times.Once);
        }
コード例 #10
0
        public void ReturnDefaultView_WhenModelStateIsInvalid()
        {
            // Arrange
            var storeServiceMock   = new Mock <IStoreService>();
            var mappingServiceMock = new Mock <IMappingService>();
            var utilsMock          = new Mock <IUtilitiesService>();

            var controller = new StoreItemsController(storeServiceMock.Object, mappingServiceMock.Object, utilsMock.Object);

            controller.ViewData.ModelState.AddModelError("adasd", "asda");

            var model = new CreateEditItemViewModel();

            // Act & Assert
            controller.WithCallTo(x => x.Create(model))
            .ShouldRenderDefaultView()
            .WithModel <CreateEditItemViewModel>(x => x == model);
        }
コード例 #11
0
        public void ReturnDefualtViewWithRespectiveViewModel_WhenParamsAreValid()
        {
            // Arrange
            var storeServiceMock   = new Mock <IStoreService>();
            var mappingServiceMock = new Mock <IMappingService>();
            var utilsMock          = new Mock <IUtilitiesService>();

            var controller = new StoreItemsController(storeServiceMock.Object, mappingServiceMock.Object, utilsMock.Object);

            var item = new StoreItem();

            storeServiceMock.Setup(x => x.GetStoreItemById(It.IsAny <Guid>())).Returns(item);

            var model = new CreateEditItemViewModel();

            mappingServiceMock.Setup(x => x.Map <CreateEditItemViewModel>(item)).Returns(model);

            // Act & Assert
            controller.WithCallTo(x => x.Edit(Guid.NewGuid()))
            .ShouldRenderDefaultView()
            .WithModel <CreateEditItemViewModel>(x => x == model);
        }
コード例 #12
0
        private async Task <string> UploadImages(CreateEditItemViewModel model)
        {
            string directoryName = model.Item.Title.Trim().Replace(" ", string.Empty);
            string uploadFolder  = Path.Combine(_hostingEnvironment.WebRootPath, "images", "items", directoryName);

            if (model.File1 != null)
            {
                await CopyImage(model, uploadFolder, 1);

                model.Item.ImageUrl = $"images/items/{directoryName}";
            }

            if (model.File2 != null)
            {
                await CopyImage(model, uploadFolder, 1);
            }

            if (model.File3 != null)
            {
                await CopyImage(model, uploadFolder, 1);
            }

            return(uploadFolder);
        }