2 Commits ffe9275818 ... 9b2c492019

Auteur SHA1 Message Date
  Steinar Bang 9b2c492019 Only try modifying zip file entry time when AlbumEntry.lastModifiedTime is non-null il y a 6 jours
  Steinar Bang 5b269de907 Add test verifying NullPointerException with null AlbumEntry.lastModifiedDate when writing zip file il y a 6 jours

+ 3 - 3
oldalbum.backend/src/main/java/no/priv/bang/oldalbum/backend/OldAlbumServiceProvider.java

@@ -1,5 +1,5 @@
 /*
- * Copyright 2020-2024 Steinar Bang
+ * Copyright 2020-2025 Steinar Bang
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -673,10 +673,10 @@ public class OldAlbumServiceProvider implements OldAlbumService {
         };
     }
 
-    private void writeImageWithModifiedMetadataToZipArchive(ZipOutputStream zipArchive, AlbumEntry albumEntry, ImageAndWriter imageAndWriter) throws IOException {
+    void writeImageWithModifiedMetadataToZipArchive(ZipOutputStream zipArchive, AlbumEntry albumEntry, ImageAndWriter imageAndWriter) throws IOException {
         var filename = findFileNamePartOfUrl(albumEntry.imageUrl());
         var entry = new ZipEntry(filename);
-        entry.setLastModifiedTime(FileTime.fromMillis(albumEntry.lastModified().getTime()));
+        Optional.ofNullable(albumEntry.lastModified()).ifPresent(lm -> entry.setLastModifiedTime(FileTime.fromMillis(lm.getTime())));
         zipArchive.putNextEntry(entry);
         writeImageWithModifiedMetadataToOutputStream(zipArchive, imageAndWriter.writer(), imageAndWriter.image(), albumEntry);
     }

+ 14 - 1
oldalbum.backend/src/test/java/no/priv/bang/oldalbum/backend/OldAlbumServiceProviderTest.java

@@ -1,5 +1,5 @@
 /*
- * Copyright 2020-2024 Steinar Bang
+ * Copyright 2020-2025 Steinar Bang
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -51,6 +51,8 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
+import java.util.zip.ZipOutputStream;
+
 import javax.imageio.metadata.IIOMetadataNode;
 import javax.sql.DataSource;
 
@@ -1371,6 +1373,17 @@ class OldAlbumServiceProviderTest {
     }
 
     @Test
+    void testWriteImageWithModifiedMetadataToZipArchiveWithNullLastModifiedDate() throws Exception {
+        var provider = spy(new OldAlbumServiceProvider());
+        doNothing().when(provider).writeImageWithModifiedMetadataToOutputStream(any(), any(), any(), any()); // Mock to avoid different NPE
+        var zipArchive = mock(ZipOutputStream.class);
+        var imageAndWriter = mock(ImageAndWriter.class);
+        var imageEntryWithNullLastModifiedDate = AlbumEntry.with().imageUrl("").build();
+
+        assertDoesNotThrow(() -> provider.writeImageWithModifiedMetadataToZipArchive(zipArchive, imageEntryWithNullLastModifiedDate, imageAndWriter));
+    }
+
+    @Test
     void testDownloadAlbumEntryOnImageThatIsATextFile() throws Exception {
         var replacementTitle = "Replacement title";
         var replacementDescription = "Replacement description";