From ec509a598d5a8ad3f62faec5a2ce18de48684a0c Mon Sep 17 00:00:00 2001 From: Doug Date: Tue, 15 Oct 2024 10:17:44 +0100 Subject: [PATCH] Test the files to make sure their mime types match the info. --- .../MediaUploadingPreprocessorTests.swift | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/UnitTests/Sources/MediaUploadingPreprocessorTests.swift b/UnitTests/Sources/MediaUploadingPreprocessorTests.swift index d3b61221c8..22fcad9f55 100644 --- a/UnitTests/Sources/MediaUploadingPreprocessorTests.swift +++ b/UnitTests/Sources/MediaUploadingPreprocessorTests.swift @@ -5,6 +5,7 @@ // Please see LICENSE in the repository root for full details. // +import UniformTypeIdentifiers import XCTest @testable import ElementX @@ -257,11 +258,14 @@ final class MediaUploadingPreprocessorTests: XCTestCase { } guard case let .success(result) = await mediaUploadingPreprocessor.processMedia(at: url), - case let .image(_, _, imageInfo) = result else { + case let .image(convertedImageURL, _, imageInfo) = result else { XCTFail("Failed processing asset") return } + // Make sure the output file matches the image info. + XCTAssertEqual(mimeType(from: convertedImageURL), "image/png") + // Check resulting image info XCTAssertEqual(imageInfo.mimetype, "image/png") XCTAssertEqual(imageInfo.blurhash, "K0TSUA~qfQ~qj[fQfQfQfQ") @@ -279,11 +283,14 @@ final class MediaUploadingPreprocessorTests: XCTestCase { appSettings.optimizeMediaUploads = true guard case let .success(optimizedResult) = await mediaUploadingPreprocessor.processMedia(at: url), - case let .image(_, _, optimizedImageInfo) = optimizedResult else { + case let .image(optimizedImageURL, _, optimizedImageInfo) = optimizedResult else { XCTFail("Failed processing asset") return } + // Make sure the output file matches the image info. + XCTAssertEqual(mimeType(from: optimizedImageURL), "image/png") + // Check optimised image info XCTAssertEqual(optimizedImageInfo.mimetype, "image/png") XCTAssertEqual(optimizedImageInfo.blurhash, "K0TSUA~qfQ~qj[fQfQfQfQ") @@ -307,6 +314,9 @@ final class MediaUploadingPreprocessorTests: XCTestCase { compare(originalImageAt: url, toConvertedImageAt: convertedImageURL, withThumbnailAt: thumbnailURL) + // Make sure the output file matches the image info. + XCTAssertEqual(mimeType(from: convertedImageURL), "image/heic") + // Check resulting image info XCTAssertEqual(imageInfo.mimetype, "image/heic") XCTAssertEqual(imageInfo.blurhash, "KGD]3ns:T00$kWxFXmt6xv") @@ -331,6 +341,9 @@ final class MediaUploadingPreprocessorTests: XCTestCase { compare(originalImageAt: url, toConvertedImageAt: optimizedImageURL, withThumbnailAt: thumbnailURL) + // Make sure the output file matches the image info. + XCTAssertEqual(mimeType(from: optimizedImageURL), "image/jpeg") + // Check optimised image info XCTAssertEqual(optimizedImageInfo.mimetype, "image/jpeg") XCTAssertEqual(optimizedImageInfo.blurhash, "KGD]3ns:T00#kWxFb^s:xv") @@ -350,11 +363,14 @@ final class MediaUploadingPreprocessorTests: XCTestCase { } guard case let .success(result) = await mediaUploadingPreprocessor.processMedia(at: url), - case let .image(_, _, imageInfo) = result else { + case let .image(convertedImageURL, _, imageInfo) = result else { XCTFail("Failed processing asset") return } + // Make sure the output file matches the image info. + XCTAssertEqual(mimeType(from: convertedImageURL), "image/gif") + // Check resulting image info XCTAssertEqual(imageInfo.mimetype, "image/gif") XCTAssertEqual(imageInfo.blurhash, "K7SY{qs;%NxuRjof~qozIU") @@ -372,11 +388,14 @@ final class MediaUploadingPreprocessorTests: XCTestCase { appSettings.optimizeMediaUploads = true guard case let .success(optimizedResult) = await mediaUploadingPreprocessor.processMedia(at: url), - case let .image(_, _, optimizedImageInfo) = optimizedResult else { + case let .image(optimizedImageURL, _, optimizedImageInfo) = optimizedResult else { XCTFail("Failed processing asset") return } + // Make sure the output file matches the image info. + XCTAssertEqual(mimeType(from: optimizedImageURL), "image/gif") + // Ensure optimised image is still the same as the original image. XCTAssertEqual(optimizedImageInfo.mimetype, "image/gif") XCTAssertEqual(optimizedImageInfo.blurhash, "K7SY{qs;%NxuRjof~qozIU") @@ -446,4 +465,15 @@ final class MediaUploadingPreprocessorTests: XCTestCase { return convertedMetadata } + + private func mimeType(from url: URL) -> String? { + guard let imageSource = CGImageSourceCreateWithURL(url as NSURL, nil), + let typeIdentifier = CGImageSourceGetType(imageSource), + let type = UTType(typeIdentifier as String), + let mimeType = type.preferredMIMEType else { + XCTFail("Failed to get mimetype from URL.") + return nil + } + return mimeType + } }