drift/sally/test/queries_test.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)));
});
});
}