コード例 #1
0
        public void TestUpdateAddPromotionWithMessageOk()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <EfCoreContext>();

            using (var context = new EfCoreContext(options))
            {
                context.Database.EnsureCreated();
                context.SeedDatabaseFourBooks();

                //ATTEMPT
                var utData  = context.SetupSingleDtoAndEntities <AddRemovePromotionDto>();
                var service = new CrudServices(context, utData.Wrapped);

                //ATTEMPT
                var dto = new AddRemovePromotionDto {
                    BookId = 1, ActualPrice = 1, PromotionalText = "Really Cheap!"
                };
                service.UpdateAndSave(dto, nameof(Book.AddPromotion));

                //VERIFY
                service.IsValid.ShouldBeTrue(service.GetAllErrors());
                service.Message.ShouldEqual("The book's new price is $1.00.");
            }
        }
コード例 #2
0
        public void TestAddPromotionBookWithError()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <EfCoreContext>();

            using (var context = new EfCoreContext(options))
            {
                context.Database.EnsureCreated();
                context.SeedDatabaseFourBooks();
            }

            using (var context = new EfCoreContext(options))
            {
                var utData  = context.SetupSingleDtoAndEntities <AddRemovePromotionDto>();
                var service = new CrudServices(context, utData.Wrapped);

                //ATTEMPT
                var dto = new AddRemovePromotionDto {
                    BookId = 1, PromotionalText = ""
                };
                service.UpdateAndSave(dto);

                //VERIFY
                service.IsValid.ShouldBeFalse();
                service.Errors.Single().ToString().ShouldEqual("You must provide some text to go with the promotion.");
            }
        }
コード例 #3
0
        public void TestRemovePromotionBookOk()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <EfCoreContext>();

            using (var context = new EfCoreContext(options))
            {
                context.Database.EnsureCreated();
                context.SeedDatabaseFourBooks();
            }
            using (var context = new EfCoreContext(options))
            {
                var utData  = context.SetupSingleDtoAndEntities <AddRemovePromotionDto>();
                var service = new CrudServices(context, utData.Wrapped);

                var dto = new AddRemovePromotionDto {
                    BookId = 1, ActualPrice = 20, PromotionalText = "Half price today!"
                };
                service.UpdateAndSave(dto);

                var book1 = context.Find <Book>(1);

                //ATTEMPT
                service.UpdateAndSave(dto, nameof(Book.RemovePromotion));

                //VERIFY
                service.IsValid.ShouldBeTrue(service.GetAllErrors());
                var book = context.Find <Book>(1);
                book.ActualPrice.ShouldEqual(40);
            }
        }
コード例 #4
0
 public void OnGet(int id)
 {
     Data = _service.ReadSingle <AddRemovePromotionDto>(id);
     if (!_service.IsValid)
     {
         _service.CopyErrorsToModelState(ModelState, Data, nameof(Data));
     }
 }
コード例 #5
0
 public IActionResult RemovePromotion(AddRemovePromotionDto dto, [FromServices] IAddRemovePromotionService service)
 {
     service.RemovePromotion(dto.BookId);
     if (service.Status.HasErrors)
     {
         SetupTraceInfo();
     }
     return(View("BookUpdated", "Successfully removed a promotion"));
 }
コード例 #6
0
        public IActionResult AddPromotion(AddRemovePromotionDto dto, [FromServices] IAddRemovePromotionService service)
        {
            if (!ModelState.IsValid)
            {
                return(View(dto));
            }

            service.AddPromotion(dto);
            if (service.Status.HasErrors)
            {
                service.Status.CopyErrorsToModelState(ModelState, dto);
                return(View(dto));
            }
            SetupTraceInfo();
            return(View("BookUpdated", "Successfully added/changed a promotion"));
        }
コード例 #7
0
        public Book AddPromotion(AddRemovePromotionDto dto)
        {
            var book = _context.Find <Book>(dto.BookId);

            if (book == null)
            {
                throw new InvalidOperationException($"Could not find the book with Id of {dto.BookId}.");
            }
            Status = book.AddPromotion(dto.ActualPrice, dto.PromotionalText);
            if (Status.HasErrors)
            {
                return(null);
            }

            _context.SaveChanges();
            return(book);
        }
コード例 #8
0
        public IActionResult RemovePromotion(AddRemovePromotionDto dto, [FromServices] ICrudServices service)
        {
            if (!ModelState.IsValid)
            {
                return(View(dto));
            }
            service.UpdateAndSave(dto, nameof(Book.RemovePromotion));
            SetupTraceInfo();
            if (service.IsValid)
            {
                return(View("BookUpdated", service.Message));
            }

            //Error state
            service.CopyErrorsToModelState(ModelState, dto);
            return(View(dto));
        }
コード例 #9
0
        public Book AddPromotion(AddRemovePromotionDto dto)
        {
            var book = _context.Find <Book>(dto.BookId);

            if (book == null)
            {
                AddError("Sorry, I could not find the book you were looking for.");
                return(null);
            }
            CombineStatuses(book.AddPromotion(dto.ActualPrice, dto.PromotionalText));
            if (!IsValid)
            {
                return(null);
            }

            _context.SaveChanges();
            return(book);
        }
コード例 #10
0
 public void AddPromotion(AddRemovePromotionDto dto)
 {
     _service.UpdateAndSave(dto);
 }