2019-06-09 03:12:56 -07:00
|
|
|
import 'package:moor/moor.dart';
|
|
|
|
import 'package:moor/src/runtime/data_class.dart';
|
2019-09-26 13:52:20 -07:00
|
|
|
import 'package:test/test.dart';
|
2019-06-09 03:12:56 -07:00
|
|
|
import 'data/tables/todos.dart';
|
|
|
|
|
2019-12-04 12:45:09 -08:00
|
|
|
final DateTime someDate = DateTime(2019, 06, 08);
|
2019-06-09 03:12:56 -07:00
|
|
|
|
2019-12-04 12:45:09 -08:00
|
|
|
final TodoEntry someTodoEntry = TodoEntry(
|
2019-06-09 03:12:56 -07:00
|
|
|
id: 3,
|
|
|
|
title: 'a title',
|
|
|
|
content: null,
|
|
|
|
targetDate: someDate,
|
|
|
|
category: 3,
|
|
|
|
);
|
|
|
|
|
2019-12-04 12:45:09 -08:00
|
|
|
final Map<String, dynamic> regularSerialized = {
|
2019-06-09 03:12:56 -07:00
|
|
|
'id': 3,
|
|
|
|
'title': 'a title',
|
|
|
|
'content': null,
|
|
|
|
'target_date': someDate.millisecondsSinceEpoch,
|
|
|
|
'category': 3,
|
|
|
|
};
|
|
|
|
|
2019-12-04 12:45:09 -08:00
|
|
|
final Map<String, dynamic> customSerialized = {
|
2019-06-09 03:12:56 -07:00
|
|
|
'id': 3,
|
|
|
|
'title': 'a title',
|
|
|
|
'content': 'set to null',
|
|
|
|
'target_date': someDate.toIso8601String(),
|
|
|
|
'category': 3,
|
|
|
|
};
|
|
|
|
|
|
|
|
class CustomSerializer extends ValueSerializer {
|
|
|
|
@override
|
2019-12-04 12:45:09 -08:00
|
|
|
T fromJson<T>(dynamic json) {
|
2019-06-09 03:12:56 -07:00
|
|
|
if (T == DateTime) {
|
|
|
|
return DateTime.parse(json.toString()) as T;
|
|
|
|
} else if (json == 'set to null') {
|
|
|
|
return null;
|
|
|
|
} else {
|
|
|
|
return json as T;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
2019-12-04 12:45:09 -08:00
|
|
|
dynamic toJson<T>(T value) {
|
2019-06-09 03:12:56 -07:00
|
|
|
if (T == DateTime) {
|
|
|
|
return (value as DateTime).toIso8601String();
|
|
|
|
} else if (value == null) {
|
|
|
|
return 'set to null';
|
|
|
|
} else {
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void main() {
|
2019-06-27 00:37:51 -07:00
|
|
|
test('default serializer', () {
|
2019-12-04 12:45:09 -08:00
|
|
|
const serializer = ValueSerializer.defaults();
|
2019-06-27 00:37:51 -07:00
|
|
|
expect(serializer.toJson<DateTime>(null), null);
|
|
|
|
expect(serializer.fromJson<DateTime>(null), null);
|
|
|
|
});
|
|
|
|
|
2019-06-09 03:12:56 -07:00
|
|
|
group('serialization', () {
|
|
|
|
test('with defaults', () {
|
|
|
|
expect(someTodoEntry.toJson(), equals(regularSerialized));
|
|
|
|
});
|
|
|
|
|
|
|
|
test('with custom serializer', () {
|
|
|
|
expect(someTodoEntry.toJson(serializer: CustomSerializer()),
|
|
|
|
equals(customSerialized));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
group('deserialization', () {
|
|
|
|
test('with defaults', () {
|
|
|
|
expect(TodoEntry.fromJson(regularSerialized), equals(someTodoEntry));
|
|
|
|
});
|
|
|
|
|
|
|
|
test('with custom serializer', () {
|
|
|
|
expect(
|
|
|
|
TodoEntry.fromJson(customSerialized, serializer: CustomSerializer()),
|
|
|
|
equals(someTodoEntry));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|