Line data Source code
1 : // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 : // for details. All rights reserved. Use of this source code is governed by a
3 : // BSD-style license that can be found in the LICENSE file.
4 :
5 : @TestOn('vm')
6 : import 'dart:convert';
7 : import 'package:dio/dio.dart';
8 : import 'package:test/test.dart';
9 : import 'utils.dart';
10 :
11 1 : void main() {
12 1 : setUp(startServer);
13 :
14 1 : tearDown(stopServer);
15 :
16 2 : group('#test requests', () {
17 : late Dio dio;
18 2 : setUp(() {
19 1 : dio = Dio();
20 1 : dio.options
21 3 : ..baseUrl = serverUrl.toString()
22 1 : ..connectTimeout = 1000
23 1 : ..receiveTimeout = 5000
24 2 : ..headers = {'User-Agent': 'dartisan'};
25 3 : dio.interceptors.add(LogInterceptor(
26 : responseBody: true,
27 : requestBody: true,
28 2 : logPrint: (log) => {
29 : // ignore log
30 : },
31 : ));
32 : });
33 2 : test('#test restful APIs', () async {
34 : Response response;
35 :
36 : // test get
37 2 : response = await dio.get(
38 : '/test',
39 1 : queryParameters: {'id': '12', 'name': 'wendu'},
40 : );
41 2 : expect(response.statusCode, 200);
42 2 : expect(response.isRedirect, false);
43 4 : expect(response.data['query'], equals('id=12&name=wendu'));
44 4 : expect(response.headers.value('single'), equals('value'));
45 :
46 : const map = {'content': 'I am playload'};
47 :
48 : // test post
49 2 : response = await dio.post('/test', data: map);
50 3 : expect(response.data['method'], 'POST');
51 4 : expect(response.data['body'], jsonEncode(map));
52 :
53 : // test put
54 2 : response = await dio.put('/test', data: map);
55 3 : expect(response.data['method'], 'PUT');
56 4 : expect(response.data['body'], jsonEncode(map));
57 :
58 : // test patch
59 2 : response = await dio.patch('/test', data: map);
60 3 : expect(response.data['method'], 'PATCH');
61 4 : expect(response.data['body'], jsonEncode(map));
62 :
63 : // test head
64 2 : response = await dio.delete('/test', data: map);
65 3 : expect(response.data['method'], 'DELETE');
66 3 : expect(response.data['path'], '/test');
67 :
68 : // error test
69 1 : expect(
70 0 : dio
71 1 : .get('/error')
72 4 : .catchError((e) => throw (e as DioError).response!.statusCode!),
73 2 : throwsA(equals(400)));
74 :
75 : // redirect test
76 2 : response = await dio.get(
77 : '/redirect',
78 1 : onReceiveProgress: (received, total) {
79 : // ignore progress
80 : },
81 : );
82 2 : assert(response.isRedirect == true);
83 3 : assert(response.redirects.length == 1);
84 2 : var ri = response.redirects.first;
85 2 : assert(ri.statusCode == 302);
86 2 : assert(ri.method == 'GET');
87 : });
88 :
89 2 : test('#test request with URI', () async {
90 : Response response;
91 :
92 : // test get
93 2 : response = await dio.getUri(
94 2 : Uri(path: '/test', queryParameters: {'id': '12', 'name': 'wendu'}),
95 : );
96 2 : expect(response.statusCode, 200);
97 2 : expect(response.isRedirect, false);
98 4 : expect(response.data['query'], equals('id=12&name=wendu'));
99 4 : expect(response.headers.value('single'), equals('value'));
100 :
101 : const map = {'content': 'I am playload'};
102 :
103 : // test post
104 3 : response = await dio.postUri(Uri(path: '/test'), data: map);
105 3 : expect(response.data['method'], 'POST');
106 4 : expect(response.data['body'], jsonEncode(map));
107 :
108 : // test put
109 3 : response = await dio.putUri(Uri(path: '/test'), data: map);
110 3 : expect(response.data['method'], 'PUT');
111 4 : expect(response.data['body'], jsonEncode(map));
112 :
113 : // test patch
114 3 : response = await dio.patchUri(Uri(path: '/test'), data: map);
115 3 : expect(response.data['method'], 'PATCH');
116 4 : expect(response.data['body'], jsonEncode(map));
117 :
118 : // test head
119 3 : response = await dio.deleteUri(Uri(path: '/test'), data: map);
120 3 : expect(response.data['method'], 'DELETE');
121 3 : expect(response.data['path'], '/test');
122 : });
123 :
124 2 : test('#test redirect', () async {
125 : Response response;
126 2 : response = await dio.get('/redirect');
127 2 : assert(response.isRedirect == true);
128 3 : assert(response.redirects.length == 1);
129 2 : var ri = response.redirects.first;
130 2 : assert(ri.statusCode == 302);
131 2 : assert(ri.method == 'GET');
132 3 : assert(ri.location.path == '/');
133 : });
134 :
135 2 : test('#test generic parameters', () async {
136 : Response response;
137 :
138 : // default is "Map"
139 2 : response = await dio.get('/test');
140 2 : assert(response.data is Map);
141 :
142 : // get response as `string`
143 2 : response = await dio.get<String>('/test');
144 2 : assert(response.data is String);
145 :
146 : // get response as `Map`
147 2 : response = await dio.get<Map>('/test');
148 2 : assert(response.data is Map);
149 :
150 : // get response as `List`
151 2 : response = await dio.get<List>('/list');
152 2 : assert(response.data is List);
153 3 : expect(response.data[0], 1);
154 : });
155 : });
156 : }
|