Пример #1
0
        public void TestAddReviewToCreatedBookAndCheckReviewAddedHandlerOk()
        {
            //SETUP
            var showLog = false;
            var options =
                SqliteInMemory.CreateOptionsWithLogging <SqlEventsDbContext>(x =>
            {
                if (showLog)
                {
                    _output.WriteLine(x.DecodeMessage());
                }
            });
            var context = options.CreateDbWithDiForHandlers <SqlEventsDbContext, ReviewAddedHandler>();

            context.Database.EnsureCreated();
            var book = WithEventsEfTestData.CreateDummyBookOneAuthor();

            context.Add(book);
            context.SaveChanges();

            //ATTEMPT
            showLog = true;
            book.AddReview(4, "OK", "me");
            context.SaveChanges();

            //VERIFY
            book.ReviewsCount.ShouldEqual(1);
            book.ReviewsAverageVotes.ShouldEqual(4);
        }
Пример #2
0
        public void TestCreateBookAndCheckPartsOk()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptionsWithLogging <SqlEventsDbContext>(x => _output.WriteLine(x.Message));

            using (var context = new SqlEventsDbContext(options, null))
            {
                context.Database.EnsureCreated();
                var book = WithEventsEfTestData.CreateDummyBookTwoAuthorsTwoReviews();
                context.Add(book);
                context.SaveChanges();
            }
            using (var context = new SqlEventsDbContext(options, null))
            {
                //ATTEMPT
                var bookWithRelationships = context.Books
                                            .Include(p => p.AuthorsLink).ThenInclude(p => p.Author)
                                            .Include(p => p.Reviews)
                                            .Single();

                //VERIFY
                bookWithRelationships.AuthorsLink.Select(y => y.Author.Name).OrderBy(x => x).ToArray()
                .ShouldEqual(new[] { "Author1", "Author2" });
                bookWithRelationships.Reviews.Count().ShouldEqual(2);
            }
        }
        public void TestAddReviewConcurrencyFixed()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <SqlEventsDbContext>();
            var config  = new GenericEventRunnerConfig();

            config.RegisterSaveChangesExceptionHandler <SqlEventsDbContext>(BookWithEventsConcurrencyHandler.HandleCacheValuesConcurrency);
            var context = options.CreateDbWithDiForHandlers <SqlEventsDbContext, ReviewAddedHandler>(config: config);

            context.Database.EnsureCreated();
            var book = WithEventsEfTestData.CreateDummyBookOneAuthor();

            context.Add(book);
            context.SaveChanges();

            book.AddReview(4, "OK", "me");
            //This simulates adding a review with NumStars of 2 before the AddReview
            context.Database.ExecuteSqlRaw(
                "UPDATE Books SET ReviewsCount = @p0, ReviewsAverageVotes = @p1 WHERE BookId = @p2",
                1, 2, book.BookId);

            //ATTEMPT
            context.SaveChanges();

            //VERIFY
            var foundBook = context.Find <BookWithEvents>(book.BookId);

            foundBook.ReviewsCount.ShouldEqual(2);
            foundBook.ReviewsAverageVotes.ShouldEqual(6.0 / 2.0);
        }
        public void TestBookDeletedConcurrencyFixed()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <SqlEventsDbContext>();
            var config  = new GenericEventRunnerConfig();

            config.RegisterSaveChangesExceptionHandler <SqlEventsDbContext>(BookWithEventsConcurrencyHandler.HandleCacheValuesConcurrency);
            var context = options.CreateDbWithDiForHandlers <SqlEventsDbContext, ReviewAddedHandler>(config: config);

            context.Database.EnsureCreated();
            var books = WithEventsEfTestData.CreateDummyBooks(2);

            context.AddRange(books);
            context.SaveChanges();

            //ATTEMPT
            books.First().AuthorsLink.Last().Author.ChangeName("New common name");
            //This simulates changing the AuthorsOrdered value
            context.Database.ExecuteSqlRaw("DELETE FROM Books WHERE BookId = @p0", books.First().BookId);

            //ATTEMPT
            context.SaveChanges();

            //VERIFY
            var readBooks = context.Books.ToList();

            readBooks.Count().ShouldEqual(1);
            readBooks.First().AuthorsOrdered.ShouldEqual("Author0001, New common name");
        }
Пример #5
0
        public void TestCreateBookWithOneAuthorAndChangeTheAuthorsName()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <SqlEventsDbContext>();
            {
                var context = options.CreateDbWithDiForHandlers <SqlEventsDbContext, ReviewAddedHandler>();
                context.Database.EnsureCreated();
                var book = WithEventsEfTestData.CreateDummyBookOneAuthor();
                context.Add(book);
                context.SaveChanges();

                //ATTEMPT
                book.AuthorsOrdered.ShouldEqual("Test Author");
                book.AuthorsLink.First().Author.ChangeName("New name");
                context.SaveChanges();

                //VERIFY
                context.Books.First().AuthorsOrdered.ShouldEqual("New name");
            }
        }
Пример #6
0
        public void TestBookRemoveReviewCausesEventOk()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <SqlEventsDbContext>();

            using (var context = new SqlEventsDbContext(options, null))
            {
                context.Database.EnsureCreated();
                var book = WithEventsEfTestData.CreateDummyBookTwoAuthorsTwoReviews();
                context.Add(book);
                context.SaveChanges();
                book.GetBeforeSaveEventsThenClear();

                //ATTEMPT
                book.RemoveReview(book.Reviews.First().ReviewId);

                //VERIFY
                var dEvent = book.GetBeforeSaveEventsThenClear().Single();
                dEvent.ShouldBeType <BookReviewRemovedEvent>();
            }
        }
Пример #7
0
        public void TestCreateBookWithReviewsThenRemoveReviewCheckReviewRemovedHandlerOk()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <SqlEventsDbContext>();
            {
                var context = options.CreateDbWithDiForHandlers <SqlEventsDbContext, ReviewAddedHandler>();
                context.Database.EnsureCreated();
                var book = WithEventsEfTestData.CreateDummyBookTwoAuthorsTwoReviews();
                context.Add(book);
                context.SaveChanges();

                //ATTEMPT
                var reviewToRemove = book.Reviews.First();
                book.RemoveReview(reviewToRemove.ReviewId);
                context.SaveChanges();

                //VERIFY
                book.ReviewsCount.ShouldEqual(1);
                book.ReviewsAverageVotes.ShouldEqual(1);
            }
        }
Пример #8
0
        public void TestAuthorChangeNameCausesEventOk()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <SqlEventsDbContext>();

            using (var context = new SqlEventsDbContext(options, null))
            {
                context.Database.EnsureCreated();
                var book = WithEventsEfTestData.CreateDummyBookTwoAuthorsTwoReviews();
                context.Add(book);
                context.SaveChanges();
                var author = book.AuthorsLink.First().Author;
                author.GetBeforeSaveEventsThenClear();

                //ATTEMPT
                author.ChangeName("new name");

                //VERIFY
                var dEvent = author.GetBeforeSaveEventsThenClear().Single();
                dEvent.ShouldBeType <AuthorNameUpdatedEvent>();
            }
        }
Пример #9
0
        public void TestCreateBookTwoAuthorsChangeCommonAuthorOk()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <SqlEventsDbContext>();
            {
                var context = options.CreateDbWithDiForHandlers <SqlEventsDbContext, ReviewAddedHandler>();
                context.Database.EnsureCreated();
                var books = WithEventsEfTestData.CreateDummyBooks(2);
                context.AddRange(books);
                context.SaveChanges();

                //ATTEMPT
                books.First().AuthorsOrdered.ShouldEqual("Author0000, CommonAuthor");
                books.First().AuthorsLink.Last().Author.ChangeName("New common name");
                context.SaveChanges();

                //VERIFY
                var readBooks = context.Books.ToList();
                readBooks.First().AuthorsOrdered.ShouldEqual("Author0000, New common name");
                readBooks.Last().AuthorsOrdered.ShouldEqual("Author0001, New common name");
            }
        }
        public void TestAddReviewCauseConcurrencyThrown()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <SqlEventsDbContext>();
            var context = options.CreateDbWithDiForHandlers <SqlEventsDbContext, ReviewAddedHandler>();

            context.Database.EnsureCreated();
            var book = WithEventsEfTestData.CreateDummyBookOneAuthor();

            context.Add(book);
            context.SaveChanges();

            //ATTEMPT
            book.AddReview(4, "OK", "me");
            //This simulates adding a review with NumStars of 2 before the AddReview
            context.Database.ExecuteSqlRaw(
                "UPDATE Books SET ReviewsCount = @p0, ReviewsAverageVotes = @p1 WHERE BookId = @p2",
                1, 2, book.BookId);

            //VERIFY
            Assert.Throws <DbUpdateConcurrencyException>(() => context.SaveChanges());
        }
        public void TestChangeAuthorOrderedCauseConcurrencyThrown()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <SqlEventsDbContext>();
            var context = options.CreateDbWithDiForHandlers <SqlEventsDbContext, ReviewAddedHandler>();

            context.Database.EnsureCreated();
            var books = WithEventsEfTestData.CreateDummyBooks(2);

            context.AddRange(books);
            context.SaveChanges();

            //ATTEMPT
            books.First().AuthorsLink.Last().Author.ChangeName("New common name");
            //This simulates changing the AuthorsOrdered value
            context.Database.ExecuteSqlRaw(
                "UPDATE Books SET AuthorsOrdered = @p0 WHERE BookId = @p1",
                "different author string", books.First().BookId);

            //VERIFY
            Assert.Throws <DbUpdateConcurrencyException>(() => context.SaveChanges());
        }
Пример #12
0
        public void TestAddReviewToExistingBookAndCheckReviewAddedHandlerOk()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <SqlEventsDbContext>();
            {
                var context = options.CreateDbWithDiForHandlers <SqlEventsDbContext, ReviewAddedHandler>();
                context.Database.EnsureCreated();
                var book = WithEventsEfTestData.CreateDummyBookOneAuthor();
                context.Add(book);
                context.SaveChanges();
            }
            {
                var context = options.CreateDbWithDiForHandlers <SqlEventsDbContext, ReviewAddedHandler>();
                var book    = context.Books.Single();

                //ATTEMPT
                book.AddReview(4, "OK", "me", context);
                context.SaveChanges();

                //VERIFY
                book.ReviewsCount.ShouldEqual(1);
                book.ReviewsAverageVotes.ShouldEqual(4);
            }
        }