drift/drift_dev/test/writer/table_writer_test.dart

130 lines
3.3 KiB
Dart

import 'package:build_test/build_test.dart';
import 'package:test/test.dart';
import '../utils.dart';
void main() {
test('references right parent class for Dart-defined tables', () async {
final result = await emulateDriftBuild(
inputs: {
'a|lib/a.dart': '''
import 'package:drift/drift.dart';
abstract class MyBaseDataClass extends DataClass {}
@DataClassName('MyTag', extending: MyBaseDataClass)
class Tags extends Table {
IntColumn get id => integer().autoIncrement()();
}
''',
},
modularBuild: true,
);
checkOutputs({
'a|lib/a.drift.dart': decodedMatches(
allOf(
contains("import 'package:a/a.dart' as i0;"),
contains(
r'class $TagsTable extends i0.Tags with i2.TableInfo<$TagsTable, i1.MyTag>',
),
contains('class MyTag extends i0.MyBaseDataClass'),
),
),
}, result.dartOutputs, result.writer);
});
test('generates index attached to table in monolithic build', () async {
final result = await emulateDriftBuild(
inputs: {
'a|lib/a.dart': '''
import 'package:drift/drift.dart';
import 'table.dart';
@DriftDatabase(tables: [Tags])
class MyDatabase {}
''',
'a|lib/table.dart': '''
import 'package:drift/drift.dart';
@TableIndex(name: 'tag_id', columns: {#id})
class Tags extends Table {
IntColumn get id => integer().autoIncrement()();
}
''',
},
);
checkOutputs({
'a|lib/a.drift.dart': decodedMatches(allOf(
contains(
"Index tagId = Index('tag_id', 'CREATE INDEX tag_id ON tags (id)')",
),
contains('allSchemaEntities => [tags, tagId]'),
)),
}, result.dartOutputs, result.writer);
});
test('generates index attached to table in same file', () async {
// Regression test for https://github.com/simolus3/drift/discussions/2766
final result = await emulateDriftBuild(
inputs: {
'a|lib/a.dart': '''
import 'package:drift/drift.dart';
@TableIndex(name: 'tag_id', columns: {#id})
class Tags extends Table {
IntColumn get id => integer().autoIncrement()();
}
@DriftDatabase(tables: [Tags])
class MyDatabase {}
''',
},
);
checkOutputs({
'a|lib/a.drift.dart': decodedMatches(allOf(
contains(
"Index tagId = Index('tag_id', 'CREATE INDEX tag_id ON tags (id)')",
),
contains('allSchemaEntities => [tags, tagId]'),
)),
}, result.dartOutputs, result.writer);
});
test('generates index attached to table in modular build', () async {
final result = await emulateDriftBuild(
inputs: {
'a|lib/database.dart': '''
import 'package:drift/drift.dart';
import 'table.dart';
@DriftDatabase(tables: [Tags])
class MyDatabase {}
''',
'a|lib/table.dart': '''
import 'package:drift/drift.dart';
@TableIndex(name: 'tag_id', columns: {#id})
class Tags extends Table {
IntColumn get id => integer().autoIncrement()();
}
''',
},
modularBuild: true,
);
checkOutputs({
'a|lib/database.drift.dart':
decodedMatches(contains('get allSchemaEntities => [tags, i1.tagId]')),
'a|lib/table.drift.dart': decodedMatches(
contains(
"i0.Index get tagId => i0.Index('tag_id', 'CREATE INDEX tag_id ON tags (id)')"),
),
}, result.dartOutputs, result.writer);
});
}