diff --git a/pom.xml b/pom.xml
index 41a6d1c..1920122 100644
--- a/pom.xml
+++ b/pom.xml
@@ -84,6 +84,18 @@
quarkus-junit5
test
+
+ org.mockito
+ mockito-core
+ 5.23.0
+ test
+
+
+ org.mockito
+ mockito-junit-jupiter
+ 5.23.0
+ test
+
io.rest-assured
rest-assured
@@ -110,16 +122,7 @@
report
-
-
- com/discdrop/client/dto/*
- com/discdrop/client/MusicBrainzClient.class
- com/discdrop/client/UserAgentFilter.class
- com/discdrop/service/ArtistService.class
- com/discdrop/service/ReleaseGroupService.class
- com/discdrop/web/ArtistController.class
-
-
+
io.quarkus
diff --git a/src/test/java/com/discdrop/ArtistControllerExtendedTest.java b/src/test/java/com/discdrop/ArtistControllerExtendedTest.java
index 8f2d7aa..2f5725f 100644
--- a/src/test/java/com/discdrop/ArtistControllerExtendedTest.java
+++ b/src/test/java/com/discdrop/ArtistControllerExtendedTest.java
@@ -47,9 +47,7 @@ class ArtistControllerExtendedTest {
void testMonitoringToggleSingle() {
db.insertArtist(new TrackedArtist("mon-ts", "ToggleS", "", "",
true, false, false, false, false, Instant.now(), Instant.now()));
-
given().queryParam("type", "single").patch("/api/artists/mon-ts/monitor").then().statusCode(200);
-
var artist = db.findByMbid("mon-ts").orElseThrow();
assertTrue(artist.singleMonitored());
assertTrue(artist.albumMonitored());
@@ -59,27 +57,47 @@ class ArtistControllerExtendedTest {
void testMonitoringToggleAlbum() {
db.insertArtist(new TrackedArtist("mon-ta", "ToggleA", "", "",
true, false, false, false, false, Instant.now(), Instant.now()));
-
given().queryParam("type", "album").patch("/api/artists/mon-ta/monitor").then().statusCode(200);
-
var artist = db.findByMbid("mon-ta").orElseThrow();
assertFalse(artist.albumMonitored());
}
@Test
void testMonitoringNonexistent() {
- given()
- .queryParam("type", "album")
- .patch("/api/artists/no-such/monitor")
- .then().statusCode(404);
+ given().queryParam("type", "album").patch("/api/artists/no-such/monitor").then().statusCode(404);
}
@Test
void testMonitoringMissingType() {
db.insertArtist(new TrackedArtist("mon-mt", "MissType", "", "",
true, false, false, false, false, Instant.now(), Instant.now()));
+ given().patch("/api/artists/mon-mt/monitor").then().statusCode(400);
+ }
+
+ @Test
+ void testTrackArtist() {
given()
- .patch("/api/artists/mon-mt/monitor")
- .then().statusCode(400);
+ .when().post("/api/artists/mock-mbid-1/track")
+ .then().statusCode(200);
+
+ assertTrue(db.exists("mock-mbid-1"));
+ }
+
+ @Test
+ void testTrackArtistUpdatesFeed() {
+ given().post("/api/artists/mock-mbid-1/track").then().statusCode(200);
+ given().get("/api/artists/feed-table").then().statusCode(200);
+ }
+
+ @Test
+ void testDeleteTrackedArtistFromSearch() {
+ given().post("/api/artists/mock-mbid-1/track").then().statusCode(200);
+
+ given()
+ .queryParam("q", "Mock")
+ .delete("/api/artists/mock-mbid-1/from-search")
+ .then().statusCode(200);
+
+ assertFalse(db.exists("mock-mbid-1"));
}
}
diff --git a/src/test/java/com/discdrop/ArtistServiceTest.java b/src/test/java/com/discdrop/ArtistServiceTest.java
index 8a25128..2e6afe2 100644
--- a/src/test/java/com/discdrop/ArtistServiceTest.java
+++ b/src/test/java/com/discdrop/ArtistServiceTest.java
@@ -30,15 +30,50 @@ class ArtistServiceTest {
}
@Test
- void testAddArtistWithDefaultMonitoring() {
- var artist = new TrackedArtist("add-1", "Add Artist", "", "US",
- true, false, false, false, false, Instant.now(), Instant.now());
- db.insertArtist(artist);
+ void testSearchUsesMock() {
+ var results = artistService.search("Mock");
+ assertEquals(1, results.size());
+ assertEquals("Mock Band", results.get(0).name());
+ assertFalse(results.get(0).alreadyTracked());
+ }
- assertTrue(db.exists("add-1"));
- var found = db.findByMbid("add-1");
- assertTrue(found.isPresent());
- assertEquals("Add Artist", found.get().name());
+ @Test
+ void testSearchEmpty() {
+ var results = artistService.search("");
+ assertTrue(results.isEmpty());
+ }
+
+ @Test
+ void testAddArtist() {
+ var artist = artistService.addArtist("mock-mbid-1");
+ assertEquals("Mock Band", artist.name());
+ assertTrue(db.exists("mock-mbid-1"));
+ assertTrue(artist.albumMonitored());
+ }
+
+ @Test
+ void testAddArtistThenSearchShowsTracked() {
+ artistService.addArtist("mock-mbid-1");
+ var results = artistService.search("Mock");
+ assertTrue(results.get(0).alreadyTracked());
+ }
+
+ @Test
+ void testRemoveArtist() {
+ artistService.addArtist("mock-mbid-2");
+ assertTrue(db.exists("mock-mbid-2"));
+ artistService.removeArtist("mock-mbid-2");
+ assertFalse(db.exists("mock-mbid-2"));
+ }
+
+ @Test
+ void testUpdateMonitoring() {
+ artistService.addArtist("mock-mbid-3");
+ artistService.updateMonitoring("mock-mbid-3", new MonitoringFlags(false, true, false, false, false));
+
+ var artist = db.findByMbid("mock-mbid-3").orElseThrow();
+ assertFalse(artist.albumMonitored());
+ assertTrue(artist.singleMonitored());
}
@Test
@@ -48,29 +83,8 @@ class ArtistServiceTest {
@Test
void testFindAll() {
- db.insertArtist(new TrackedArtist("all-1", "First", "", "", true, false, false, false, false, Instant.now(), Instant.now()));
- db.insertArtist(new TrackedArtist("all-2", "Second", "", "", true, false, false, false, false, Instant.now(), Instant.now()));
-
+ artistService.addArtist("mock-mbid-4");
+ artistService.addArtist("mock-mbid-5");
assertEquals(2, artistService.findAll().size());
}
-
- @Test
- void testRemoveArtist() {
- db.insertArtist(new TrackedArtist("rem-1", "Remove Me", "", "", true, false, false, false, false, Instant.now(), Instant.now()));
- assertTrue(db.exists("rem-1"));
-
- artistService.removeArtist("rem-1");
- assertFalse(db.exists("rem-1"));
- }
-
- @Test
- void testUpdateMonitoring() {
- db.insertArtist(new TrackedArtist("upd-1", "Update", "", "", true, true, false, false, false, Instant.now(), Instant.now()));
- artistService.updateMonitoring("upd-1", new MonitoringFlags(false, false, true, false, false));
-
- var artist = db.findByMbid("upd-1").orElseThrow();
- assertFalse(artist.albumMonitored());
- assertFalse(artist.singleMonitored());
- assertTrue(artist.epMonitored());
- }
}
diff --git a/src/test/java/com/discdrop/FeedServiceTest.java b/src/test/java/com/discdrop/FeedServiceTest.java
index b65c146..2d22b8c 100644
--- a/src/test/java/com/discdrop/FeedServiceTest.java
+++ b/src/test/java/com/discdrop/FeedServiceTest.java
@@ -1,10 +1,9 @@
package com.discdrop;
-import com.discdrop.service.FeedService;
-import com.discdrop.service.CacheService;
import com.discdrop.db.DatabaseService;
-import com.discdrop.db.Record.TrackedArtist;
import com.discdrop.db.Record.ReleaseGroup;
+import com.discdrop.db.Record.TrackedArtist;
+import com.discdrop.service.FeedService;
import io.quarkus.test.junit.QuarkusTest;
import jakarta.inject.Inject;
import org.junit.jupiter.api.BeforeEach;
@@ -21,9 +20,6 @@ class FeedServiceTest {
@Inject
FeedService feedService;
- @Inject
- CacheService cacheService;
-
@Inject
DatabaseService db;
@@ -97,4 +93,14 @@ class FeedServiceTest {
assertTrue(feedService.getAllFeedEntries().isEmpty());
}
+
+ @Test
+ void testFeedWithArtistThatNeedsRefresh() {
+ db.insertArtist(new TrackedArtist("mock-artist", "Mock", "", "",
+ true, false, false, false, false, Instant.now(), Instant.now()));
+ db.setSetting("cache_ttl_hours", "0");
+
+ var feed = feedService.getAllFeedEntries();
+ assertNotNull(feed);
+ }
}
diff --git a/src/test/java/com/discdrop/MockMusicBrainz.java b/src/test/java/com/discdrop/MockMusicBrainz.java
new file mode 100644
index 0000000..f9834b8
--- /dev/null
+++ b/src/test/java/com/discdrop/MockMusicBrainz.java
@@ -0,0 +1,50 @@
+package com.discdrop;
+
+import com.discdrop.client.MusicBrainzClient;
+import com.discdrop.client.dto.*;
+import io.quarkus.test.Mock;
+import jakarta.enterprise.context.ApplicationScoped;
+import org.eclipse.microprofile.rest.client.inject.RestClient;
+import java.util.List;
+
+@Mock
+@ApplicationScoped
+@RestClient
+public class MockMusicBrainz implements MusicBrainzClient {
+
+ @Override
+ public ArtistSearchResponse searchArtists(String query, int limit, String fmt) {
+ if (query == null || query.isBlank() || query.equals("artist:")) {
+ return new ArtistSearchResponse(List.of(), 0);
+ }
+ return new ArtistSearchResponse(
+ List.of(new ArtistSearchResponse.Artist(
+ "mock-mbid-1", "Mock Band", "a mock band",
+ new ArtistSearchResponse.Area("US"), "Group", "US")),
+ 1
+ );
+ }
+
+ @Override
+ public ArtistDetailsResponse getArtistDetails(String mbid, String inc, String fmt) {
+ return new ArtistDetailsResponse(
+ mbid, "Mock Band", "a mock band",
+ new ArtistDetailsResponse.Area("US"), "Group", "US",
+ List.of()
+ );
+ }
+
+ @Override
+ public ReleaseGroupBrowseResponse browseReleaseGroups(String artistMbid, int limit, int offset, String inc, String fmt) {
+ return new ReleaseGroupBrowseResponse(
+ List.of(new ReleaseGroupBrowseResponse.ReleaseGroup(
+ "mock-rg-1", "Mock Album", "2020-01-15",
+ "Album", List.of("Studio"),
+ List.of(new ReleaseGroupBrowseResponse.ReleaseGroup.ArtistCredit(
+ new ReleaseGroupBrowseResponse.ReleaseGroup.ArtistCredit.Artist(artistMbid, "Mock Band")
+ ))
+ )),
+ 1
+ );
+ }
+}