public void Delete_WithCommitAndRollback_ShouldDeleteAfterCommitAndInsertAfterRollback(
            object entity,
            FakeDataSet<object> dataSet)
        {
            // Act

            dataSet.Delete(entity);
            dataSet.Commit();

            // Assert

            dataSet.Inserts.Should().Be(0);
            dataSet.Deletes.Should().Be(1);
            dataSet.Updates.Should().Be(0);

            dataSet.Rollback();

            dataSet.Inserts.Should().Be(1);
            dataSet.Deletes.Should().Be(1);
            dataSet.Updates.Should().Be(0);
        }
        public void Update_WithCommitAndRollback_ShouldCallUpdateTwice(
            object entity,
            FakeDataSet<object> dataSet)
        {
            // Act

            dataSet.Update(entity);
            dataSet.Commit();

            // Assert

            dataSet.Inserts.Should().Be(0);
            dataSet.Deletes.Should().Be(0);
            dataSet.Updates.Should().Be(1);

            dataSet.Rollback();

            dataSet.Inserts.Should().Be(0);
            dataSet.Deletes.Should().Be(0);
            dataSet.Updates.Should().Be(2);

            var operation = dataSet.InternalOperations.Single();

            operation.CurrentEntity.Should().Not.Be.EqualTo(operation.PreviousEntity);
        }
        public void Rollback_WithoutCommit_ShouldNotExecuteAnyOperations(
            object entity,
            FakeDataSet<object> dataSet)
        {
            // Act

            dataSet.Insert(entity);
            dataSet.Delete(entity);
            dataSet.Update(entity);

            dataSet.Rollback();

            // Assert

            dataSet.Inserts.Should().Be(0);
            dataSet.Deletes.Should().Be(0);
            dataSet.Updates.Should().Be(0);
        }
        public void Rollback_PassingDoRollbackFalseInConstructor_ShouldNotRollbackTheOperations(
            object entity)
        {
            // Arrange

            var dataSet = new FakeDataSet<object>(false);

            // Act

            dataSet.Insert(entity);
            dataSet.Delete(entity);
            dataSet.Update(entity);

            dataSet.Commit();
            dataSet.Rollback();

            // Assert

            dataSet.Inserts.Should().Be(1);
            dataSet.Deletes.Should().Be(1);
            dataSet.Updates.Should().Be(1);
        }