Skip to content

Commit 6e7ec01

Browse files
authored
feat: add track lookup by ISRC (#206)
1 parent 01bbf62 commit 6e7ec01

6 files changed

Lines changed: 63 additions & 0 deletions

File tree

bruno-collection/opencollection.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ request:
3333
value: "605632582"
3434
- name: track-id
3535
value: "541999"
36+
- name: track-isrc
37+
value: "USRC18207933"
3638
bundled: false
3739
extensions:
3840
ignore:
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
info:
2+
name: get-track-by-isrc
3+
type: http
4+
seq: 3
5+
6+
http:
7+
method: GET
8+
url: "{{api-host}}/track/isrc:{{track-isrc}}"
9+
auth: inherit
10+
11+
settings:
12+
encodeUrl: true
13+
timeout: 0
14+
followRedirects: true
15+
maxRedirects: 5

src/integrationTest/java/io/github/yvasyliev/dz4j/TrackIT.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,20 @@ void shouldReturnTrack(long trackId, String file) throws IOException {
4545
assertEquals(expected, deezerClient.track().getTrack(trackId));
4646
}
4747

48+
@Test
49+
void shouldReturnTrackByIsrc() throws IOException {
50+
var isrc = "USRC18207933";
51+
var body = read("/response/track/get-track-maneater.json");
52+
var expected = MAPPER.readValue(body, Track.class);
53+
54+
stubFor(get(urlPathTemplate("/track/isrc:{isrc}"))
55+
.withPathParam("isrc", equalTo(isrc))
56+
.willReturn(okJson(body))
57+
);
58+
59+
assertEquals(expected, deezerClient.track().getTrackByIsrc(isrc));
60+
}
61+
4862
@Test
4963
void shouldUpdateTrack() throws IOException {
5064
var trackId = 541999L;

src/main/java/io/github/yvasyliev/dz4j/factory/TrackRequestFactory.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.github.yvasyliev.dz4j.model.Track;
55
import io.github.yvasyliev.dz4j.request.DeezerRequest;
66
import io.github.yvasyliev.dz4j.request.IdDeezerRequest;
7+
import io.github.yvasyliev.dz4j.request.SimpleDeezerRequest;
78
import io.github.yvasyliev.dz4j.request.UpdateTrackDeezerRequest;
89
import io.github.yvasyliev.dz4j.service.TrackService;
910
import lombok.RequiredArgsConstructor;
@@ -26,6 +27,16 @@ public DeezerRequest<Track> getTrack(long trackId) {
2627
return new IdDeezerRequest<>(trackId, trackService::getTrack);
2728
}
2829

30+
/**
31+
* Creates a request to get a track by its ISRC (International Standard Recording Code).
32+
*
33+
* @param isrc track ISRC
34+
* @return request to get a track
35+
*/
36+
public DeezerRequest<Track> getTrackByIsrc(String isrc) {
37+
return new SimpleDeezerRequest<>(() -> trackService.getTrackByIsrc(isrc));
38+
}
39+
2940
/**
3041
* Creates a request to update a track.
3142
*

src/main/java/io/github/yvasyliev/dz4j/service/TrackService.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@ public interface TrackService {
2424
@RequestLine("GET /track/{trackId}")
2525
CompletableFuture<Track> getTrack(@Param("trackId") long trackId);
2626

27+
/**
28+
* Returns a track by its ISRC (International Standard Recording Code).
29+
*
30+
* @param isrc the track's ISRC
31+
* @return a track
32+
*/
33+
@RequestLine("GET /track/isrc:{isrc}")
34+
CompletableFuture<Track> getTrackByIsrc(@Param("isrc") String isrc);
35+
2736
/**
2837
* Updates a user's track information.
2938
*

src/test/java/io/github/yvasyliev/dz4j/factory/TrackRequestFactoryTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@ void testGetTrack() {
3434
assertEquals(expected, actual);
3535
}
3636

37+
@Test
38+
void testGetTrackByIsrc() {
39+
var isrc = "USRC18207933";
40+
var expected = Track.builder().isrc(isrc).build();
41+
42+
when(trackService.getTrackByIsrc(isrc)).thenReturn(CompletableFuture.completedFuture(expected));
43+
44+
var actual = trackRequestFactory.getTrackByIsrc(isrc).execute();
45+
46+
assertEquals(expected, actual);
47+
}
48+
3749
@Test
3850
void testUpdateTrack() {
3951
var trackId = 123L;

0 commit comments

Comments
 (0)