You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.3 KiB
91 lines
3.3 KiB
|
|
package org.airsonic.player.service.search;
|
|
|
|
import org.airsonic.player.domain.MediaFile;
|
|
import org.airsonic.player.domain.MusicFolder;
|
|
import org.airsonic.player.service.SearchService;
|
|
import org.junit.Assert;
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import java.io.File;
|
|
import java.util.ArrayList;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.stream.Collectors;
|
|
|
|
import static org.springframework.util.ObjectUtils.isEmpty;
|
|
|
|
/*
|
|
* Test cases related to #1139.
|
|
* Confirming whether shuffle search can be performed correctly in MusicFolder containing special strings.
|
|
*
|
|
* (Since the query of getRandomAlbums consists of folder paths only,
|
|
* this verification is easy to perform.)
|
|
*
|
|
* This test case is a FalsePattern for search,
|
|
* but there may be problems with the data flow prior to creating the search index.
|
|
*/
|
|
public class SearchServiceSpecialPathTestCase extends AbstractAirsonicHomeTest {
|
|
|
|
private List<MusicFolder> musicFolders;
|
|
|
|
@Autowired
|
|
private SearchService searchService;
|
|
|
|
@Override
|
|
public List<MusicFolder> getMusicFolders() {
|
|
if (isEmpty(musicFolders)) {
|
|
musicFolders = new ArrayList<>();
|
|
|
|
File musicDir = new File(resolveBaseMediaPath.apply("Search/SpecialPath/accessible"));
|
|
musicFolders.add(new MusicFolder(1, musicDir, "accessible", true, new Date()));
|
|
|
|
File music2Dir = new File(resolveBaseMediaPath.apply("Search/SpecialPath/accessible's"));
|
|
musicFolders.add(new MusicFolder(2, music2Dir, "accessible's", true, new Date()));
|
|
|
|
File music3Dir = new File(resolveBaseMediaPath.apply("Search/SpecialPath/accessible+s"));
|
|
musicFolders.add(new MusicFolder(3, music3Dir, "accessible+s", true, new Date()));
|
|
}
|
|
return musicFolders;
|
|
}
|
|
|
|
@Before
|
|
public void setup() {
|
|
populateDatabaseOnlyOnce();
|
|
}
|
|
|
|
@Test
|
|
public void testSpecialCharactersInDirName() {
|
|
|
|
List<MusicFolder> folders = getMusicFolders();
|
|
|
|
// ALL Songs
|
|
List<MediaFile> randomAlbums = searchService.getRandomAlbums(Integer.MAX_VALUE, folders);
|
|
Assert.assertEquals("ALL Albums ", 3, randomAlbums.size());
|
|
|
|
// dir - accessible
|
|
List<MusicFolder> folder01 = folders.stream()
|
|
.filter(m -> "accessible".equals(m.getName()))
|
|
.collect(Collectors.toList());
|
|
randomAlbums = searchService.getRandomAlbums(Integer.MAX_VALUE, folder01);
|
|
Assert.assertEquals("Albums in \"accessible\" ", 1, randomAlbums.size());
|
|
|
|
// dir - accessible's
|
|
List<MusicFolder> folder02 = folders.stream()
|
|
.filter(m -> "accessible's".equals(m.getName()))
|
|
.collect(Collectors.toList());
|
|
randomAlbums = searchService.getRandomAlbums(Integer.MAX_VALUE, folder02);
|
|
Assert.assertEquals("Albums in \"accessible's\" ", 1, randomAlbums.size());
|
|
|
|
// dir - accessible+s
|
|
List<MusicFolder> folder03 = folders.stream()
|
|
.filter(m -> "accessible+s".equals(m.getName()))
|
|
.collect(Collectors.toList());
|
|
randomAlbums = searchService.getRandomAlbums(Integer.MAX_VALUE, folder03);
|
|
Assert.assertEquals("Albums in \"accessible+s\" ", 1, folder03.size());
|
|
|
|
}
|
|
|
|
}
|
|
|