public void Calling_ExtractRecord_After_Null_Resets_Reader()
        {
            // arrange
            int j = -1;

            this.reader.Setup(x => x["field2"])
                .Returns(() => j < 4 ? TableData[j, 1] : null);

            this.reader.Setup(x => x.Read())
                .Returns(() => j < 3)
                .Callback(() => j++);

            this.command.Setup(x => x.ExecuteReader())
                .Returns(this.reader.Object)
                .Callback(() => j = -1);

            var adapter = new DatabaseAdapter(this.conn.Object, this.sqlGenerator.Object);

            // act
            var record1 = adapter.ExtractRecord(TableName);
            var record2 = adapter.ExtractRecord(TableName);
            var record3 = adapter.ExtractRecord(TableName);
            var record4 = adapter.ExtractRecord(TableName);
            var record5 = adapter.ExtractRecord(TableName);
            var record6 = adapter.ExtractRecord(TableName);

            // assert
            Assert.AreEqual("col2val1", record1["field2"]);
            Assert.AreEqual("col2val2", record2["field2"]);
            Assert.AreEqual("col2val3", record3["field2"]);
            Assert.AreEqual("col2val4", record4["field2"]);
            Assert.IsNull(record5);
            Assert.AreEqual("col2val1", record6["field2"]);
        }
        public void Test_ExtractRecord_With_Sql_Query()
        {
            // arrange
            var adapter = new DatabaseAdapter(this.conn.Object, this.sqlGenerator.Object);
            this.reader.Setup(x => x.Read()).Returns(true);

            // act
            var record = adapter.ExtractRecord(TableName);

            // assert
            Assert_Record_Is_Good(record);
        }
        public void Test_ExtractRecord_Called_Multiple_Times()
        {
            // arrange
            int j = -1;

            this.reader.Setup(x => x["field1"])
                .Returns(() => TableData[j, 0]);
            this.reader.Setup(x => x["field2"])
                .Returns(() => TableData[j, 1]);
            this.reader.Setup(x => x["field3"])
                .Returns(() => TableData[j, 2]);

            this.reader.Setup(x => x.Read())
                .Returns(true)
                .Callback(() => j++);

            var adapter = new DatabaseAdapter(this.conn.Object, this.sqlGenerator.Object);

            // act
            var record1 = adapter.ExtractRecord(TableName);
            var record2 = adapter.ExtractRecord(TableName);

            // assert
            Assert.AreEqual("col2val1", record1["field2"]);
            Assert.AreEqual("col2val2", record2["field2"]);
        }