Mercurial > pub > bltoolkit
diff UnitTests/CS/DataAccess/DataAccessorTest.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/UnitTests/CS/DataAccess/DataAccessorTest.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,969 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; + +using NUnit.Framework; + +using BLToolkit.Data; +using BLToolkit.DataAccess; +using BLToolkit.EditableObjects; +using BLToolkit.Mapping; +using BLToolkit.Reflection; +using BLToolkit.TypeBuilder; +using BLToolkit.Validation; + +using PersonDataSet = DataAccessTest.PersonDataSet2; + +namespace DataAccess +{ + namespace Other + { + public abstract class Person : DataAccessorTest.Person + { + [MaxLength(256), Required] + public abstract string Diagnosis { get; set; } + } + } + + [TestFixture] + public class DataAccessorTest + { + public enum Gender + { + [MapValue("F")] Female, + [MapValue("M")] Male, + [MapValue("U")] Unknown, + [MapValue("O")] Other + } + + public interface IPerson + { + int ID { get; set; } + string LastName { get; set; } + string FirstName { get; set; } + string MiddleName { get; set; } + IList Territories { get; set; } + } + + [TableName("Person")] + public abstract class Person : EditableObject, IPerson + { + [PrimaryKey, NonUpdatable] + [MapField("PersonID")] public abstract int ID { get; set; } + [MaxLength(50), Required] public abstract string FirstName { get; set; } + [MaxLength(50), NullValue("")] public abstract string MiddleName { get; set; } + [MaxLength(50), Required] public abstract string LastName { get; set; } + [Required] public abstract Gender Gender { get; set; } + + public abstract IList Territories { get; set; } + } + + public abstract class PersonAccessor : DataAccessor + { + public abstract int Person_SelectAll(); + public abstract void Person_SelectAll(DbManager db); + public abstract Person SelectByName(string firstName, string lastName); + + [SprocName("Person_SelectByName"), DiscoverParameters] + public abstract Person AnySprocName(string anyParameterName, string otherParameterName); + + [ActionName("SelectByName")] + public abstract Person AnyActionName(string firstName, string lastName); + + [ActionName("SelectByName")] + public abstract Person AnyParamName( + [ParamName("FirstName")] string name1, +#if ORACLE + [ParamName("LastName")] string name2 +#else + [ParamName("@LastName")] string name2 +#endif + ); + + [ActionName("SelectByName"), ObjectType(typeof(Person))] + public abstract IPerson SelectByNameReturnInterface(string firstName, string lastName); + + [ActionName("SelectByName"), ObjectType(typeof(Person))] + public abstract void SelectByNameReturnVoid(string firstName, string lastName, [Destination] object p); + + public abstract IPerson SelectByName(string firstName, string lastName, [Destination] Person p); + + public abstract Person Insert([Destination(NoMap = false)] Person e); + + [SprocName("Person_Insert_OutputParameter")] + public abstract void Insert_OutputParameter([Direction.Output("PERSONID")] Person e); + + [SprocName("Scalar_ReturnParameter")] + public abstract void Insert_ReturnParameter([Direction.ReturnValue("@PersonID"), + Direction.Ignore("PersonID", "FirstName", "LastName", "MiddleName", "Gender")] Person e); + + [SprocName("Scalar_ReturnParameter")] + public abstract void Insert_ReturnParameter2([Direction.ReturnValue("ID"), + Direction.Ignore("PersonID", "FirstName", "LastName", "MiddleName", "Gender")] Person e); + + [ActionName("SelectAll"), ObjectType(typeof(Person))] + public abstract ArrayList SameTypeName(); + + [ActionName("SelectAll"), ObjectType(typeof(Person))] + public abstract IList SelectAllAsIList(); + + [ActionName("SelectByName")] + public abstract Person SameTypeName(string firstName, string lastName); + + [ActionName("SelectByKey")] + public abstract Person ParamNullID ([ParamNullValue(1)] int id); + + [NoInstance] + public abstract Person this[DbManager db, int id] + { + [ActionName("SelectByKey")] + get; + [ActionName("Update")] + [ObjectType(typeof(Person))] + set; + } + + [ActionName("SelectByKey")] + public abstract Person ParamNullableID([ParamNullValue(1)] int? id); + + [ActionName("SelectByKey")] + public abstract Person ParamNullableID2([ParamNullValue("1")] int? id); + + [ActionName("SelectAll")] + public abstract IList<Person> SelectAllAsIListT(); + + [ActionName("SelectByName")] + public abstract Person ParamNullString([ParamNullValue("John")] string firstName, string lastName); + + public abstract Person ParamNullGuid ([ParamNullValue("49F74716-C6DE-4b3e-A753-E40CFE6C6EA0")] Guid guid); + public abstract Person ParamNullEnum ([ParamNullValue(Gender.Unknown)] Gender gender); + + #region IDataReader + + [SprocName("Person_SelectAll")] + public abstract IDataReader SelectAllIDataReader(DbManager db); + + [SprocName("Person_SelectAll"), CommandBehavior(CommandBehavior.SchemaOnly)] + public abstract IDataReader SelectAllIDataReaderSchemaOnly(DbManager db); + + #endregion + + #region DataSet + + [SprocName("Person_SelectAll")] + public abstract DataSet SelectAllDataSet(); + + [SprocName("Person_SelectAll")] + public abstract IListSource SelectAllDataSetWithDestination([Destination] DataSet ds); + + [SprocName("Person_SelectAll")] + public abstract void SelectAllDataSetReturnVoid ([Destination] DataSet ds); + + [SprocName("Person_SelectAll")] + public abstract PersonDataSet SelectAllTypedDataSet(); + + [SprocName("Person_SelectAll")] + public abstract object SelectAllTypedDataSetWithDestination([Destination] PersonDataSet ds); + + [SprocName("Person_SelectAll")] + public abstract void SelectAllTypedDataSetReturnVoid ([Destination] PersonDataSet ds); + + [ObjectType(typeof(Person)), ActionName("SelectAll"), DataSetTable("First")] + public abstract void SelectFirstTable ([Destination] DataSet ds); + + [SprocName("Person_SelectAll"), DataSetTable("Second")] + public abstract void SelectSecondTable ([Destination] DataSet ds); + + [ObjectType(typeof(Person)), ActionName("SelectAll"), DataSetTable(0)] + public abstract void SelectFirstTable2 ([Destination] PersonDataSet ds); + + [SprocName("Person_SelectAll"), DataSetTable("Second")] + public abstract void SelectSecondTable2([Destination] PersonDataSet ds); + + #endregion + + #region DataTable + + [SprocName("Person_SelectAll")] + public abstract DataTable SelectAllDataTable(); + + [SprocName("Person_SelectAll")] + public abstract DataTable SelectAllDataTableWithDestination([Destination] DataTable dt); + + [SprocName("Person_SelectAll")] + public abstract void SelectAllDataTableReturnVoid ([Destination] DataTable dt); + + [SprocName("Person_SelectAll"), DataSetTable("Person")] + public abstract DataTable SelectAllToTablePerson(); + + [SprocName("Person_SelectAll")] + public abstract PersonDataSet.PersonDataTable SelectAllTypedDataTable(); + + [SprocName("Person_SelectAll")] + public abstract void SelectAllTypedDataTableReturnVoid ([Destination] PersonDataSet.PersonDataTable dt); + + #endregion + + #region List + + [ActionName("SelectAll"), ObjectType(typeof(Person))] + public abstract ArrayList SelectAllList(); + + [ActionName("SelectAll"), ObjectType(typeof(Person))] + public abstract IList SelectAllListWithDestination([Destination] IList list); + + [ActionName("SelectAll"), ObjectType(typeof(Person))] + public abstract void SelectAllListReturnVoid ([Destination] IList list); + + [ActionName("SelectAll")] + public abstract List<Person> SelectAllListT(); + + [ActionName("SelectAll"), ObjectType(typeof(Person))] + public abstract List<IPerson> SelectAllListTWithObjectType(); + + [ActionName("SelectAll"), ObjectType(typeof(Person))] + public abstract List<IPerson> SelectAllListTWithDestination([Destination] IList list); + + [ActionName("SelectAll"), ObjectType(typeof(Person))] + public abstract void SelectAllListTWithObjectTypeReturnVoid([Destination] IList list); + + [ActionName("SelectAll")] + public abstract void SelectAllListTReturnVoid ([Destination] IList<Person> list); + + #endregion + + #region IEnumerable + + [ActionName("SelectAll"), ObjectType(typeof(Person))] + public abstract IEnumerable SelectAllEnumerable(); + + [ActionName("SelectAll")] + public abstract IEnumerable<Person> SelectAllEnumerableT(); + + [ActionName("SelectAll"), ObjectType(typeof(Person))] + public abstract IEnumerable<IPerson> SelectAllEnumerableTWithObjectType(); + + #endregion + } + + public abstract class PersonDataAccessor1 : PersonAccessor + { + public DataSet SelectByName() + { + using (DbManager db = GetDbManager()) + { + DataSet ds = new DataSet(); + + db.SetSpCommand("Person_SelectAll"); + + if (ds.Tables.Count > 0) + db.ExecuteDataSet(ds, ds.Tables[0].TableName); + else + db.ExecuteDataSet(ds); + + return ds; + } + } + + [ActionName("SelectAll"), ObjectType(typeof(Other.Person))] + public abstract ArrayList SameTypeName1(); + + [ActionName("SelectByName")] + public abstract Other.Person SameTypeName1(string firstName, string lastName); + + protected override string GetDefaultSpName(string typeName, string actionName) + { + return "Patient_" + actionName; + } + } + + public class PersonList : ArrayList + { + public new Person this[int idx] + { + get { return (Person)base[idx]; } + set { base[idx] = value; } + } + } + + private PersonAccessor _da; + private SprocQuery _sproc = new SprocQuery(); + private SqlQuery _sql = new SqlQuery(); + + public DataAccessorTest() + { + object o = TypeAccessor.CreateInstance(typeof(Person)); + Assert.IsInstanceOf(typeof(Person), o); + + _da = (PersonAccessor)DataAccessor.CreateInstance(typeof(PersonAccessor)); + Assert.IsInstanceOf(typeof(PersonAccessor), _da); + } + + [Test] + public void Sql_Select() + { + Person e = (Person)_sql.SelectByKey(typeof(Person), 1); + + Assert.IsNotNull(e); + Assert.AreEqual(1, e.ID); + } + + [Test] + public void Sql_SelectAll() + { + ArrayList list = _sql.SelectAll(typeof(Person)); + + Console.WriteLine(list.Count); + } + + [Test] + public void Sql_Insert() + { + ArrayList list = _sql.SelectAll(typeof(Person)); + Hashtable tbl = new Hashtable(); + + foreach (Person e in list) + tbl[e.ID] = e; + + Person em = (Person)Map.CreateInstance(typeof(Person)); + + em.FirstName = "1"; + em.LastName = "2"; + + _sql.Insert(em); + + list = _sql.SelectAll(typeof(Person)); + + foreach (Person e in list) + if (tbl.ContainsKey(e.ID) == false) + _sql.Delete(e); + } + + [Test] + public void Sql_Update() + { + Person e = (Person)_sql.SelectByKey(typeof(Person), 1); + + int n = _sql.Update(e); + + Assert.AreEqual(1, n); + } + + [Test] + public void Sql_DeleteByKey() + { + ArrayList list = _sql.SelectAll(typeof(Person)); + Hashtable tbl = new Hashtable(); + + foreach (Person e in list) + tbl[e.ID] = e; + + Person em = (Person)Map.CreateInstance(typeof(Person)); + + em.FirstName = "1"; + em.LastName = "2"; + + _sql.Insert(em); + + list = _sql.SelectAll(typeof(Person)); + + foreach (Person e in list) + if (tbl.ContainsKey(e.ID) == false) + _sql.DeleteByKey(typeof(Person), e.ID); + } + + [Test] + public void Sproc_SelectAll() + { + ArrayList list = _sproc.SelectAll(typeof(Person)); + Console.WriteLine(list.Count); + } + + [Test] + public void Gen_Person_SelectAll() + { + int n = _da.Person_SelectAll(); + Console.WriteLine(n); + } + + [Test] + public void Gen_Person_SelectAll_DbManager() + { + using (DbManager db = _da.GetDbManager()) + _da.Person_SelectAll(db); + } + + [Test] + public void Gen_SelectByName() + { + Person e = _da.SelectByName("John", "Pupkin"); + Assert.AreEqual(1, e.ID); + } + + [Test] + public void Gen_SelectByNameReturnInterface() + { + IPerson i = _da.SelectByNameReturnInterface("John", "Pupkin"); + + Assert.IsNotNull(i); + Assert.AreEqual (1, i.ID); + } + + [Test] + public void Gen_SelectByNameReturnVoid() + { + Person e = (Person)TypeAccessor.CreateInstance(typeof (Person)); + Assert.IsNotNull(e); + + _da.SelectByNameReturnVoid("John", "Pupkin", e); + Assert.AreEqual (1, e.ID); + } + + [Test] + public void Gen_SelectByNameWithDestination() + { + Person e = (Person)TypeAccessor.CreateInstance(typeof (Person)); + IPerson i = _da.SelectByName("John", "Pupkin", e); + + Assert.AreSame (i, e); + Assert.AreEqual(1, i.ID); + } + +#if !ACCESS +#if !FIREBIRD + [Test] + public void Gen_InsertGetID() + { + Person e = (Person)TypeAccessor.CreateInstance(typeof(Person)); + e.FirstName = "Crazy"; + e.LastName = "Frog"; + e.Gender = Gender.Other; + + _da.Insert(e); + + // If you got an assertion here, make sure your Person_Insert sproc looks like + // + // INSERT INTO Person( LastName, FirstName, MiddleName, Gender) + // VALUES (@LastName, @FirstName, @MiddleName, @Gender) + // + // SELECT Cast(SCOPE_IDENTITY() as int) PersonID + // ^==important ^==important + // + Assert.IsTrue(e.ID > 0); + _sproc.Delete(e); + } +#endif + [Test] + public void Gen_InsertGetIDReturnParameter() + { + Person e = (Person)TypeAccessor.CreateInstance(typeof(Person)); + + _da.Insert_ReturnParameter(e); + + Assert.AreEqual(12345, e.ID); + } + + + [Test] + public void Gen_InsertGetIDReturnParameter2() + { + Person e = (Person)TypeAccessor.CreateInstance(typeof(Person)); + + _da.Insert_ReturnParameter2(e); + + Assert.AreEqual(12345, e.ID); + } + + [Test] + public void Gen_InsertGetIDOutputParameter() + { + Person e = (Person)TypeAccessor.CreateInstance(typeof(Person)); + e.FirstName = "Crazy"; + e.LastName = "Frog"; + e.Gender = Gender.Other; + + _da.Insert_OutputParameter(e); + + Assert.IsTrue(e.ID > 0); + _sproc.Delete(e); + } +#endif + +#if !FIREBIRD + // Firebird is incomatible with DiscoverParameters due to In/Out parameters emulation. + // + [Test] +#endif + public void Gen_SprocName() + { + Person e = _da.AnySprocName("John", "Pupkin"); + Assert.AreEqual(1, e.ID); + } + + [Test] + public void Gen_ActionName() + { + Person e = _da.AnyActionName("John", "Pupkin"); + Assert.AreEqual(1, e.ID); + } + + [Test] + public void Gen_ParamName() + { + Person e = _da.AnyParamName("John", "Pupkin"); + Assert.AreEqual(1, e.ID); + } + + [Test] + public void Gen_SameTypeName() + { + Person e = _da.SameTypeName("Tester", "Testerson"); + Assert.IsInstanceOf(typeof(Person), e); + Assert.AreEqual(2, e.ID); + + ArrayList list = _da.SameTypeName(); + Assert.AreNotEqual(0, list.Count); + Assert.IsInstanceOf(typeof(Person), list[0]); + + PersonDataAccessor1 da1 = (PersonDataAccessor1)DataAccessor.CreateInstance(typeof(PersonDataAccessor1)); + Other.Person e1 = da1.SameTypeName1("Tester", "Testerson"); + + Assert.IsInstanceOf(typeof(Other.Person), e1); + Assert.IsNotEmpty(e1.Diagnosis); + + list = da1.SameTypeName1(); + Assert.AreNotEqual(0, list.Count); + Assert.IsInstanceOf(typeof(Other.Person), list[0]); + } + + [Test] + public void ParamNullValueIDTest() + { + // Parameter id == 1 will be replaced with NULL + // + Person e1 = _da.ParamNullID(1); + Assert.IsNull(e1); + + // Parameter id == 2 will be send as is + // + Person e2 = _da.ParamNullID(2); + Assert.IsNotNull(e2); + } + + [Test] + public void ParamNullValueNullableIDTest() + { + // Parameter id == 1 will be replaced with NULL + // + Person e1 = _da.ParamNullableID(1); + Assert.IsNull(e1); + e1 = _da.ParamNullableID2(1); + Assert.IsNull(e1); + + // Parameter id == 2 will be send as is + // + Person e2 = _da.ParamNullableID(2); + Assert.IsNotNull(e2); + } + + [Test] + public void ParamNullValueStrTest() + { + // Parameter firstName == 'John' will be replaced with NULL + // + Person e1 = _da.ParamNullString("John", "Pupkin"); + Assert.IsNull(e1); + + // Parameter firstName == 'Tester' will be send as is + // + Person e2 = _da.ParamNullString("Tester", "Testerson"); + Assert.IsNotNull(e2); + } + + [Test] + public void AbstractIndexerTest() + { + using (DbManager db = new DbManager()) + { + Person p = _da[db, 1]; + Assert.AreEqual("John", p.FirstName); + + p.FirstName = "Frog"; + _da[db, 1] = p; + + p = _da[db, 1]; + Assert.AreEqual("Frog", p.FirstName); + + p.FirstName = "John"; + _da[db, 1] = p; + } + } + + + #region IDataReader + + [Test] + public void Gen_SelectAllIDataReader() + { + // Keep connection open for IDataReader + // + using (DbManager db = _da.GetDbManager()) + { + IDataReader dr = _da.SelectAllIDataReader(db); + + Assert.IsNotNull(dr); + Assert.AreNotEqual(0, dr.FieldCount); + Assert.IsTrue(dr.Read()); +#if ORACLE + Assert.AreNotEqual(0, dr.GetDecimal(dr.GetOrdinal("PersonID"))); +#else + Assert.AreNotEqual(0, dr.GetInt32(dr.GetOrdinal("PersonID"))); +#endif + } + } + +#if !ACCESS + [Test] + public void Gen_SelectAllIDataReaderSchemaOnly() + { + // Keep connection open for IDataReader + // + using (DbManager db = _da.GetDbManager()) + { + IDataReader dr = _da.SelectAllIDataReaderSchemaOnly(db); + + Assert.IsNotNull(dr); + Assert.AreNotEqual(0, dr.FieldCount); + Assert.IsFalse(dr.Read()); + } + } +#endif + + #endregion + + #region DataSet + + [Test] + public void Gen_SelectAllDataSet() + { + DataSet ds = _da.SelectAllDataSet(); + Assert.AreNotEqual(0, ds.Tables[0].Rows.Count); + } + + [Test] + public void Gen_SelectAllDataSetWithDestination() + { + IListSource ls = _da.SelectAllDataSetWithDestination(new DataSet()); + Assert.AreNotEqual(0, ls.GetList().Count); + } + + [Test] + public void Gen_SelectAllDataSetReturnVoid() + { + DataSet ds = new DataSet(); + _da.SelectAllDataSetReturnVoid(ds); + Assert.AreNotEqual(0, ds.Tables[0].Rows.Count); + } + + [Test] + public void Gen_SelectAllTypedDataSet() + { + PersonDataSet ds = _da.SelectAllTypedDataSet(); + Assert.AreNotEqual(0, ds.Person.Rows.Count); + } + + [Test] + public void Gen_SelectAllTypedDataSetWithObjectType() + { + object o = _da.SelectAllTypedDataSetWithDestination(new PersonDataSet()); + Assert.IsInstanceOf(typeof(PersonDataSet), o); + + PersonDataSet ds = (PersonDataSet)o; + Assert.AreNotEqual(0, ds.Person.Rows.Count); + } + + [Test] + public void Gen_SelectAllTypedDataSetReturnVoid() + { + PersonDataSet ds = new PersonDataSet(); + _da.SelectAllTypedDataSetReturnVoid(ds); + + Assert.AreNotEqual(0, ds.Person.Rows.Count); + } + + [Test] + public void DataSetTableAttributeTest() + { + DataSet ds = new DataSet(); + + _da.SelectFirstTable (ds); + _da.SelectSecondTable(ds); + + Assert.IsTrue (ds.Tables.Contains("First"), "Table 'First' not found"); + Assert.IsTrue (ds.Tables.Contains("Second"), "Table 'Second' not found"); + Assert.IsFalse(ds.Tables.Contains("Table"), "Table 'Table' was found"); + } + + [Test] + public void DataSetTableAttributeTest2() + { + PersonDataSet ds = new PersonDataSet(); + + _da.SelectFirstTable2 (ds); + _da.SelectSecondTable2(ds); + + // Table 'Person' is dataset own table. + // + Assert.IsTrue (ds.Tables.Contains("Person"), "Table 'Person' not found"); + Assert.IsTrue (ds.Tables.Contains("Second"), "Table 'Second' not found"); + Assert.IsFalse(ds.Tables.Contains("Table"), "Table 'Table' was found"); + } + + #endregion + + #region DataTable + + [Test] + public void Gen_SelectAllDataTable() + { + DataTable dt = _da.SelectAllDataTable(); + Assert.AreNotEqual(0, dt.Rows.Count); + } + + [Test] + public void Gen_SelectAllDataTableWithDestination() + { + DataTable dt = _da.SelectAllDataTableWithDestination(new DataTable()); + Assert.AreNotEqual(0, dt.Rows.Count); + } + + [Test] + public void Gen_SelectAllDataTableReturnVoid() + { + DataTable dt = new DataTable(); + _da.SelectAllDataTableReturnVoid(dt); + Assert.AreNotEqual(0, dt.Rows.Count); + } + + [Test] + public void DataSetTableAttributeTest3() + { + DataTable dt = _da.SelectAllToTablePerson(); + + Assert.AreEqual("Person", dt.TableName); + Assert.AreNotEqual(0, dt.Rows.Count); + } + + [Test] + public void Gen_SelectAllTypedDataTable() + { + PersonDataSet.PersonDataTable dt = _da.SelectAllTypedDataTable(); + Assert.AreNotEqual(0, dt.Rows.Count); + } + + [Test] + public void Gen_SelectAllTypedDataTableReturnVoid() + { + PersonDataSet.PersonDataTable dt = new PersonDataSet.PersonDataTable(); + + _da.SelectAllTypedDataTableReturnVoid(dt); + Assert.AreNotEqual(0, dt.Rows.Count); + } + + #endregion + + #region List + + [Test] + public void Gen_SelectAllList() + { + ArrayList list = _da.SelectAllList(); + Assert.AreNotEqual(0, list.Count); + } + + [Test] + public void Gen_SelectAllListWithDestination() + { + IList list = _da.SelectAllListWithDestination(new ArrayList()); + Assert.AreNotEqual(0, list.Count); + } + + [Test] + public void Gen_SelectAllListReturnVoid() + { + ArrayList list = new ArrayList(); + _da.SelectAllListReturnVoid(list); + Assert.AreNotEqual(0, list.Count); + } + + [Test] + public void Gen_SelectAllIList() + { + IList list = _da.SelectAllAsIList(); + Assert.IsNotEmpty(list); + } + + [Test] + public void Gen_SelectAllListT() + { + List<Person> list = _da.SelectAllListT(); + Assert.AreNotEqual(0, list.Count); + } + + [Test] + public void Gen_SelectAllListTWithObjectType() + { + List<IPerson> list = _da.SelectAllListTWithObjectType(); + Assert.AreNotEqual(0, list.Count); + } + + [Test] + public void Gen_SelectAllListTReturnVoid() + { + List<Person> list = new List<Person>(); + _da.SelectAllListTReturnVoid(list); + Assert.AreNotEqual(0, list.Count); + } + + [Test] + public void Gen_SelectAllListTWithObjectTypeReturnVoid() + { + List<IPerson> list = new List<IPerson>(); + _da.SelectAllListTWithObjectTypeReturnVoid(list); + Assert.AreNotEqual(0, list.Count); + } + + [Test] + public void Gen_SelectAllListTWithDestination() + { + List<IPerson> list = _da.SelectAllListTWithDestination(new List<IPerson>()); + Assert.AreNotEqual(0, list.Count); + } + + [Test] + public void Gen_SelectAllIListT() + { + IList<Person> list = _da.SelectAllAsIListT(); + Assert.IsNotEmpty((ICollection)list); + } + + #endregion + + #region PrepareParameters + + public abstract class MyAssessorBase : DataAccessor + { + // This method will inject an additional parameter into each sproc call + // + protected override IDbDataParameter[] PrepareParameters( + DbManager db, + object[] parameters) + { + ArrayList retParams; + if (parameters != null && parameters.Length != 0) + { + parameters = base.PrepareParameters(db, parameters); + retParams = new ArrayList(parameters.Length + 1); + retParams.AddRange(parameters); + } + else + retParams = new ArrayList(1); + + retParams.Add(db.Parameter((string)db.DataProvider.Convert("ID", db.GetConvertTypeToParameter()), 1)); + + return (IDbDataParameter[]) retParams.ToArray(typeof(IDbDataParameter)); + } + } + + public abstract class MyAssessor : MyAssessorBase + { + public abstract Person SelectByKey(); + } + + [Test] + public void PrepareParametersTest() + { + IPerson i = ((MyAssessor)TypeAccessor + .CreateInstance(typeof (MyAssessor))) + .SelectByKey(); + + Assert.IsNotNull(i); + Assert.AreEqual("John", i.FirstName); + Assert.AreEqual("Pupkin", i.LastName); + } + #endregion + + #region IEnumerable + + [Test] + public void Gen_SelectAllEnumerable() + { + List<Person> list = new List<Person>(); + + foreach (Person p in _da.SelectAllEnumerable()) + list.Add(p); + + Assert.AreNotEqual(0, list.Count); + } + + [Test] + public void Gen_SelectAllEnumerableT() + { + List<Person> list = new List<Person>(); + + foreach (Person p in _da.SelectAllEnumerableT()) + list.Add(p); + + Assert.AreNotEqual(0, list.Count); + } + + [Test] + public void Gen_SelectAllEnumerableTWithObjectType() + { + List<Person> list = new List<Person>(); + + foreach (Person p in _da.SelectAllEnumerableTWithObjectType()) + list.Add(p); + + Assert.AreNotEqual(0, list.Count); + } + + #endregion + + #region Pull Request 121 + + public class Whatever + { + public string Name { get; set; } + public int Age { get; set; } + } + + public class Whatever2 + { + public bool IsFoo { get; set; } + } + + public abstract class SomeDA : DataAccessor<Whatever2> + { + [SqlQuery("select 'Gogi' as Name, 10 as Age")] + public abstract Whatever GetWhatever(); + } + + [Test] + public void TestIssue121() + { + using (var dbm = new DbManager()) + { + var da = DataAccessor.CreateInstance<SomeDA>(dbm); + var foo = da.GetWhatever(); + + Assert.That(foo, Is.InstanceOf<Whatever>()); + } + } + + #endregion + } +} +