2020-02-03 10:13:51 -08:00
|
|
|
import 'package:moor/moor.dart';
|
|
|
|
import 'package:test/test.dart';
|
|
|
|
|
|
|
|
import '../data/tables/todos.dart';
|
|
|
|
import '../data/utils/mocks.dart';
|
|
|
|
|
|
|
|
void main() {
|
|
|
|
MockExecutor read, write;
|
|
|
|
MultiExecutor multi;
|
|
|
|
TodoDb db;
|
|
|
|
|
|
|
|
setUp(() {
|
|
|
|
read = MockExecutor();
|
|
|
|
write = MockExecutor();
|
|
|
|
|
|
|
|
multi = MultiExecutor(read: read, write: write);
|
|
|
|
db = TodoDb(multi);
|
|
|
|
});
|
|
|
|
|
|
|
|
test('opens delegated executors when opening', () async {
|
2020-03-15 06:55:02 -07:00
|
|
|
await multi.ensureOpen(db);
|
2020-02-03 10:13:51 -08:00
|
|
|
|
2020-03-15 06:55:02 -07:00
|
|
|
verify(read.ensureOpen(argThat(isNot(db))));
|
|
|
|
verify(write.ensureOpen(db));
|
2020-02-03 10:13:51 -08:00
|
|
|
});
|
|
|
|
|
|
|
|
test('runs selects on the reading executor', () async {
|
2020-03-15 06:55:02 -07:00
|
|
|
await multi.ensureOpen(db);
|
2020-02-03 10:13:51 -08:00
|
|
|
|
|
|
|
when(read.runSelect(any, any)).thenAnswer((_) async {
|
|
|
|
return [
|
|
|
|
{'foo': 'bar'}
|
|
|
|
];
|
|
|
|
});
|
|
|
|
|
|
|
|
final result = await multi.runSelect('statement', [1, 2]);
|
|
|
|
|
|
|
|
verify(read.runSelect('statement', [1, 2]));
|
|
|
|
verifyNever(write.runSelect(any, any));
|
|
|
|
|
|
|
|
expect(result, [
|
|
|
|
{'foo': 'bar'}
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
|
|
|
test('runs updates on the writing executor', () async {
|
2020-03-15 06:55:02 -07:00
|
|
|
await multi.ensureOpen(db);
|
2020-02-03 10:13:51 -08:00
|
|
|
|
|
|
|
await multi.runUpdate('update', []);
|
|
|
|
await multi.runInsert('insert', []);
|
|
|
|
await multi.runDelete('delete', []);
|
|
|
|
await multi.runBatched([]);
|
|
|
|
|
|
|
|
verify(write.runUpdate('update', []));
|
|
|
|
verify(write.runInsert('insert', []));
|
|
|
|
verify(write.runDelete('delete', []));
|
|
|
|
verify(write.runBatched([]));
|
|
|
|
});
|
|
|
|
|
|
|
|
test('runs transactions on the writing executor', () async {
|
2020-03-15 06:55:02 -07:00
|
|
|
await multi.ensureOpen(db);
|
2020-02-03 10:13:51 -08:00
|
|
|
|
2020-03-15 06:55:02 -07:00
|
|
|
final transaction = multi.beginTransaction();
|
|
|
|
await transaction.ensureOpen(db);
|
|
|
|
await transaction.runSelect('select', []);
|
2020-02-03 10:13:51 -08:00
|
|
|
|
|
|
|
verify(write.beginTransaction());
|
2020-03-15 06:55:02 -07:00
|
|
|
verify(write.transactions.ensureOpen(any));
|
2020-02-03 10:13:51 -08:00
|
|
|
verify(write.transactions.runSelect('select', []));
|
|
|
|
});
|
|
|
|
}
|