-
Notifications
You must be signed in to change notification settings - Fork 114
/
offline_mutation_plugin_test.dart
62 lines (48 loc) · 1.76 KB
/
offline_mutation_plugin_test.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import 'package:async/async.dart';
import 'package:gql_exec/gql_exec.dart';
import 'package:test/test.dart';
import 'package:hive/hive.dart';
import 'package:mockito/mockito.dart';
import 'package:ferry_test_graphql/schema/serializers.gql.dart';
import 'package:ferry_test_graphql/mutations/variables/create_review.req.gql.dart';
import 'package:ferry_test_graphql/mutations/variables/create_review.data.gql.dart';
import 'package:ferry_test_graphql/schema/schema.schema.gql.dart';
import 'package:ferry/plugins.dart';
import 'package:ferry/ferry.dart';
class MockLink extends Mock implements Link {}
final req = GCreateReviewReq(
(b) => b
..vars.review.stars = 5
..vars.episode = GEpisode.NEWHOPE
..vars.review.commentary = 'Amazing!!!',
);
final data = GCreateReviewData(
(b) => b
..createReview.id = '123'
..createReview.stars = 5
..createReview.episode = GEpisode.NEWHOPE
..createReview.commentary = 'Amazing!!!',
);
void main() {
Hive.init('./test/__hive_data__');
final mockLink = MockLink();
when(mockLink.request(any, any))
.thenAnswer((_) => Stream.value(Response(data: data.toJson())));
test('mutations get enqueued and dequeued', () async {
final box = await Hive.openBox<Map<String, dynamic>>('mutation_queue');
await box.clear();
final client = Client(link: mockLink);
final plugin = OfflineMutationPlugin(
mutationQueueBox: box,
serializers: serializers,
client: client,
);
client.plugins.add(plugin);
final queue = StreamQueue(client.responseStream(req));
await Future.delayed(Duration.zero);
expect(box.keys.length, equals(1));
plugin.isConnectedController.add(true);
expect((await queue.next).data, equals(data));
expect(box.keys.length, equals(0));
});
}