mirror of https://github.com/AMT-Cheif/drift.git
59 lines
1.5 KiB
Dart
59 lines
1.5 KiB
Dart
|
import 'package:moor/moor.dart';
|
||
|
import 'package:test_api/test_api.dart';
|
||
|
|
||
|
import 'data/tables/todos.dart';
|
||
|
import 'data/utils/mocks.dart';
|
||
|
|
||
|
void main() {
|
||
|
TodoDb db;
|
||
|
MockExecutor executor;
|
||
|
MockStreamQueries streamQueries;
|
||
|
|
||
|
setUp(() {
|
||
|
executor = MockExecutor();
|
||
|
streamQueries = MockStreamQueries();
|
||
|
db = TodoDb(executor)..streamQueries = streamQueries;
|
||
|
});
|
||
|
|
||
|
test('generates insert statements', () async {
|
||
|
await db.into(db.todosTable).insert(TodoEntry(
|
||
|
content: 'Implement insert statements',
|
||
|
));
|
||
|
|
||
|
verify(executor.runInsert('INSERT INTO todos (content) VALUES (?)',
|
||
|
['Implement insert statements']));
|
||
|
});
|
||
|
|
||
|
test('generates insert or replace statements', () async {
|
||
|
await db.into(db.todosTable).insertOrReplace(TodoEntry(
|
||
|
id: 113,
|
||
|
content: 'Done',
|
||
|
));
|
||
|
|
||
|
verify(executor.runInsert(
|
||
|
'INSERT OR REPLACE INTO todos (id, content) VALUES (?, ?)',
|
||
|
[113, 'Done']));
|
||
|
});
|
||
|
|
||
|
test('notifies stream queries on inserts', () async {
|
||
|
await db.into(db.users).insert(User(
|
||
|
name: 'User McUserface',
|
||
|
isAwesome: true,
|
||
|
profilePicture: Uint8List(0),
|
||
|
));
|
||
|
|
||
|
verify(streamQueries.handleTableUpdates({'users'}));
|
||
|
});
|
||
|
|
||
|
test('enforces data integrety', () {
|
||
|
expect(
|
||
|
db.into(db.todosTable).insert(
|
||
|
TodoEntry(
|
||
|
content: null, // not declared as nullable in table definition
|
||
|
),
|
||
|
),
|
||
|
throwsA(const TypeMatcher<InvalidDataException>()),
|
||
|
);
|
||
|
});
|
||
|
}
|