public void WriteRecord_MultipleRecordsWithoutTransactionAndNoCommit_ChangesAreCommitted()
        {
            var people = Person.Faker.Generate(2);

            var commands = new SqlCommand[]
            {
                DatabaseWriterTests.GenerateInsertPersonCommand(people[0]),
                DatabaseWriterTests.GenerateInsertPersonCommand(people[1])
            };

            var commandFactory = MockRepository.GenerateMock <IDatabaseWriterCommandFactory>();

            commandFactory.Stub(x => x.Create(Arg <object> .Is.Equal(people[0]))).Return(commands[0]);
            commandFactory.Stub(x => x.Create(Arg <object> .Is.Equal(people[1]))).Return(commands[1]);

            using (var databaseWriter = new DatabaseWriter(commandFactory, DatabaseWriterTests.DbConnectionString, false))
            {
                databaseWriter.Open();

                databaseWriter.WriteRecord(people[0]);
                databaseWriter.WriteRecord(people[1]);
            }

            using (var testDb = new TestDb(DatabaseWriterTests.DbConnectionString))
            {
                var records = testDb.Delete("dbo.Person", people.ToArray());

                Assert.AreEqual(2, records.Length);
            }
        }
        public void WriteRecord_CommandRaisesError_ExceptionIsPropogated()
        {
            var person = Person.Faker.Generate(1).Single();

            var command = new SqlCommand("dbo.RaiseError")
            {
                CommandType = CommandType.StoredProcedure
            };

            var commandFactory = MockRepository.GenerateMock <IDatabaseWriterCommandFactory>();

            commandFactory.Stub(x => x.Create(Arg <object> .Is.Equal(person))).Return(command);

            using (var databaseWriter = new DatabaseWriter(commandFactory, DatabaseWriterTests.DbConnectionString))
            {
                databaseWriter.Open();

                databaseWriter.WriteRecord(person);
            }
        }