Mercurial > pub > bltoolkit
comparison UnitTests/CS/DataAccess/SqlTest.cs @ 0:f990fcb411a9
Копия текущей версии из github
| author | cin |
|---|---|
| date | Thu, 27 Mar 2014 21:46:09 +0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:f990fcb411a9 |
|---|---|
| 1 using System; | |
| 2 | |
| 3 using NUnit.Framework; | |
| 4 | |
| 5 using BLToolkit.Data; | |
| 6 using BLToolkit.Data.DataProvider; | |
| 7 using BLToolkit.DataAccess; | |
| 8 using BLToolkit.Mapping; | |
| 9 using System.Linq; | |
| 10 | |
| 11 namespace DataAccess | |
| 12 { | |
| 13 [TestFixture] | |
| 14 public class SqlTest | |
| 15 { | |
| 16 public class Name | |
| 17 { | |
| 18 public string LastName; | |
| 19 public string FirstName; | |
| 20 public string MiddleName; | |
| 21 } | |
| 22 | |
| 23 public class Person | |
| 24 { | |
| 25 [MapField("PersonID"), PrimaryKey] | |
| 26 public int ID; | |
| 27 [MapField(Format="{0}")] | |
| 28 public Name Name = new Name(); | |
| 29 | |
| 30 [SqlIgnore] | |
| 31 public string Gender; | |
| 32 } | |
| 33 | |
| 34 [Test] | |
| 35 public void Test() | |
| 36 { | |
| 37 var da = new SqlQuery(); | |
| 38 var p = (Person)da.SelectByKey(typeof(Person), 1); | |
| 39 | |
| 40 Assert.AreEqual("Pupkin", p.Name.LastName); | |
| 41 } | |
| 42 | |
| 43 [Test] | |
| 44 public void GetFieldListTest() | |
| 45 { | |
| 46 var da = new SqlQuery(); | |
| 47 | |
| 48 using (var db = new DbManager()) | |
| 49 { | |
| 50 var info = da.GetSqlQueryInfo(db, typeof (Person), "SelectAll"); | |
| 51 | |
| 52 Console.WriteLine(info.QueryText); | |
| 53 Assert.That(info.QueryText.Contains("\t" + db.DataProvider.Convert("PersonID", ConvertType.NameToQueryField))); | |
| 54 Assert.That(info.QueryText.Contains("\t" + db.DataProvider.Convert("LastName", ConvertType.NameToQueryField))); | |
| 55 Assert.That(info.QueryText, Is.Not.Contains("\t" + db.DataProvider.Convert("Name", ConvertType.NameToQueryField))); | |
| 56 } | |
| 57 } | |
| 58 | |
| 59 [MapField("InnerId", "InnerObject.Id")] | |
| 60 public class TestObject | |
| 61 { | |
| 62 public int Id; | |
| 63 public TestObject InnerObject; | |
| 64 } | |
| 65 | |
| 66 [Test] | |
| 67 public void RecursiveTest() | |
| 68 { | |
| 69 var query = new SqlQuery<TestObject>(); | |
| 70 var info = query.GetSqlQueryInfo(new DbManager(), "SelectAll"); | |
| 71 | |
| 72 Console.WriteLine(info.QueryText); | |
| 73 Assert.That(info.QueryText.Contains("InnerId")); | |
| 74 Assert.That(info.QueryText, Is.Not.Contains("InnerObject")); | |
| 75 } | |
| 76 | |
| 77 [Test] | |
| 78 public void SqlIgnoreAttributeTest() | |
| 79 { | |
| 80 var da = new SqlQuery(); | |
| 81 var p = (Person)da.SelectByKey(typeof(Person), 1); | |
| 82 | |
| 83 Assert.IsNull(p.Gender); | |
| 84 } | |
| 85 | |
| 86 public class TestCategory | |
| 87 { | |
| 88 [PrimaryKey, NonUpdatable] | |
| 89 public int Id; | |
| 90 public string Name; | |
| 91 } | |
| 92 | |
| 93 [MapField("CategoryId", "Category.Id")] | |
| 94 public class TestObject2 | |
| 95 { | |
| 96 [PrimaryKey, NonUpdatable] | |
| 97 public int Id; | |
| 98 public TestCategory Category; | |
| 99 } | |
| 100 | |
| 101 [Test] | |
| 102 public void NonUpdatableTest() | |
| 103 { | |
| 104 var da = new SqlQuery(); | |
| 105 | |
| 106 using (var db = new DbManager()) | |
| 107 { | |
| 108 var update = da.GetSqlQueryInfo<TestCategory>(db, "Update"); | |
| 109 var insert = da.GetSqlQueryInfo<TestCategory>(db, "Insert"); | |
| 110 | |
| 111 Assert.That(update.QueryText, Is.Not.Contains( | |
| 112 "\t" + db.DataProvider.Convert("Id", ConvertType.NameToQueryField) + " = " + db.DataProvider.Convert("Id", db.GetConvertTypeToParameter()) + "\n"), | |
| 113 "Update"); | |
| 114 Assert.That(insert.QueryText, Is.Not.Contains("Id"), "Insert"); | |
| 115 } | |
| 116 } | |
| 117 | |
| 118 [Test] | |
| 119 public void ComplexMapperNonUpdatableTest() | |
| 120 { | |
| 121 var da = new SqlQuery(); | |
| 122 | |
| 123 using (var db = new DbManager()) | |
| 124 { | |
| 125 var update = da.GetSqlQueryInfo<TestObject2>(db, "Update"); | |
| 126 var insert = da.GetSqlQueryInfo<TestObject2>(db, "Insert"); | |
| 127 | |
| 128 Assert.That(update.QueryText.Contains("CategoryId"), "Update"); | |
| 129 Assert.That(insert.QueryText.Contains("CategoryId"), "Insert"); | |
| 130 } | |
| 131 } | |
| 132 | |
| 133 [TableName("DataTypeTest")] | |
| 134 class UpdateTest | |
| 135 { | |
| 136 [PrimaryKey] public Guid Guid_; | |
| 137 | |
| 138 public UpdateTest(Guid guid) | |
| 139 { | |
| 140 Guid_ = guid; | |
| 141 } | |
| 142 } | |
| 143 | |
| 144 [Test, ExpectedException(typeof(DataAccessException))] | |
| 145 public void UpdateGuid() | |
| 146 { | |
| 147 new SqlQuery<UpdateTest>().Update(new UpdateTest(Guid.NewGuid())); | |
| 148 } | |
| 149 | |
| 150 [TableName("Person")] | |
| 151 public class Person1 | |
| 152 { | |
| 153 [Identity, PrimaryKey] public int PersonID; | |
| 154 public string FirstName; | |
| 155 public string LastName; | |
| 156 [NonUpdatable(OnInsert=false)] public string MiddleName; | |
| 157 public char Gender; | |
| 158 } | |
| 159 | |
| 160 [Test] | |
| 161 public void NonUpdatableOnUpdate() | |
| 162 { | |
| 163 using (var db = new DbManager()) | |
| 164 { | |
| 165 db.BeginTransaction(); | |
| 166 | |
| 167 var person = new Person1 | |
| 168 { | |
| 169 FirstName = "TestOnInsert", | |
| 170 LastName = "", | |
| 171 MiddleName = "1", | |
| 172 Gender = 'M' | |
| 173 }; | |
| 174 | |
| 175 var sqlQuery = new SqlQuery<Person1>(); | |
| 176 | |
| 177 sqlQuery.Insert(db, person); | |
| 178 | |
| 179 var p = db.GetTable<Person1>().Single(_ => _.FirstName == "TestOnInsert"); | |
| 180 | |
| 181 Assert.AreEqual(person.MiddleName, p.MiddleName); | |
| 182 | |
| 183 person.PersonID = p.PersonID; | |
| 184 person.MiddleName = "should not be updated"; | |
| 185 | |
| 186 sqlQuery.Update(db, person); | |
| 187 | |
| 188 p = db.GetTable<Person1>().Single(_ => _.FirstName == "TestOnInsert"); | |
| 189 | |
| 190 Assert.AreNotEqual(person.MiddleName, p.MiddleName); | |
| 191 | |
| 192 db.RollbackTransaction(); | |
| 193 } | |
| 194 } | |
| 195 | |
| 196 [TableName("Person")] | |
| 197 [Identity(FieldName = "PersonID")] | |
| 198 [NonUpdatable(OnInsert = false, FieldName = "MiddleName")] | |
| 199 public class Person2 | |
| 200 { | |
| 201 [PrimaryKey] public int PersonID; | |
| 202 [NonUpdatable(OnUpdate = false)] public string FirstName; | |
| 203 public string MiddleName; | |
| 204 public string Gender; | |
| 205 } | |
| 206 | |
| 207 [Test] | |
| 208 public void NonUpdatableOnClass() | |
| 209 { | |
| 210 var da = new SqlQuery(); | |
| 211 | |
| 212 using (var db = new DbManager()) | |
| 213 { | |
| 214 var update = da.GetSqlQueryInfo<Person2>(db, "Update"); | |
| 215 var insert = da.GetSqlQueryInfo<Person2>(db, "Insert"); | |
| 216 | |
| 217 var personID = "\t" + db.DataProvider.Convert("PersonID", ConvertType.NameToQueryField).ToString(); | |
| 218 var middleName = "\t" + db.DataProvider.Convert("MiddleName", ConvertType.NameToQueryField).ToString(); | |
| 219 var firstName = "\t" + db.DataProvider.Convert("FirstName", ConvertType.NameToQueryField).ToString(); | |
| 220 | |
| 221 var personID_P = " = " + db.DataProvider.Convert("PersonID_P", ConvertType.NameToQueryParameter).ToString(); | |
| 222 var middleName_P = " = " + db.DataProvider.Convert("MiddleName_P", ConvertType.NameToQueryParameter).ToString(); | |
| 223 var firstName_P = " = " + db.DataProvider.Convert("FirstName_P", ConvertType.NameToQueryParameter).ToString(); | |
| 224 | |
| 225 Assert.That(update.QueryText, Is.Not.Contains(personID + personID_P), "personId\n" + update.QueryText); | |
| 226 Assert.That(update.QueryText, Is.Not.Contains(middleName + middleName_P), "middleName\n" + update.QueryText); | |
| 227 Assert.That(update.QueryText.Contains(firstName + firstName_P), "firstName\n" + update.QueryText); | |
| 228 | |
| 229 Assert.That(insert.QueryText, Is.Not.Contains(personID), "personId\n" + insert.QueryText); | |
| 230 Assert.That(insert.QueryText, Is.Not.Contains(firstName), "firstName\n" + insert.QueryText); | |
| 231 Assert.That(insert.QueryText.Contains(middleName), "middleName\n" + insert.QueryText); | |
| 232 } | |
| 233 } | |
| 234 } | |
| 235 } |
