44using PetaPoco . Providers ;
55using PetaPoco ;
66using System . Data ;
7- using SQLDatabase . Net . SQLDatabaseClient ;
87using StaTypPocoQueries . PetaPoco ;
98using FluentAssertions ;
109using System . Data . Common ;
10+ using Moq ;
11+ using System . Collections . Generic ;
12+ using AutoFixture . Xunit2 ;
1113
1214namespace StaTypPocoQueries . PetaPoco . Tests
1315{
@@ -20,62 +22,40 @@ namespace StaTypPocoQueries.PetaPoco.Tests
2022 * just to test that. Delete needs to be tested separately.
2123 */
2224
23- public class QueryTests : IDisposable
25+ public class QueryTests
2426 {
2527 private class MyClass
2628 {
2729 public int ID { get ; set ; }
2830 public string Name { get ; set ; }
2931 }
3032
31- private class SqlDatabaseProvider : DatabaseProvider
32- {
33- public override DbProviderFactory GetFactory ( ) => null ;
34- }
35-
36- private IDbConnection _conn ;
33+ private Mock < IDatabase > _mockDb ;
34+ private Sql _lastSql ;
3735
3836 public QueryTests ( )
3937 {
40- DatabaseProvider . RegisterCustomProvider < SqlDatabaseProvider > ( "SQLD" ) ;
41-
42- _conn = new SqlDatabaseConnection ( "SchemaName=PetaPoco;uri=@memory" ) ;
43- _conn . Open ( ) ;
44-
45- // Create an empty table, since we don't care about the results
46- var cmd = _conn . CreateCommand ( ) ;
47- cmd . CommandType = CommandType . Text ;
48- cmd . CommandText = "CREATE TABLE MYCLASS (ID INTEGER INTEGER NOT NULL, NAME TEXT)" ;
49- cmd . ExecuteNonQuery ( ) ;
38+ _mockDb = new Mock < IDatabase > ( ) ;
39+ _mockDb . Setup ( m => m . Query < MyClass > ( It . IsAny < Sql > ( ) ) )
40+ . Returns ( new List < MyClass > ( ) )
41+ . Callback < Sql > ( s => _lastSql = s ) ;
42+ _mockDb . Setup ( m => m . Delete < MyClass > ( It . IsAny < Sql > ( ) ) )
43+ . Callback < Sql > ( s => _lastSql = s ) ;
44+ _mockDb . Setup ( m => m . Provider ) . Returns ( new AngleDatabaseProvider ( ) ) ;
5045 }
5146
52- public void Dispose ( )
53- {
54- _conn . Dispose ( ) ;
47+ [ Theory , AutoData ]
48+ public void Query ( int id )
49+ {
50+ _mockDb . Object . Query < MyClass > ( c => c . ID == id ) ;
51+ _lastSql . Should ( ) . BeEquivalentTo ( new Sql ( "WHERE <ID> = @0" , id ) ) ;
5552 }
5653
57- [ Fact ]
58- public void Query ( )
54+ [ Theory , AutoData ]
55+ public void Delete ( string name )
5956 {
60- using ( var db = new Database ( _conn ) )
61- {
62- db . Fetch < MyClass > ( c => c . ID == 4 ) ;
63-
64- db . LastSQL . Should ( ) . Be ( "SELECT [MyClass].[ID], [MyClass].[Name] FROM [MyClass] WHERE [ID] = @0" ) ;
65- db . LastArgs . Should ( ) . BeEquivalentTo ( 4 ) ;
66- }
67- }
68-
69- [ Fact ]
70- public void Delete ( )
71- {
72- using ( var db = new Database ( _conn ) )
73- {
74- db . Delete < MyClass > ( c => c . Name == "Bob" ) ;
75-
76- db . LastSQL . Should ( ) . Be ( "DELETE FROM [MyClass]\n WHERE [Name] = @0" ) ;
77- db . LastArgs . Should ( ) . BeEquivalentTo ( new [ ] { "Bob" } ) ;
78- }
57+ _mockDb . Object . Delete < MyClass > ( c => c . Name == name ) ;
58+ _lastSql . Should ( ) . BeEquivalentTo ( new Sql ( "WHERE <Name> = @0" , name ) ) ;
7959 }
8060 }
8161}
0 commit comments