diff --git a/lib/src/minio_helpers.dart b/lib/src/minio_helpers.dart index 4cd2fdc13e97ece4aabecf0e65aacda27eae296d..57bd14573a95bab4634f51b8ff29f60dd0f864e7 100644 --- a/lib/src/minio_helpers.dart +++ b/lib/src/minio_helpers.dart @@ -130,7 +130,7 @@ Map<String, String> prependXAMZMeta(Map<String, String> metadata) { if (!isAmzHeader(key) && !isSupportedHeader(key) && !isStorageclassHeader(key)) { - newMetadata['X-Amz-Meta-' + key] = newMetadata[key]; + newMetadata['x-amz-meta-' + key] = newMetadata[key]; newMetadata.remove(key); } } diff --git a/lib/src/utils.dart b/lib/src/utils.dart index 7fbf68be067626204f269cef1a893df175eb2560..b37b32fcfcdd767c26f43f424ecdba4375af88dd 100644 --- a/lib/src/utils.dart +++ b/lib/src/utils.dart @@ -82,9 +82,7 @@ class BlockStream extends StreamTransformerBase<List<int>, List<int>> { } } - if (buffer.length != 0) { - yield buffer.toBytes(); - } + yield buffer.toBytes(); } } diff --git a/test/minio_dart_test.dart b/test/minio_dart_test.dart index 2a11653315172bcef61b8b4652ef49cca788d669..cec078472299b67ff4bc0bcdc6718ade8f4db37f 100644 --- a/test/minio_dart_test.dart +++ b/test/minio_dart_test.dart @@ -63,7 +63,8 @@ void main() { test('bucketExists() returns false for a non-existent bucket', () async { final minio = _getClient(); - expect(await minio.bucketExists('non-existing-bucket-name'), equals(false)); + expect( + await minio.bucketExists('non-existing-bucket-name'), equals(false)); }); test('bucketExists() fails due to wrong access key', () async { @@ -98,29 +99,73 @@ void main() { group('fPutObject', () { final bucketName = DateTime.now().millisecondsSinceEpoch.toString(); Directory tempDir; + File testFile; + final objectName = 'a.jpg'; setUpAll(() async { tempDir = await Directory.systemTemp.createTemp(); + testFile = await File('${tempDir.path}/$objectName').create(); + await testFile.writeAsString('random bytes'); final minio = _getClient(); await minio.makeBucket(bucketName); }); - tearDown(() async { + tearDownAll(() async { await tempDir.delete(recursive: true); }); test('fPutObject() inserts content-type to metadata', () async { - final objectName = 'a.jpg'; + final minio = _getClient(); + await minio.fPutObject(bucketName, objectName, testFile.path); - final testFile = await File('${tempDir.path}/$objectName').create(); - await testFile.writeAsString('random bytes'); + final stat = await minio.statObject(bucketName, objectName); + expect(stat.metaData['content-type'], equals('image/jpeg')); + }); + + test('fPutObject() adds user-defined object metadata w/ prefix', () async { + final prefix = 'x-amz-meta-'; + final userDefinedMetadataKey = '${prefix}user-defined-metadata-key-1'; + final userDefinedMetadataValue = 'custom value 1'; + final metadata = { + userDefinedMetadataKey: userDefinedMetadataValue, + }; final minio = _getClient(); - await minio.fPutObject(bucketName, 'a.jpg', testFile.path); - + await minio.fPutObject(bucketName, objectName, testFile.path, metadata); + final stat = await minio.statObject(bucketName, objectName); - expect(stat.metaData['content-type'], equals('image/jpeg')); + expect( + stat.metaData[userDefinedMetadataKey.substring(prefix.length)], + equals(userDefinedMetadataValue), + ); + }); + + test('fPutObject() adds user-defined object metadata w/o prefix', () async { + final userDefinedMetadataKey = 'user-defined-metadata-key-2'; + final userDefinedMetadataValue = 'custom value 2'; + final metadata = { + userDefinedMetadataKey: userDefinedMetadataValue, + }; + + final minio = _getClient(); + await minio.fPutObject(bucketName, objectName, testFile.path, metadata); + + final stat = await minio.statObject(bucketName, objectName); + expect(stat.metaData[userDefinedMetadataKey], + equals(userDefinedMetadataValue)); + }); + + test('fPutObject() with empty file', () async { + final objectName = 'empty.txt'; + final emptyFile = await File('${tempDir.path}/$objectName').create(); + await emptyFile.writeAsString(''); + + final minio = _getClient(); + await minio.fPutObject(bucketName, objectName, emptyFile.path); + + final stat = await minio.statObject(bucketName, objectName); + expect(stat.size, equals(0)); }); }); }