mirror of https://github.com/AMT-Cheif/drift.git
96 lines
2.7 KiB
Dart
96 lines
2.7 KiB
Dart
import 'package:sally/sally.dart';
|
|
import 'package:sally/src/queries/predicates/predicate.dart';
|
|
import 'package:sally/src/queries/table_structure.dart';
|
|
import 'package:test_api/test_api.dart';
|
|
import 'package:mockito/mockito.dart';
|
|
|
|
class MockExecutor extends Mock implements QueryExecutor {}
|
|
|
|
class Users extends Table {
|
|
IntColumn get id => integer().autoIncrement()();
|
|
TextColumn get name => text().withLength(min: 6, max: 32)();
|
|
BoolColumn get isAwesome => boolean()();
|
|
}
|
|
|
|
// Example tables and data classes, these would be generated by sally_generator
|
|
// in a real project
|
|
class UserDataObject {
|
|
final int id;
|
|
final String name;
|
|
UserDataObject(this.id, this.name);
|
|
}
|
|
|
|
class GeneratedUsersTable extends Users
|
|
with TableStructure<Users, UserDataObject> {
|
|
@override
|
|
Users get asTable => this;
|
|
@override
|
|
UserDataObject parse(Map<String, dynamic> result) {
|
|
return UserDataObject(result["id"], result["name"]);
|
|
}
|
|
|
|
@override
|
|
String get sqlTableName => "users";
|
|
|
|
IntColumn id = StructuredIntColumn("id");
|
|
TextColumn name = StructuredTextColumn("name");
|
|
BoolColumn isAwesome = StructuredBoolColumn("is_awesome");
|
|
}
|
|
|
|
void main() {
|
|
GeneratedUsersTable users;
|
|
MockExecutor executor;
|
|
|
|
setUp(() {
|
|
users = GeneratedUsersTable();
|
|
executor = MockExecutor();
|
|
users.executor = executor;
|
|
|
|
when(executor.executeQuery(any, any)).thenAnswer((_) => Future.value([]));
|
|
});
|
|
|
|
group("Generates SELECT statements", () {
|
|
test("generates simple statements", () {
|
|
users.select().get();
|
|
verify(executor.executeQuery("SELECT * FROM users ", any));
|
|
});
|
|
|
|
test("generates limit statements", () {
|
|
(users.select()..limit(amount: 10)).get();
|
|
verify(executor.executeQuery("SELECT * FROM users LIMIT 10 ", any));
|
|
});
|
|
|
|
test("generates like expressions", () {
|
|
(users.select()..where((u) => u.name.like("Dash%"))).get();
|
|
verify(executor
|
|
.executeQuery("SELECT * FROM users WHERE name LIKE ? ", ["Dash%"]));
|
|
});
|
|
|
|
test("generates complex predicates", () {
|
|
(users.select()
|
|
..where(
|
|
(u) => not(u.name.equals("Dash")).and(u.id.isBiggerThan(12))))
|
|
.get();
|
|
|
|
verify(executor.executeQuery(
|
|
"SELECT * FROM users WHERE (NOT name = ? ) AND (id > ? ) ",
|
|
["Dash", 12]));
|
|
});
|
|
|
|
test("generates expressions from boolean fields", () {
|
|
(users.select()..where((u) => u.isAwesome.isTrue())).get();
|
|
|
|
verify(executor.executeQuery(
|
|
"SELECT * FROM users WHERE is_awesome = 1", any));
|
|
});
|
|
});
|
|
|
|
group("Generates DELETE statements", () {
|
|
test("without any constaints", () {
|
|
users.delete().performDelete();
|
|
|
|
verify(executor.executeDelete("DELETE FROM users ", argThat(isEmpty)));
|
|
});
|
|
});
|
|
}
|