service map tests
This commit is contained in:
parent
82b32318e8
commit
86152f7a04
3 changed files with 84 additions and 1 deletions
|
@ -1,3 +1,6 @@
|
|||
# 2.0.0-alpha.9
|
||||
* Add `Service.map`.
|
||||
|
||||
# 2.0.0-alpha.8
|
||||
* No longer export HTTP-specific code from `angel_framework.dart`.
|
||||
An import of `import 'package:angel_framework/http.dart';` will be necessary in most cases now.
|
||||
|
|
|
@ -127,7 +127,7 @@ class Service<Id, Data> extends Routable {
|
|||
|
||||
/// Creates an [AnonymousService] that wraps over this one, and maps input and output
|
||||
/// using two converter functions.
|
||||
///
|
||||
///
|
||||
/// Handy utility for handling data in a type-safe manner.
|
||||
Service<Id, U> map<U>(U Function(Data) encoder, Data Function(U) decoder) {
|
||||
return new AnonymousService<Id, U>(
|
||||
|
|
80
test/service_map_test.dart
Normal file
80
test/service_map_test.dart
Normal file
|
@ -0,0 +1,80 @@
|
|||
import 'package:angel_framework/angel_framework.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
void main() {
|
||||
MapService inner;
|
||||
Service<String, Todo> mapped;
|
||||
|
||||
setUp(() {
|
||||
inner = new MapService();
|
||||
mapped = inner.map<Todo>(Todo.fromMap, Todo.toMap);
|
||||
});
|
||||
|
||||
test('create', () async {
|
||||
var result = await mapped.create(
|
||||
new Todo(text: 'hello', complete: false),
|
||||
);
|
||||
print(result);
|
||||
expect(
|
||||
result,
|
||||
new Todo(text: 'hello', complete: false),
|
||||
);
|
||||
});
|
||||
|
||||
group('after create', () {
|
||||
Todo result;
|
||||
String id;
|
||||
|
||||
setUp(() async {
|
||||
result = await mapped.create(new Todo(text: 'hello', complete: false));
|
||||
id = result.id;
|
||||
});
|
||||
|
||||
test('index', () async {
|
||||
expect(await mapped.index(), [result]);
|
||||
});
|
||||
|
||||
test('modify', () async {
|
||||
var newTodo = new Todo(text: 'yes', complete: true);
|
||||
expect(await mapped.update(id, newTodo), newTodo);
|
||||
});
|
||||
|
||||
test('update', () async {
|
||||
var newTodo = new Todo(id: 'hmmm', text: 'yes', complete: true);
|
||||
expect(await mapped.update(id, newTodo), newTodo);
|
||||
});
|
||||
|
||||
test('read', () async {
|
||||
expect(await mapped.read(id), result);
|
||||
});
|
||||
|
||||
test('remove', () async {
|
||||
expect(await mapped.remove(id), result);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
class Todo {
|
||||
final String id, text;
|
||||
final bool complete;
|
||||
|
||||
Todo({this.id, this.text, this.complete});
|
||||
|
||||
static Todo fromMap(Map<String, dynamic> json) {
|
||||
return new Todo(
|
||||
id: json['id'] as String,
|
||||
text: json['text'] as String,
|
||||
complete: json['complete'] as bool);
|
||||
}
|
||||
|
||||
static Map<String, dynamic> toMap(Todo model) {
|
||||
return {'id': model.id, 'text': model.text, 'complete': model.complete};
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(other) =>
|
||||
other is Todo && other.text == text && other.complete == complete;
|
||||
|
||||
@override
|
||||
String toString() => '$id:$text($complete)';
|
||||
}
|
Loading…
Reference in a new issue