Line data Source code
1 : import 'dart:async';
2 : import 'dart:convert';
3 : import 'dart:io';
4 : import 'dart:typed_data';
5 : import 'package:dio/dio.dart';
6 : import 'package:dio/adapter.dart';
7 :
8 : class MockAdapter extends HttpClientAdapter {
9 : static const mockHost = 'mockserver';
10 : static const mockBase = 'http://$mockHost';
11 : final _adapter = DefaultHttpClientAdapter();
12 :
13 : @override
14 1 : Future<ResponseBody> fetch(RequestOptions options,
15 : Stream<Uint8List>? requestStream, Future? cancelFuture) async {
16 1 : final uri = options.uri;
17 2 : if (uri.host == mockHost) {
18 1 : switch (uri.path) {
19 1 : case '/test':
20 1 : return ResponseBody.fromString(
21 2 : jsonEncode({
22 : 'errCode': 0,
23 2 : 'data': {'path': uri.path}
24 : }),
25 : 200,
26 1 : headers: {
27 1 : Headers.contentTypeHeader: [Headers.jsonContentType],
28 : },
29 : );
30 1 : case '/test-auth':
31 : {
32 3 : return Future.delayed(Duration(milliseconds: 300), () {
33 2 : if (options.headers['csrfToken'] == null) {
34 1 : return ResponseBody.fromString(
35 2 : jsonEncode({
36 1 : 'errCode': -1,
37 2 : 'data': {'path': uri.path}
38 : }),
39 : 401,
40 1 : headers: {
41 1 : Headers.contentTypeHeader: [Headers.jsonContentType],
42 : },
43 : );
44 : }
45 1 : return ResponseBody.fromString(
46 2 : jsonEncode({
47 : 'errCode': 0,
48 2 : 'data': {'path': uri.path}
49 : }),
50 : 200,
51 1 : headers: {
52 1 : Headers.contentTypeHeader: [Headers.jsonContentType],
53 : },
54 : );
55 : });
56 : }
57 1 : case '/download':
58 0 : return Future.delayed(Duration(milliseconds: 300), () {
59 0 : return ResponseBody(
60 0 : File('./README.md').openRead().cast<Uint8List>(),
61 : 200,
62 0 : headers: {
63 0 : Headers.contentLengthHeader: [
64 0 : File('./README.md').lengthSync().toString()
65 : ],
66 : },
67 : );
68 : });
69 :
70 1 : case '/token':
71 : {
72 2 : var t = 'ABCDEFGHIJKLMN'.split('')..shuffle();
73 1 : return ResponseBody.fromBytes(
74 3 : utf8.encode(jsonEncode({
75 : 'errCode': 0,
76 2 : 'data': {'token': t.join()}
77 : })),
78 : 200,
79 1 : headers: {
80 1 : Headers.contentTypeHeader: [Headers.jsonContentType],
81 : },
82 : );
83 : }
84 : default:
85 1 : return ResponseBody.fromString('', 404);
86 : }
87 : }
88 0 : return _adapter.fetch(options, requestStream, cancelFuture);
89 : }
90 :
91 0 : @override
92 : void close({bool force = false}) {
93 0 : _adapter.close(force: force);
94 : }
95 : }
|