public void Validate_TitleIsDuplicate_ExceptionThrown()
        {
            var now     = DateTime.Now;
            var unique  = Guid.NewGuid();
            var builder = new DbContextOptionsBuilder <DataContext>().UseSqlServer("Server=.;Database=SimpleTodo;Trusted_Connection=True;MultipleActiveResultSets=true");

            // arrange data
            using (var context = new DataContext(builder.Options))
            {
                context.TodoItems.Add(new TodoItem
                {
                    DueDate = now.AddDays(3),
                    IsDone  = false,
                    Title   = "TitleIsDuplicate_" + unique
                });
                context.SaveChanges();
            }

            // act
            using (var context = new DataContext(builder.Options))
            {
                var validator = new TodoDtoValidator(context);
                Assert.Throws <InvalidOperationException>(() => validator.Validate(new TodoDto
                {
                    Title   = "TitleIsDuplicate_" + unique,
                    DueDate = DateTime.Now,
                    IsDone  = false
                }));
            }
        }
Esempio n. 2
0
        public void AddTodo(TodoDto input)
        {
            var exists = context.TodoItems.Any(ff => ff.Title.ToLower() == input.Title.ToLower());

            if (exists)
            {
                throw new InvalidOperationException("Duplicate todo item");
            }

            var validator = new TodoDtoValidator(context);

            validator.Validate(input);

            // refactor to mapper
            var todoEntity = new TodoItem
            {
                CreationDate = DateTime.Now,
                Title        = input.Title,
                IsDone       = false,
                DueDate      = input.DueDate
            };

            context.TodoItems.Add(todoEntity);
            context.SaveChanges();
        }
        public void Validate_TitleIsEmpty_ExceptionThrown()
        {
            var builder = new DbContextOptionsBuilder <DataContext>().UseSqlServer("Server=.;Database=SimpleTodo;Trusted_Connection=True;MultipleActiveResultSets=true");

            using (var context = new DataContext(builder.Options))
            {
                var validator = new TodoDtoValidator(context);
                Assert.Throws <InvalidOperationException>(() => validator.Validate(new TodoDto
                {
                    Title   = "",
                    DueDate = DateTime.Now,
                    IsDone  = false
                }));
            }
        }