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_Generate_Conversion_Xml_Against_Live_Database()
        {
            var adapter = new DatabaseAdapter(this.conn);
            var generator = new XmlConversionGenerator(adapter);

            var result = generator.GenerateXmlConversionTemplate("tblContacts");

            string path = @"C:\Users\ahaley\Documents\Visual Studio 2008\Projects\Pyrite\Pyrite.XmlConversionRules.Tests\xml\test.xml";
            result.Save(path);
        }
 public void ExtractFields()
 {
     var adapter = new DatabaseAdapter(this.conn);
     var fields = adapter.ExtractColumnDistinct("tblContacts", "tblContactCat");
     Array.ForEach(fields, field => Console.WriteLine("{0}", field));
 }
        public void Test_ExtractColumn_Works()
        {
            // arrange
            var adapter = new DatabaseAdapter(this.conn.Object, this.sqlGenerator.Object);
            var callRead = 0;
            this.reader.Setup(x => x.Read())
                .Returns(() => callRead < 3)
                .Callback(() => callRead++);
            var callArray = 0;
            this.reader.Setup(x => x["field2"])
                .Returns(() => TableData[callArray, 1])
                .Callback(() => callArray++);

            // act
            var columnData = adapter.ExtractColumnDistinct("some_table", "field2");

            // assert
            Assert.AreEqual(3, columnData.Length);
            Assert.AreEqual("col2val1", columnData[0]);
            Assert.AreEqual("col2val2", columnData[1]);
            Assert.AreEqual("col2val3", columnData[2]);
        }
        public void Test_Insert_Record_Dictionary()
        {
            // arrange
            var adapter = new DatabaseAdapter(this.conn.Object, this.sqlGenerator.Object);
            var record = new Dictionary<string, object> {
                {"field1", "value1"},
                {"field2", "value2"}};

            this.command.Setup(x => x.ExecuteNonQuery()).Returns(1);
            const string query = "INSERT INTO some_table (field1, field2) VALUES('value1', 'value2')";
            this.sqlGenerator.Setup(x => x.GenerateInsert(TableName, record))
                .Returns(query);

            // act
            var result = adapter.InsertRecord("some_table", record);

            // assert
            command.VerifySet(x => x.CommandText = query);
            command.Verify(x => x.ExecuteNonQuery());
            Assert.AreEqual(1, result);
        }
        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"]);
        }
        public void Test_ExtractMultipleColumns_Work()
        {
            // arrange
            var adapter = new DatabaseAdapter(this.conn.Object, this.sqlGenerator.Object);
            var dbInput = new Queue<object>(new []
                {"col2val1", "col2val2", "col2val3", "col3val1", "col3val2", "col3val3"});
            this.reader.Setup(x => x.Read()).Returns(() => dbInput.Count > 0);
            this.reader.Setup(x => x[0]).Returns(() => dbInput.Dequeue());

            // act
            var multiColumnData = adapter.ExtractMultiColumnDistinct(TableName, new [] {"field2", "field3"});

            // assert
            Assert.AreEqual(6, multiColumnData.Length);
        }