Skip to content

Commit

Permalink
complete unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mqus committed Apr 19, 2021
1 parent f284677 commit 30b421b
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 0 deletions.
19 changes: 19 additions & 0 deletions floor_generator/test/misc/extension/sql_type_extension_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import 'package:floor_generator/misc/constants.dart';
import 'package:floor_generator/misc/extension/sql_type_extension.dart';
import 'package:sqlparser/sqlparser.dart';
import 'package:test/test.dart';

void main() {
group('convert string to basicType', () {
test('text',
() => expect(SqlType.text.toBasicType(), equals(BasicType.text)));
test('integer',
() => expect(SqlType.integer.toBasicType(), equals(BasicType.int)));
test('real',
() => expect(SqlType.real.toBasicType(), equals(BasicType.real)));
test('blob',
() => expect(SqlType.blob.toBasicType(), equals(BasicType.blob)));
test('throws on arbitrary string',
() => expect(() => ''.toBasicType(), throwsArgumentError));
});
}
72 changes: 72 additions & 0 deletions floor_generator/test/processor/query_method_processor_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'package:build_test/build_test.dart';
import 'package:floor_annotation/floor_annotation.dart' as annotations;
import 'package:floor_generator/misc/type_utils.dart';
import 'package:floor_generator/processor/entity_processor.dart';
import 'package:floor_generator/processor/error/processor_error.dart';
import 'package:floor_generator/processor/error/query_method_processor_error.dart';
import 'package:floor_generator/processor/error/query_processor_error.dart';
import 'package:floor_generator/processor/query_analyzer/engine.dart';
Expand Down Expand Up @@ -347,6 +348,77 @@ void main() {
expect(actual, throwsInvalidGenerationSourceError(error));
});

test('normal parser exception when query string is malformed', () async {
final methodElement = await _createQueryMethodElement('''
@Query('FROM Person SELECT 1')
Future<List<Person>> findAllPersons();
''');

final actual = () => QueryMethodProcessor(
methodElement, [...entities, ...views], {}, analyzer)
.process();
expect(
actual,
throwsProcessorErrorWithMessagePrefix(ProcessorError(
message: 'The query contained parser errors:',
todo: '',
element: methodElement)));
});

test('parser exception when query string has more than one query',
() async {
final methodElement = await _createQueryMethodElement('''
@Query('SELECT 1;SELECT 2')
Future<List<Person>> findAllPersons();
''');

final actual = () => QueryMethodProcessor(
methodElement, [...entities, ...views], {}, analyzer)
.process();
expect(
actual,
throwsProcessorErrorWithMessagePrefix(ProcessorError(
message: 'The query contained parser errors:',
todo: '',
element: methodElement)));
});

test('analyzer exception when query string contains unknown entity',
() async {
final methodElement = await _createQueryMethodElement('''
@Query('SELECT 1 FROM UnknownTable')
Future<List<Person>> findAllPersons();
''');

final actual = () => QueryMethodProcessor(
methodElement, [...entities, ...views], {}, analyzer)
.process();
expect(
actual,
throwsProcessorErrorWithMessagePrefix(ProcessorError(
message: 'The query contained analyzer errors:',
todo: '',
element: methodElement)));
});

test('analyzer exception when query string references unknown column',
() async {
final methodElement = await _createQueryMethodElement('''
@Query('SELECT unknownColumn FROM Person')
Future<List<int>> findAllPersons();
''');

final actual = () => QueryMethodProcessor(
methodElement, [...entities, ...views], {}, analyzer)
.process();
expect(
actual,
throwsProcessorErrorWithMessagePrefix(ProcessorError(
message: 'The query contained analyzer errors:',
todo: '',
element: methodElement)));
});

test(
'exception when query arguments do not match method parameters, no list vs list',
() async {
Expand Down

0 comments on commit 30b421b

Please sign in to comment.