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 } |