Dreamine.FullKit.Tests
1.0.0.0
Dreamine.FullKit.Tests 기능을 검증하는 자동화 테스트 프로젝트입니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
SqliteDatabaseProviderTests.cs
이 파일의 문서화 페이지로 가기
1
using
Dreamine.Database.Abstractions.Mapping;
2
using
Dreamine.Database.Sqlite;
3
4
namespace
Dreamine.FullKit.Tests.Database
;
5
14
public
sealed
class
SqliteDatabaseProviderTests
15
{
24
[Fact]
25
public
void
SqliteProvider_CreatesTableAndRunsCrud
()
26
{
27
using
var database =
TemporarySqliteDatabase
.
Create
();
28
var provider =
new
SqliteDatabaseProvider(database.ConnectionString);
29
30
provider.EnsureDatabaseExists();
31
provider.CreateTable<
SampleUser
>();
32
33
Assert.True(provider.IsTableExists<
SampleUser
>());
34
35
Assert.True(provider.Insert(
new
SampleUser
36
{
37
Id = 1,
38
Name =
"Minsu"
,
39
Age = 30,
40
Ignored =
"not persisted"
41
}));
42
43
var inserted = provider.Query<
SampleUser
>(
"SELECT Id, Name, Age FROM SampleUsers WHERE Id = @Id"
,
new
{ Id = 1 })
44
.Single();
45
46
Assert.Equal(
"Minsu"
, inserted.Name);
47
Assert.Equal(30, inserted.Age);
48
49
inserted.Name =
"Dreamine"
;
50
inserted.Age = 31;
51
52
Assert.True(provider.Update(inserted));
53
Assert.Equal(
"Dreamine"
, provider.ExecuteScalar<
string
>(
"SELECT Name FROM SampleUsers WHERE Id = @Id"
,
new
{ Id = 1 }));
54
55
Assert.True(provider.Delete(inserted));
56
Assert.Equal(0, provider.ExecuteScalar<
long
>(
"SELECT COUNT(1) FROM SampleUsers"
));
57
}
58
67
[Fact]
68
public
void
SqliteProvider_SqlCache_ProducesDeterministicSqlForSameEntityType
()
69
{
70
// Two separate provider instances that share the same static SQL cache.
71
// The observable contract is that the same entity type always produces identical SQL
72
// regardless of which provider instance triggers the build.
73
using
var db1 =
TemporarySqliteDatabase
.
Create
();
74
using
var db2 =
TemporarySqliteDatabase
.
Create
();
75
var p1 =
new
SqliteDatabaseProvider(db1.ConnectionString);
76
var p2 =
new
SqliteDatabaseProvider(db2.ConnectionString);
77
78
var method = typeof(SqliteDatabaseProvider)
79
.BaseType!
80
.GetMethod(
"BuildInsertSql"
, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)!;
81
82
var map =
Dreamine
.Database.Core.Mapping.DatabaseEntityMap.Create<
SampleUser
>();
83
var sql1 = (string)method.Invoke(p1, [map])!;
84
var sql2 = (string)method.Invoke(p2, [map])!;
85
86
Assert.NotEmpty(sql1);
87
Assert.Equal(sql1, sql2);
88
Assert.Contains(
"INSERT INTO"
, sql1);
89
Assert.Contains(
"SampleUsers"
, sql1);
90
}
91
108
[Fact]
109
public
async Task
SqliteProvider_SupportsAsyncOperations
()
110
{
111
using
var database =
TemporarySqliteDatabase
.
Create
();
112
var provider =
new
SqliteDatabaseProvider(database.ConnectionString);
113
114
await provider.EnsureDatabaseExistsAsync();
115
await provider.CreateTableAsync<
SampleUser
>();
116
117
Assert.True(await provider.IsTableExistsAsync<
SampleUser
>());
118
119
var inserted = await provider.InsertAsync(
new
SampleUser
120
{
121
Id = 2,
122
Name =
"Async"
,
123
Age = 7
124
});
125
126
Assert.True(inserted);
127
128
var rows = await provider.QueryAsync<
SampleUser
>(
129
"SELECT Id, Name, Age FROM SampleUsers WHERE Name = @Name"
,
130
new
{ Name =
"Async"
});
131
132
Assert.Single(rows);
133
Assert.Equal(7, rows[0].Age);
134
135
rows[0].
Age
= 8;
136
Assert.True(await provider.UpdateAsync(rows[0]));
137
Assert.Equal(8, await provider.ExecuteScalarAsync<
int
>(
"SELECT Age FROM SampleUsers WHERE Id = @Id"
,
new
{ Id = 2 }));
138
}
139
148
private
sealed
class
TemporarySqliteDatabase
: IDisposable
149
{
166
private
TemporarySqliteDatabase
(
string
path)
167
{
168
Path
= path;
169
ConnectionString
= $
"Data Source={path};Pooling=False"
;
170
}
171
180
public
string
Path
{
get
; }
181
190
public
string
ConnectionString
{
get
; }
191
208
public
static
TemporarySqliteDatabase
Create
()
209
{
210
var path = System.IO.
Path
.Combine(
211
System.IO.Path.GetTempPath(),
212
"Dreamine.Database.Tests"
,
213
Guid.NewGuid().ToString(
"N"
) +
".db"
);
214
215
Directory.CreateDirectory(System.IO.Path.GetDirectoryName(path)!);
216
return
new
TemporarySqliteDatabase
(path);
217
}
218
227
public
void
Dispose
()
228
{
229
if
(File.Exists(
Path
))
230
{
231
File.Delete(
Path
);
232
}
233
}
234
}
235
244
[DatabaseTable(
"SampleUsers"
)]
245
private
sealed
class
SampleUser
246
{
255
[DatabaseKey]
256
public
int
Id
{
get
;
set
; }
257
266
public
string
Name
{
get
;
set
; } =
string
.Empty;
267
276
public
int
Age
{
get
;
set
; }
277
286
[DatabaseIgnore]
287
public
string
?
Ignored
{
get
;
set
; }
288
}
289
}
Dreamine
Definition
DreamineAttributeTests.cs:3
Dreamine.FullKit.Tests.Database
Definition
DatabaseProviderConstructionTests.cs:7
Dreamine.FullKit.Tests.Database.SqliteDatabaseProviderTests
Definition
SqliteDatabaseProviderTests.cs:15
Dreamine.FullKit.Tests.Database.SqliteDatabaseProviderTests.SqliteProvider_SupportsAsyncOperations
async Task SqliteProvider_SupportsAsyncOperations()
Definition
SqliteDatabaseProviderTests.cs:109
Dreamine.FullKit.Tests.Database.SqliteDatabaseProviderTests.SqliteProvider_SqlCache_ProducesDeterministicSqlForSameEntityType
void SqliteProvider_SqlCache_ProducesDeterministicSqlForSameEntityType()
Definition
SqliteDatabaseProviderTests.cs:68
Dreamine.FullKit.Tests.Database.SqliteDatabaseProviderTests.SqliteProvider_CreatesTableAndRunsCrud
void SqliteProvider_CreatesTableAndRunsCrud()
Definition
SqliteDatabaseProviderTests.cs:25
Dreamine.FullKit.Tests.Database.SqliteDatabaseProviderTests.TemporarySqliteDatabase
Definition
SqliteDatabaseProviderTests.cs:149
Dreamine.FullKit.Tests.Database.SqliteDatabaseProviderTests.TemporarySqliteDatabase.Path
string Path
Definition
SqliteDatabaseProviderTests.cs:180
Dreamine.FullKit.Tests.Database.SqliteDatabaseProviderTests.TemporarySqliteDatabase.Create
static TemporarySqliteDatabase Create()
Definition
SqliteDatabaseProviderTests.cs:208
Dreamine.FullKit.Tests.Database.SqliteDatabaseProviderTests.TemporarySqliteDatabase.TemporarySqliteDatabase
TemporarySqliteDatabase(string path)
Definition
SqliteDatabaseProviderTests.cs:166
Dreamine.FullKit.Tests.Database.SqliteDatabaseProviderTests.TemporarySqliteDatabase.ConnectionString
string ConnectionString
Definition
SqliteDatabaseProviderTests.cs:190
Dreamine.FullKit.Tests.Database.SqliteDatabaseProviderTests.TemporarySqliteDatabase.Dispose
void Dispose()
Definition
SqliteDatabaseProviderTests.cs:227
Dreamine.FullKit.Tests.Database.SqliteDatabaseProviderTests.SampleUser
Definition
SqliteDatabaseProviderTests.cs:246
Dreamine.FullKit.Tests.Database.SqliteDatabaseProviderTests.SampleUser.Id
int Id
Definition
SqliteDatabaseProviderTests.cs:256
Dreamine.FullKit.Tests.Database.SqliteDatabaseProviderTests.SampleUser.Age
int Age
Definition
SqliteDatabaseProviderTests.cs:276
Dreamine.FullKit.Tests.Database.SqliteDatabaseProviderTests.SampleUser.Ignored
string? Ignored
Definition
SqliteDatabaseProviderTests.cs:287
Dreamine.FullKit.Tests.Database.SqliteDatabaseProviderTests.SampleUser.Name
string Name
Definition
SqliteDatabaseProviderTests.cs:266
Database
SqliteDatabaseProviderTests.cs
다음에 의해 생성됨 :
1.17.0