From 20509d725a424f623093a6a089fcdbbfce8977b4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= <sebastien.gaya@gmail.com>
Date: Wed, 24 Nov 2021 11:17:40 +0100
Subject: [PATCH] variant service does not fail when format is missing

---
 app/services/variant_service.rb     |  2 +-
 test/models/variant_service_test.rb | 44 +++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+), 1 deletion(-)

diff --git a/app/services/variant_service.rb b/app/services/variant_service.rb
index 395b8b2d7..40eca996a 100644
--- a/app/services/variant_service.rb
+++ b/app/services/variant_service.rb
@@ -55,7 +55,7 @@ class VariantService
         end
       end
 
-      transformations[:format] = @format if @format != @blob.filename.extension_without_delimiter
+      transformations[:format] = @format if @format.present? && @format != @blob.filename.extension_without_delimiter
       transformations
     end
   end
diff --git a/test/models/variant_service_test.rb b/test/models/variant_service_test.rb
index 62858b2e9..2f2d08636 100644
--- a/test/models/variant_service_test.rb
+++ b/test/models/variant_service_test.rb
@@ -31,6 +31,8 @@ class VariantServiceTest < ActiveSupport::TestCase
   # dan-gold_1000x500_crop_left.jpeg
   # dan-gold_1500x500_crop_left.jpeg
   # dan-gold_800x840_crop_left.jpeg
+  # dan-gold
+  # dan-gold_500x500
 
   # Params tests
 
@@ -155,6 +157,21 @@ class VariantServiceTest < ActiveSupport::TestCase
     assert_equal expected_params, variant_service.params
   end
 
+  test "params for dan-gold" do
+    blob = create_file_blob(filename: "dan-gold.jpeg")
+    expected_params = {}
+    variant_service = VariantService.compute(blob, 'dan-gold', nil)
+    assert_equal expected_params, variant_service.params
+    assert_nil variant_service.format
+  end
+
+  test "params for dan-gold_500x500" do
+    blob = create_file_blob(filename: "dan-gold.jpeg")
+    expected_params = { size: '500x500' }
+    variant_service = VariantService.compute(blob, 'dan-gold_500x500', nil)
+    assert_equal expected_params, variant_service.params
+  end
+
   # Transformations tests
 
   test "transformations for dan-gold.jpeg" do
@@ -291,6 +308,20 @@ class VariantServiceTest < ActiveSupport::TestCase
     assert_equal expected_transformations, variant_service.transformations
   end
 
+  test "transformations for dan-gold" do
+    blob = create_file_blob(filename: "dan-gold.jpeg")
+    expected_transformations = {}
+    variant_service = VariantService.compute(blob, 'dan-gold', nil)
+    assert_equal expected_transformations, variant_service.transformations
+  end
+
+  test "transformations for dan-gold_500x500" do
+    blob = create_file_blob(filename: "dan-gold.jpeg")
+    expected_transformations = { resize_to_limit: [500, 500] }
+    variant_service = VariantService.compute(blob, 'dan-gold_500x500', nil)
+    assert_equal expected_transformations, variant_service.transformations
+  end
+
   # Variants tests
 
   test "variant for dan-gold.webp" do
@@ -390,6 +421,19 @@ class VariantServiceTest < ActiveSupport::TestCase
     assert_equal expected_blob.checksum, image_checksum(image)
   end
 
+  test "variant for dan-gold" do
+    expected_blob = create_file_blob(filename: "dan-gold.jpeg")
+    image = load_image_from_variant_name(expected_blob.filename.base, format: nil)
+    assert_equal "JPEG", image.type
+    assert_equal expected_blob.checksum, image_checksum(image)
+  end
+
+  test "variant for dan-gold_500x500" do
+    expected_blob = create_file_blob(filename: "dan-gold_500x500.jpeg")
+    image = load_image_from_variant_name(expected_blob.filename.base, format: nil)
+    assert_equal expected_blob.checksum, image_checksum(image)
+  end
+
   private
 
   def create_file_blob(key: nil, filename: "dan-gold.jpeg", content_type: "image/jpeg", metadata: nil, service_name: nil, record: nil)
-- 
GitLab