From d75cfd06c03a1682a5b0ed77d6fc4976583f08bc Mon Sep 17 00:00:00 2001 From: Peter Leibiger Date: Tue, 15 Aug 2023 23:08:11 +0200 Subject: [PATCH] Adjust test setting custom MultipartFile.contentType --- dio/test/formdata_test.dart | 97 ++----------------------- dio/test/mock/_formdata | 2 +- dio/test/multipart_file_test.dart | 114 ++++++++++++++++++++++++++++++ 3 files changed, 119 insertions(+), 94 deletions(-) create mode 100644 dio/test/multipart_file_test.dart diff --git a/dio/test/formdata_test.dart b/dio/test/formdata_test.dart index 2403c8b9a..3afc6136a 100644 --- a/dio/test/formdata_test.dart +++ b/dio/test/formdata_test.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:dio/dio.dart'; +import 'package:http_parser/http_parser.dart'; import 'package:test/test.dart'; import 'mock/adapters.dart'; @@ -35,6 +36,7 @@ void main() async { headers: { 'test': ['c'] }, + contentType: MediaType.parse('text/plain'), ), ] }); @@ -86,6 +88,7 @@ void main() async { headers: { 'test': ['c'], }, + contentType: MediaType.parse('text/plain'), ), ), ); @@ -121,6 +124,7 @@ void main() async { headers: { 'test': ['c'] }, + contentType: MediaType.parse('text/plain'), ), ] }); @@ -148,99 +152,6 @@ void main() async { testOn: 'vm', ); - // Cloned multipart files should be able to be read again and be the same - // as the original ones. - test( - 'complex cloning MultipartFile', - () async { - final multipartFile1 = MultipartFile.fromString( - 'hello world.', - headers: { - 'test': ['a'] - }, - ); - final multipartFile2 = await MultipartFile.fromFile( - 'test/mock/_testfile', - filename: '1.txt', - headers: { - 'test': ['b'] - }, - ); - final multipartFile3 = MultipartFile.fromFileSync( - 'test/mock/_testfile', - filename: '2.txt', - headers: { - 'test': ['c'] - }, - ); - - final fm = FormData.fromMap({ - 'name': 'wendux', - 'age': 25, - 'path': '/图片空间/地址', - 'file': multipartFile1, - 'files': [ - multipartFile2, - multipartFile3, - ] - }); - final fmStr = await fm.readAsBytes(); - - // Files are finalized after being read. - try { - multipartFile1.finalize(); - fail('Should not be able to finalize a file twice.'); - } catch (e) { - expect(e, isA()); - expect( - (e as StateError).message, - 'The MultipartFile has already been finalized. This typically ' - 'means you are using the same MultipartFile in repeated requests.', - ); - } - - final fm1 = FormData(); - fm1.fields.add(MapEntry('name', 'wendux')); - fm1.fields.add(MapEntry('age', '25')); - fm1.fields.add(MapEntry('path', '/图片空间/地址')); - fm1.files.add( - MapEntry( - 'file', - multipartFile1.clone(), - ), - ); - fm1.files.add( - MapEntry( - 'files', - multipartFile2.clone(), - ), - ); - fm1.files.add( - MapEntry( - 'files', - multipartFile3.clone(), - ), - ); - expect(fmStr.length, fm1.length); - - // The cloned multipart files should be able to be read again. - expect(fm.files[0].value.isFinalized, true); - expect(fm.files[1].value.isFinalized, true); - expect(fm.files[2].value.isFinalized, true); - expect(fm1.files[0].value.isFinalized, false); - expect(fm1.files[1].value.isFinalized, false); - expect(fm1.files[2].value.isFinalized, false); - - // The cloned multipart files' properties should be the same as the - // original ones. - expect(fm1.files[0].value.filename, multipartFile1.filename); - expect(fm1.files[0].value.contentType, multipartFile1.contentType); - expect(fm1.files[0].value.length, multipartFile1.length); - expect(fm1.files[0].value.headers, multipartFile1.headers); - }, - testOn: 'vm', - ); - test('encodes maps correctly', () async { final fd = FormData.fromMap( { diff --git a/dio/test/mock/_formdata b/dio/test/mock/_formdata index dfa15cd2c..dc6d79e06 100644 --- a/dio/test/mock/_formdata +++ b/dio/test/mock/_formdata @@ -27,7 +27,7 @@ test: b ----dio-boundary-3788753558 content-disposition: form-data; name="files"; filename="2.txt" -content-type: application/octet-stream +content-type: text/plain test: c 你好世界, diff --git a/dio/test/multipart_file_test.dart b/dio/test/multipart_file_test.dart new file mode 100644 index 000000000..a200fc4ad --- /dev/null +++ b/dio/test/multipart_file_test.dart @@ -0,0 +1,114 @@ +import 'package:dio/dio.dart'; +import 'package:http_parser/http_parser.dart'; +import 'package:test/test.dart'; + +void main() async { + group(MultipartFile, () { + test( + 'fromFile sets correct content-type', + () async { + final mediaType = MediaType.parse('text/plain'); + final file = await MultipartFile.fromFile( + 'test/mock/_testfile', + filename: '1.txt', + contentType: mediaType, + ); + expect(file.contentType, mediaType); + }, + testOn: 'vm', + ); + + // Cloned multipart files should be able to be read again and be the same + // as the original ones. + test( + 'complex cloning MultipartFile', + () async { + final multipartFile1 = MultipartFile.fromString( + 'hello world.', + headers: { + 'test': ['a'] + }, + ); + final multipartFile2 = await MultipartFile.fromFile( + 'test/mock/_testfile', + filename: '1.txt', + headers: { + 'test': ['b'] + }, + ); + final multipartFile3 = MultipartFile.fromFileSync( + 'test/mock/_testfile', + filename: '2.txt', + headers: { + 'test': ['c'] + }, + ); + + final fm = FormData.fromMap({ + 'name': 'wendux', + 'age': 25, + 'path': '/图片空间/地址', + 'file': multipartFile1, + 'files': [ + multipartFile2, + multipartFile3, + ] + }); + final fmStr = await fm.readAsBytes(); + + // Files are finalized after being read. + try { + multipartFile1.finalize(); + fail('Should not be able to finalize a file twice.'); + } catch (e) { + expect(e, isA()); + expect( + (e as StateError).message, + 'The MultipartFile has already been finalized. This typically ' + 'means you are using the same MultipartFile in repeated requests.', + ); + } + + final fm1 = FormData(); + fm1.fields.add(MapEntry('name', 'wendux')); + fm1.fields.add(MapEntry('age', '25')); + fm1.fields.add(MapEntry('path', '/图片空间/地址')); + fm1.files.add( + MapEntry( + 'file', + multipartFile1.clone(), + ), + ); + fm1.files.add( + MapEntry( + 'files', + multipartFile2.clone(), + ), + ); + fm1.files.add( + MapEntry( + 'files', + multipartFile3.clone(), + ), + ); + expect(fmStr.length, fm1.length); + + // The cloned multipart files should be able to be read again. + expect(fm.files[0].value.isFinalized, true); + expect(fm.files[1].value.isFinalized, true); + expect(fm.files[2].value.isFinalized, true); + expect(fm1.files[0].value.isFinalized, false); + expect(fm1.files[1].value.isFinalized, false); + expect(fm1.files[2].value.isFinalized, false); + + // The cloned multipart files' properties should be the same as the + // original ones. + expect(fm1.files[0].value.filename, multipartFile1.filename); + expect(fm1.files[0].value.contentType, multipartFile1.contentType); + expect(fm1.files[0].value.length, multipartFile1.length); + expect(fm1.files[0].value.headers, multipartFile1.headers); + }, + testOn: 'vm', + ); + }); +}