diff --git a/build.gradle b/build.gradle index 6899e3b..ae7add6 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ plugins { } group = 'com.josdem.jmetadata' -version = '1.3.10' +version = '1.4.0' java { toolchain { diff --git a/src/main/java/com/josdem/jmetadata/controller/CompleteController.java b/src/main/java/com/josdem/jmetadata/controller/CompleteController.java index 9569cd6..cc0e3a0 100644 --- a/src/main/java/com/josdem/jmetadata/controller/CompleteController.java +++ b/src/main/java/com/josdem/jmetadata/controller/CompleteController.java @@ -54,7 +54,7 @@ public class CompleteController { private final MusicBrainzCompleteServiceAdapter musicBrainzCompleteServiceAdapter; private final LastFMCompleteServiceAdapter lastFMCompleteServiceAdapter; - private RestService restService; + protected RestService restService; private CoverArtRestService coverArtRestService; @PostConstruct diff --git a/src/test/java/com/josdem/jmetadata/controller/CompleteControllerTest.java b/src/test/java/com/josdem/jmetadata/controller/CompleteControllerTest.java index 607e31d..445e243 100644 --- a/src/test/java/com/josdem/jmetadata/controller/CompleteControllerTest.java +++ b/src/test/java/com/josdem/jmetadata/controller/CompleteControllerTest.java @@ -17,6 +17,7 @@ package com.josdem.jmetadata.controller; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -28,6 +29,7 @@ import com.josdem.jmetadata.model.Metadata; import com.josdem.jmetadata.service.LastfmService; import com.josdem.jmetadata.service.MusicBrainzService; +import com.josdem.jmetadata.service.RestService; import com.josdem.jmetadata.service.impl.LastFMCompleteServiceAdapter; import com.josdem.jmetadata.service.impl.MusicBrainzCompleteServiceAdapter; import java.awt.Image; @@ -40,6 +42,8 @@ import org.junit.jupiter.api.TestInfo; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import retrofit2.Call; +import retrofit2.Response; @Slf4j class CompleteControllerTest { @@ -56,6 +60,7 @@ class CompleteControllerTest { @Mock private Image imageIcon; @Mock private LastFMCompleteServiceAdapter lastFMCompleteServiceAdapter; @Mock private MusicBrainzCompleteServiceAdapter musicBrainzCompleteServiceAdapter; + @Mock private RestService restService; private String artist = "Dave Deen"; private String title = "Footprints (Original Mix)"; @@ -88,6 +93,7 @@ void setup() throws Exception { musicBrainzService, musicBrainzCompleteServiceAdapter, lastFMCompleteServiceAdapter); + controller.restService = restService; } @Test @@ -136,7 +142,8 @@ void shouldNotUpdateMetadata(TestInfo testInfo) { @Test @DisplayName("completing metadata with LastFM service") - void shouldCompleteMetadata() { + void shouldCompleteMetadata(TestInfo testInfo) { + log.info(testInfo.getDisplayName()); var metadataList = List.of(metadata); when(lastFMCompleteServiceAdapter.canComplete(metadataList)).thenReturn(true); controller.completeLastFmMetadata(metadataList); @@ -145,10 +152,36 @@ void shouldCompleteMetadata() { @Test @DisplayName("not completing metadata with LastFM service") - void shouldNotCompleteMetadata() { + void shouldNotCompleteMetadata(TestInfo testInfo) { + log.info(testInfo.getDisplayName()); var metadataList = List.of(metadata); when(lastFMCompleteServiceAdapter.canComplete(metadataList)).thenReturn(false); controller.completeLastFmMetadata(metadataList); verify(coverArtService, never()).completeLastFM(metadata); } + + @Test + @DisplayName("not completing metadata with MusicBrainz service") + void shouldNotCompleteMetadataWithMusicBrainz(TestInfo testInfo) { + log.info(testInfo.getDisplayName()); + var metadataList = List.of(metadata); + when(musicBrainzCompleteServiceAdapter.canComplete(metadataList)).thenReturn(false); + + assertEquals(ActionResult.READY, controller.completeAlbumMetadata(metadataList)); + } + + @Test + @DisplayName("getting releases from MusicBrainz service") + void shouldGetReleasesFromMusicBrainz(TestInfo testInfo) throws Exception { + log.info(testInfo.getDisplayName()); + var metadataList = List.of(metadata); + var call = mock(Call.class); + var response = mock(Response.class); + + when(call.execute()).thenReturn(response); + when(musicBrainzCompleteServiceAdapter.canComplete(metadataList)).thenReturn(true); + when(restService.getReleases(album + " AND " + "artist:" + artist)).thenReturn(call); + + assertEquals(ActionResult.NEW, controller.completeAlbumMetadata(metadataList)); + } } diff --git a/src/test/java/com/josdem/jmetadata/controller/MetadataControllerTest.java b/src/test/java/com/josdem/jmetadata/controller/MetadataControllerTest.java index 1c25bed..6e5ba8a 100644 --- a/src/test/java/com/josdem/jmetadata/controller/MetadataControllerTest.java +++ b/src/test/java/com/josdem/jmetadata/controller/MetadataControllerTest.java @@ -20,10 +20,12 @@ import static org.mockito.Mockito.when; import com.josdem.jmetadata.event.Events; +import com.josdem.jmetadata.exception.TooMuchFilesException; import com.josdem.jmetadata.model.Metadata; import com.josdem.jmetadata.model.Model; import com.josdem.jmetadata.service.MetadataService; import java.io.File; +import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.Properties; @@ -42,6 +44,7 @@ @Slf4j class MetadataControllerTest { + public static final String MAX_FILES_ALLOWED = "50"; private MetadataController metadataController; @Mock private Properties properties; @@ -129,4 +132,51 @@ private void setFileChooserExpectations() { when(fileChooser.getSelectedFile()).thenReturn(file); when(configurator.getControlEngine()).thenReturn(controlEngine); } + + @Test + @DisplayName("catching IOException") + void shouldCatchIOException(TestInfo testInfo) throws Exception { + log.info(testInfo.getDisplayName()); + + setFileChooserExpectations(); + when(file.exists()).thenReturn(true); + when(metadataService.extractMetadata(file)).thenThrow(new IOException("IO Exception")); + + metadataController.getMetadata(); + + verify(controlEngine).fireEvent(Events.OPEN); + } + + @Test + @DisplayName("catching illegal argument exception") + void shouldCatchIllegalArgumentException(TestInfo testInfo) throws Exception { + log.info(testInfo.getDisplayName()); + + setFileChooserExpectations(); + when(file.exists()).thenReturn(true); + when(metadataService.extractMetadata(file)) + .thenThrow(new IllegalArgumentException("Illegal Argument Exception")); + + metadataController.getMetadata(); + + verify(controlEngine).fireEvent(Events.OPEN); + } + + @Test + @DisplayName("catching too much files exception") + void shouldCatchTooMuchFilesException(TestInfo testInfo) throws Exception { + log.info(testInfo.getDisplayName()); + + setFileChooserExpectations(); + when(file.exists()).thenReturn(true); + when(properties.getProperty("max.files.allowed")).thenReturn(MAX_FILES_ALLOWED); + when(metadataService.extractMetadata(file)) + .thenThrow(new TooMuchFilesException(Integer.valueOf(MAX_FILES_ALLOWED))); + + metadataController.getMetadata(); + + verify(controlEngine) + .fireEvent(Events.DIRECTORY_SELECTED, new ValueEvent<>(file.getAbsolutePath())); + verify(controlEngine).fireEvent(Events.MUCH_FILES_LOADED, new ValueEvent<>(MAX_FILES_ALLOWED)); + } }