public async Task ReturnsSaveChanges()
            {
                var expectedResult = 1;
                var insertBlog     = new InsertBlog(null);
                var upserter       = A.Fake <IUpsertDbSet <Blog> >();

                A.CallTo(() =>
                         upserter.Save()
                         ).Returns(expectedResult);

                var actualResult = await new InsertBlog(null).Execute(upserter);

                Assert.AreEqual(expectedResult, actualResult);
            }
            public async Task TracksAndSavesBlogToDbSet()
            {
                var blogToInsert = new Blog();
                var insertBlog   = new InsertBlog(blogToInsert);
                var upserter     = A.Fake <IUpsertDbSet <Blog> >();

                await insertBlog.Execute(upserter);

                A.CallTo(() =>
                         upserter.AddAsync(A <Blog> .That.IsSameAs(blogToInsert))
                         ).MustHaveHappenedOnceExactly();

                A.CallTo(() =>
                         upserter.Save()
                         ).MustHaveHappenedOnceExactly();
            }
            public async Task DoesNotSaveBlogIfAddThrows()
            {
                var expectedException = new Exception();
                var insertBlog        = new InsertBlog(null);
                var upserter          = A.Fake <IUpsertDbSet <Blog> >();

                A.CallTo(() =>
                         upserter.AddAsync(A <Blog> .Ignored)
                         ).Throws(expectedException);

                await Assert.ThrowsExceptionAsync <Exception>(async() =>
                                                              await insertBlog.Execute(upserter)
                                                              );

                A.CallTo(() =>
                         upserter.Save()
                         ).MustNotHaveHappened();
            }