drift/drift_dev/test/analysis/resolver/dart/index_test.dart

62 lines
1.7 KiB
Dart

import 'package:drift_dev/src/analysis/results/results.dart';
import 'package:test/test.dart';
import '../../test_utils.dart';
void main() {
test('resolves index', () async {
final backend = await TestBackend.inTest({
'a|lib/a.dart': '''
import 'package:drift/drift.dart';
@TableIndex(columns: {#a}, name: 'tbl_a')
@TableIndex(columns: {#b, #c}, name: 'tbl_bc', unique: true)
class MyTable extends Table {
IntColumn get a => integer()();
TextColumn get b => text()();
TextColumn get c => text()();
}
''',
});
final file = await backend.analyze('package:a/a.dart');
backend.expectNoErrors();
final elements = file.analyzedElements;
final table = elements.whereType<DriftTable>().first;
final indexA = file.analysis[file.id('tbl_a')]!.result as DriftIndex;
final indexBC = file.analysis[file.id('tbl_bc')]!.result as DriftIndex;
expect(indexA.table, table);
expect(indexA.unique, false);
expect(indexA.indexedColumns, [table.columnBySqlName['a']]);
expect(indexBC.table, table);
expect(indexBC.unique, true);
expect(indexBC.indexedColumns, [
table.columnBySqlName['b'],
table.columnBySqlName['c'],
]);
});
test('warns about missing columns', () async {
final backend = await TestBackend.inTest({
'a|lib/a.dart': '''
import 'package:drift/drift.dart';
@TableIndex(columns: {#foo}, name: 'tbl_a')
class MyTable extends Table {
IntColumn get a => integer()();
}
''',
});
final file = await backend.analyze('package:a/a.dart');
expect(file.allErrors, [
isDriftError(
'Column `foo`, referenced in index `tbl_a`, was not found in the table.')
]);
});
}