using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Reflection; using System.Xml.Serialization; using ChadSoft.DataAccess; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace ChadSoft.DataAccess { [TestClass] public class SqlDatabaseTests { const string TestDbName = "TestDatabase"; [TestMethod] public void EmptyConstructorUsesDefaultDatabaseName() { var defaultName = ConfigurationManager.AppSettings[Database.DefaultDatabaseNameAppSetting]; var connectionNameField = typeof(SqlDatabase).GetField("connectionName", BindingFlags.Instance | BindingFlags.NonPublic); Assert.AreEqual(defaultName, connectionNameField.GetValue(new SqlDatabase())); } [TestMethod] [ExpectedException(typeof(ArgumentNullException))] public void ConstructorWithNullDatabaseNameThrowsException() { new SqlDatabase(null); } [TestMethod] public void ExecuteNonQuery() { var db = new SqlDatabase(TestDbName); var parameters = new Dictionary { { "Message", "Hi there!" } }; Assert.AreEqual(-1, db.ExecuteNonQuery("PRINT @Message", CommandType.Text, parameters)); } [TestMethod] public void ExecuteScalar() { var db = new SqlDatabase(TestDbName); var parameters = new Dictionary { { "RetValue", 1 } }; Assert.AreEqual(1, db.ExecuteScalar("SELECT @RetValue", CommandType.Text, parameters)); } [TestMethod] public void ExecuteReader() { var db = new SqlDatabase(TestDbName); var parameters = new Dictionary { { "RetValue", 1 } }; Assert.AreEqual(1, db.ExecuteReader("SELECT 1", CommandType.Text, parameters, (rdr => { rdr.Read(); return rdr.GetValue(0); }))); } [TestMethod] public void ExecuteXmlReader() { var db = new SqlDatabase(TestDbName); var parameters = new Dictionary { { "RetValue", 1 } }; Assert.AreEqual(1, db.ExecuteXmlReader("SELECT 1 AS [Value] FOR XML RAW", CommandType.Text, parameters, (rdr => { rdr.Read(); return Int32.Parse(rdr.GetAttribute(0)); }))); } [TestMethod] public void ExecuteXmlReader_WithXmlDeserialization() { var db = new SqlDatabase(TestDbName); var parameters = new Dictionary { { "RetValue", 1 } }; Assert.AreEqual(1, db.ExecuteXmlReader("SELECT 1 AS [Value] FOR XML RAW('Row')", CommandType.Text, parameters).Value); } [Serializable] public class Row { [XmlAttribute] public int Value { get; set; } } } }