Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -370,13 +370,12 @@ public DefaultTableModel getArtistsAsTableModel(MusicBrainzArtist[] artistArray)
* @param trackArray The array of tracks.
*/
public DefaultTableModel getTracksAsTableModel(MusicBrainzTrack[] trackArray) {
String[] columnNames = {"#", "Track Name", "Artist", "Length"};
String[] columnNames = {"#", "Track Name", "Length"};
return createTableModel(trackArray, columnNames, item -> {
MusicBrainzTrack track = (MusicBrainzTrack) item;
return new String[]{
getOrDefault(Integer.toString(track.getTrackNumber())),
getOrDefault(track.getTitle()),
getOrDefault(track.getArtist()),
getOrDefault(track.getLength())
};
});
Expand Down
30 changes: 28 additions & 2 deletions src/main/java/com/CDPrintable/ProgramWindow.java
Original file line number Diff line number Diff line change
Expand Up @@ -406,12 +406,38 @@ private void clickSearch(int row, int col, JTable table) {
System.out.println("This also kinda works");
String response = getReleaseTrackListResponseString(row);
MusicBrainzJSONReader reader = new MusicBrainzJSONReader(response);
DefaultTableModel model = reader.getTracksAsTableModel(reader.getReleaseTracks());
MusicBrainzTrack[] tracks = reader.getReleaseTracks();
DefaultTableModel model = reader.getTracksAsTableModel(tracks);

String title = table.getValueAt(row, 0).toString();
String artist = table.getValueAt(row, 1).toString();
int trackCount = Integer.parseInt(table.getValueAt(row, 2).toString());
String date = table.getValueAt(row, 3).toString();

JPanel mainPanel = new JPanel(new BorderLayout());
JPanel panel = new JPanel(new BorderLayout());
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

panel.add(new JLabel("Title: " + title));
panel.add(new JLabel("Artist: " + artist));
panel.add(new JLabel("Track Count: " + trackCount));
panel.add(new JLabel("Date: " + date));
JTable trackTable = new JTable(model);
resizeColumnWidths(trackTable);
JScrollPane trackScrollPane = new JScrollPane(trackTable);

mainPanel.add(panel, BorderLayout.NORTH);
mainPanel.add(trackScrollPane, BorderLayout.CENTER);
mainPanel.add(new JLabel("Would you like to add this record to your CD label?"), BorderLayout.SOUTH);

setSearchStatus("All Done!", "green");
JOptionPane.showMessageDialog(null, trackScrollPane, "Tracks", JOptionPane.PLAIN_MESSAGE);
// the worst she can say is no...
int result = JOptionPane.showConfirmDialog(null, mainPanel, "Tracks", JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.YES_OPTION) {
System.out.println("give me redbull");
} else if (result == JOptionPane.NO_OPTION) {
System.out.println("give me beer");
}
}
}
}
Expand Down
156 changes: 114 additions & 42 deletions src/test/java/MusicBrainzObjectTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,19 +42,34 @@ public void invalidJsonString() {
"{\"invalidKey\": []}, cdstubs",
"{\"cdstubs\": []}, cdstubs",
"{\"invalidKey\": []}, artists",
"{\"artists\": []}, artists"
"{\"artists\": []}, artists",
"{\"invalidKey\": []}, tracks",
"{\"tracks\": []}, tracks"
})
void testGetItemsWithInvalidJsonStructure(String jsonString, String key) {
MusicBrainzJSONReader reader = new MusicBrainzJSONReader(jsonString);

if (key.equals("releases")) {
MusicBrainzRelease[] releases = reader.getReleases();
assertNotNull(releases);
assertEquals(0, releases.length);
} else if (key.equals("cdstubs")) {
MusicBrainzCDStub[] cdStubs = reader.getCDStubs();
assertNotNull(cdStubs);
assertEquals(0, cdStubs.length);
switch (key) {
case "releases" -> {
MusicBrainzRelease[] releases = reader.getReleases();
assertNotNull(releases);
assertEquals(0, releases.length);
}
case "cdstubs" -> {
MusicBrainzCDStub[] cdStubs = reader.getCDStubs();
assertNotNull(cdStubs);
assertEquals(0, cdStubs.length);
}
case "artists" -> {
MusicBrainzArtist[] artists = reader.getArtists();
assertNotNull(artists);
assertEquals(0, artists.length);
}
case "tracks" -> {
MusicBrainzTrack[] tracks = reader.getTracks();
assertNotNull(tracks);
assertEquals(0, tracks.length);
}
}
}

Expand All @@ -67,30 +82,56 @@ void testGetItemsWithInvalidJsonStructure(String jsonString, String key) {
@CsvSource({
"{\"releases\": [{\"title\": null, \"date\": null, \"count\": null, \"id\": null, \"artist-credit\": []}]}, releases",
"{\"cdstubs\": [{\"title\": null, \"id\": null, \"count\": null, \"artist\": null}]}, cdstubs",
"{\"artists\": [{\"name\": null, \"sort-name\": null, \"country\": null, \"gender\": null, \"disambiguation\": null, \"life-span\": null}]}, artists"
"{\"artists\": [{\"name\": null, \"sort-name\": null, \"country\": null, \"gender\": null, \"disambiguation\": null, \"life-span\": null}]}, artists",
"{\"tracks\": [{\"title\": null, \"id\": null, \"count\": null, \"artist\": null}]}, tracks"
})
void testGetItemsWithMissingOrNullFields(String jsonString, String key) {
MusicBrainzJSONReader reader = new MusicBrainzJSONReader(jsonString);

if (key.equals("releases")) {
MusicBrainzRelease[] releases = reader.getReleases();
assertNotNull(releases);
assertEquals(1, releases.length);

assertNull(releases[0].getTitle());
assertNull(releases[0].getDate());
assertEquals(-1, releases[0].getTrackCount());
assertNull(releases[0].getId());
assertEquals(0, releases[0].getArtists().length);
} else if (key.equals("cdstubs")) {
MusicBrainzCDStub[] cdStubs = reader.getCDStubs();
assertNotNull(cdStubs);
assertEquals(1, cdStubs.length);

assertNull(cdStubs[0].getTitle());
assertNull(cdStubs[0].getId());
assertEquals(-1, cdStubs[0].getTrackCount());
assertNull(cdStubs[0].getArtists()[0]);
switch (key) {
case "releases" -> {
MusicBrainzRelease[] releases = reader.getReleases();
assertNotNull(releases);
assertEquals(1, releases.length);

assertNull(releases[0].getTitle());
assertNull(releases[0].getDate());
assertEquals(-1, releases[0].getTrackCount());
assertNull(releases[0].getId());
assertEquals(0, releases[0].getArtists().length);
}
case "cdstubs" -> {
MusicBrainzCDStub[] cdStubs = reader.getCDStubs();
assertNotNull(cdStubs);
assertEquals(1, cdStubs.length);

assertNull(cdStubs[0].getTitle());
assertNull(cdStubs[0].getId());
assertEquals(-1, cdStubs[0].getTrackCount());
assertNull(cdStubs[0].getArtists()[0]);
}
case "artists" -> {
MusicBrainzArtist[] artists = reader.getArtists();
assertNotNull(artists);
assertEquals(1, artists.length);

assertNull(artists[0].getName());
assertNull(artists[0].getSortName());
assertNull(artists[0].getCountry());
assertNull(artists[0].getGender());
assertNull(artists[0].getDisambiguation());
assertNull(artists[0].getLifeSpan());
}
case "tracks" -> {
MusicBrainzTrack[] tracks = reader.getTracks();
assertNotNull(tracks);
assertEquals(1, tracks.length);

assertNull(tracks[0].getTitle());
assertNull(tracks[0].getId());
assertEquals(-1, tracks[0].getTrackNumber());
assertNull(tracks[0].getArtist());
}
}
}

Expand All @@ -112,27 +153,48 @@ void testGetItemsWithMissingOrNullFields(String jsonString, String key) {
"cdstubs, false, {}", // case 2
"artists, true, null", // case 1
"artists, false, {}", // case 2
"tracks, true, null", // case 1
"tracks, false, {}", // case 2
"releases, false, {\"releases\": null}", // case 3
"cdstubs, false, {\"cdstubs\": null}", // case 3
"artists, false, {\"artists\": null}", // case 3
"tracks, false, {\"tracks\": null}", // case 3
"releases, false, {\"invalidKey\": []}", // case 4
"cdstubs, false, {\"invalidKey\": []}", // case 4
"artists, false, {\"invalidKey\": []}" // case 4
"artists, false, {\"invalidKey\": []}", // case 4
"tracks, false, {\"invalidKey\": []}" // case 4
})
void testGetTableModelWithArrayIssues(String key, boolean isNull, String readerJson) {
MusicBrainzJSONReader reader = new MusicBrainzJSONReader(readerJson != null ? readerJson : "");
if (key.equals("releases")) {
MusicBrainzRelease[] releases = isNull ? null : new MusicBrainzRelease[0];
DefaultTableModel tableModel = reader.getReleasesAsTableModel(releases);

assertNotNull(tableModel);
assertEquals(0, tableModel.getRowCount());
} else if (key.equals("cdstubs")) {
MusicBrainzCDStub[] cdStubs = isNull ? null : new MusicBrainzCDStub[0];
DefaultTableModel tableModel = reader.getCDStubsAsTableModel(cdStubs);

assertNotNull(tableModel);
assertEquals(0, tableModel.getRowCount());
switch (key) {
case "releases" -> {
MusicBrainzRelease[] releases = isNull ? null : new MusicBrainzRelease[0];
DefaultTableModel tableModel = reader.getReleasesAsTableModel(releases);

assertNotNull(tableModel);
assertEquals(0, tableModel.getRowCount());
}
case "cdstubs" -> {
MusicBrainzCDStub[] cdStubs = isNull ? null : new MusicBrainzCDStub[0];
DefaultTableModel tableModel = reader.getCDStubsAsTableModel(cdStubs);

assertNotNull(tableModel);
assertEquals(0, tableModel.getRowCount());
}
case "artists" -> {
MusicBrainzArtist[] artists = isNull ? null : new MusicBrainzArtist[0];
DefaultTableModel tableModel = reader.getArtistsAsTableModel(artists);

assertNotNull(tableModel);
assertEquals(0, tableModel.getRowCount());
}
case "tracks" -> {
MusicBrainzTrack[] tracks = isNull ? null : new MusicBrainzTrack[0];
DefaultTableModel tableModel = reader.getTracksAsTableModel(tracks);

assertNotNull(tableModel);
assertEquals(0, tableModel.getRowCount());
}
}
}

Expand Down Expand Up @@ -229,6 +291,16 @@ void genericGetArtistsTest() {

}

/**
* Test the JSON reader against the example JSON files. This is effectively
* normal operation for the program.
* This test is for Tracks.
*/
@Test
public void genericGetTracksTest() {

}

/**
* Tests the JSON reader again, but requests a table model and tests that instead.
* This is effectively normal operation for the program.
Expand Down