When DB expunge is invoked from the management screen, also indexManager performs expunge. Signed-off-by: Andrew DeMaria <lostonamountain@gmail.com>master
							parent
							
								
									c6ae5a1df7
								
							
						
					
					
						commit
						645fb88c7d
					
				| @ -0,0 +1,201 @@ | |||||||
|  | /* | ||||||
|  |  This file is part of Airsonic. | ||||||
|  | 
 | ||||||
|  |  Airsonic is free software: you can redistribute it and/or modify | ||||||
|  |  it under the terms of the GNU General Public License as published by | ||||||
|  |  the Free Software Foundation, either version 3 of the License, or | ||||||
|  |  (at your option) any later version. | ||||||
|  | 
 | ||||||
|  |  Airsonic is distributed in the hope that it will be useful, | ||||||
|  |  but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  GNU General Public License for more details. | ||||||
|  | 
 | ||||||
|  |  You should have received a copy of the GNU General Public License | ||||||
|  |  along with Airsonic.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  | 
 | ||||||
|  |  Copyright 2016 (C) Airsonic Authors | ||||||
|  |  Based upon Subsonic, Copyright 2009 (C) Sindre Mehus | ||||||
|  |  */ | ||||||
|  | package org.airsonic.player.service.search; | ||||||
|  | 
 | ||||||
|  | import org.airsonic.player.dao.AlbumDao; | ||||||
|  | import org.airsonic.player.dao.ArtistDao; | ||||||
|  | import org.airsonic.player.dao.MediaFileDao; | ||||||
|  | import org.airsonic.player.domain.MusicFolder; | ||||||
|  | import org.airsonic.player.domain.SearchCriteria; | ||||||
|  | import org.airsonic.player.domain.SearchResult; | ||||||
|  | import org.airsonic.player.service.SearchService; | ||||||
|  | import org.airsonic.player.service.search.IndexManager; | ||||||
|  | import org.airsonic.player.service.search.IndexType; | ||||||
|  | import org.junit.Before; | ||||||
|  | import org.junit.Rule; | ||||||
|  | import org.junit.Test; | ||||||
|  | import org.junit.rules.TemporaryFolder; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.core.io.ResourceLoader; | ||||||
|  | 
 | ||||||
|  | import java.io.File; | ||||||
|  | import java.util.Date; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.ArrayList; | ||||||
|  | 
 | ||||||
|  | import static org.junit.Assert.assertEquals; | ||||||
|  | import static org.springframework.util.ObjectUtils.isEmpty; | ||||||
|  | 
 | ||||||
|  | public class IndexManagerTestCase extends AbstractAirsonicHomeTest { | ||||||
|  | 
 | ||||||
|  |     private List<MusicFolder> musicFolders; | ||||||
|  | 
 | ||||||
|  |     @Autowired | ||||||
|  |     private SearchService searchService; | ||||||
|  | 
 | ||||||
|  |     @Autowired | ||||||
|  |     private IndexManager indexManager; | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public List<MusicFolder> getMusicFolders() { | ||||||
|  |         if (isEmpty(musicFolders)) { | ||||||
|  |             musicFolders = new ArrayList<>(); | ||||||
|  |             File musicDir = new File(resolveBaseMediaPath.apply("Music")); | ||||||
|  |             musicFolders.add(new MusicFolder(1, musicDir, "Music", true, new Date())); | ||||||
|  |         } | ||||||
|  |         return musicFolders; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Before | ||||||
|  |     public void setup() throws Exception { | ||||||
|  |         populateDatabaseOnlyOnce(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Autowired | ||||||
|  |     private MediaFileDao mediaFileDao; | ||||||
|  | 
 | ||||||
|  |     @Autowired | ||||||
|  |     private ArtistDao artistDao; | ||||||
|  | 
 | ||||||
|  |     @Autowired | ||||||
|  |     private AlbumDao albumDao; | ||||||
|  | 
 | ||||||
|  |     @Rule | ||||||
|  |     public TemporaryFolder temporaryFolder = new TemporaryFolder(); | ||||||
|  | 
 | ||||||
|  |     @Autowired | ||||||
|  |     ResourceLoader resourceLoader; | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void testExpunge() throws InterruptedException { | ||||||
|  | 
 | ||||||
|  |         SearchCriteria criteria = new SearchCriteria(); | ||||||
|  |         criteria.setOffset(0); | ||||||
|  |         criteria.setCount(Integer.MAX_VALUE); | ||||||
|  |         criteria.setQuery("_DIR_ Ravel"); | ||||||
|  | 
 | ||||||
|  |         SearchCriteria criteriaSong = new SearchCriteria(); | ||||||
|  |         criteriaSong.setOffset(0); | ||||||
|  |         criteriaSong.setCount(Integer.MAX_VALUE); | ||||||
|  |         criteriaSong.setQuery("Gaspard"); | ||||||
|  | 
 | ||||||
|  |         SearchCriteria criteriaAlbumId3 = new SearchCriteria(); | ||||||
|  |         criteriaAlbumId3.setOffset(0); | ||||||
|  |         criteriaAlbumId3.setCount(Integer.MAX_VALUE); | ||||||
|  |         criteriaAlbumId3.setQuery("Complete Piano Works"); | ||||||
|  | 
 | ||||||
|  |         /* Delete DB record. */ | ||||||
|  | 
 | ||||||
|  |         // artist
 | ||||||
|  |         SearchResult result = searchService.search(criteria, musicFolders, IndexType.ARTIST); | ||||||
|  |         assertEquals(2, result.getMediaFiles().size()); | ||||||
|  |         assertEquals("_DIR_ Ravel", result.getMediaFiles().get(0).getName()); | ||||||
|  |         assertEquals("_DIR_ Sixteen Horsepower", result.getMediaFiles().get(1).getName()); | ||||||
|  | 
 | ||||||
|  |         List<Integer> candidates = mediaFileDao.getArtistExpungeCandidates(); | ||||||
|  |         assertEquals(0, candidates.size()); | ||||||
|  | 
 | ||||||
|  |         result.getMediaFiles().forEach(a -> mediaFileDao.deleteMediaFile(a.getPath())); | ||||||
|  | 
 | ||||||
|  |         candidates = mediaFileDao.getArtistExpungeCandidates(); | ||||||
|  |         assertEquals(2, candidates.size()); | ||||||
|  | 
 | ||||||
|  |         // album
 | ||||||
|  |         result = searchService.search(criteria, musicFolders, IndexType.ALBUM); | ||||||
|  |         assertEquals(2, result.getMediaFiles().size()); | ||||||
|  |         assertEquals("_DIR_ Ravel - Complete Piano Works", result.getMediaFiles().get(0).getName()); | ||||||
|  |         assertEquals("_DIR_ Ravel - Chamber Music With Voice", result.getMediaFiles().get(1).getName()); | ||||||
|  | 
 | ||||||
|  |         candidates = mediaFileDao.getAlbumExpungeCandidates(); | ||||||
|  |         assertEquals(0, candidates.size()); | ||||||
|  | 
 | ||||||
|  |         result.getMediaFiles().forEach(a -> mediaFileDao.deleteMediaFile(a.getPath())); | ||||||
|  | 
 | ||||||
|  |         candidates = mediaFileDao.getAlbumExpungeCandidates(); | ||||||
|  |         assertEquals(2, candidates.size()); | ||||||
|  | 
 | ||||||
|  |         // song
 | ||||||
|  |         result = searchService.search(criteriaSong, musicFolders, IndexType.SONG); | ||||||
|  |         assertEquals(2, result.getMediaFiles().size()); | ||||||
|  |         assertEquals("01 - Gaspard de la Nuit - i. Ondine", result.getMediaFiles().get(0).getName()); | ||||||
|  |         assertEquals("02 - Gaspard de la Nuit - ii. Le Gibet", result.getMediaFiles().get(1).getName()); | ||||||
|  | 
 | ||||||
|  |         candidates = mediaFileDao.getSongExpungeCandidates(); | ||||||
|  |         assertEquals(0, candidates.size()); | ||||||
|  | 
 | ||||||
|  |         result.getMediaFiles().forEach(a -> mediaFileDao.deleteMediaFile(a.getPath())); | ||||||
|  | 
 | ||||||
|  |         candidates = mediaFileDao.getSongExpungeCandidates(); | ||||||
|  |         assertEquals(2, candidates.size()); | ||||||
|  | 
 | ||||||
|  |         // artistid3
 | ||||||
|  |         result = searchService.search(criteria, musicFolders, IndexType.ARTIST_ID3); | ||||||
|  |         assertEquals(1, result.getArtists().size()); | ||||||
|  |         assertEquals("_DIR_ Ravel", result.getArtists().get(0).getName()); | ||||||
|  | 
 | ||||||
|  |         candidates = artistDao.getExpungeCandidates(); | ||||||
|  |         assertEquals(0, candidates.size()); | ||||||
|  | 
 | ||||||
|  |         artistDao.markNonPresent(new Date()); | ||||||
|  | 
 | ||||||
|  |         candidates = artistDao.getExpungeCandidates(); | ||||||
|  |         assertEquals(4, candidates.size()); | ||||||
|  | 
 | ||||||
|  |         // albumId3
 | ||||||
|  |         result = searchService.search(criteriaAlbumId3, musicFolders, IndexType.ALBUM_ID3); | ||||||
|  |         assertEquals(1, result.getAlbums().size()); | ||||||
|  |         assertEquals("Complete Piano Works", result.getAlbums().get(0).getName()); | ||||||
|  | 
 | ||||||
|  |         candidates = albumDao.getExpungeCandidates(); | ||||||
|  |         assertEquals(0, candidates.size()); | ||||||
|  | 
 | ||||||
|  |         albumDao.markNonPresent(new Date()); | ||||||
|  | 
 | ||||||
|  |         candidates = albumDao.getExpungeCandidates(); | ||||||
|  |         assertEquals(4, candidates.size()); | ||||||
|  | 
 | ||||||
|  |         /* Does not scan, only expunges the index. */ | ||||||
|  |         indexManager.startIndexing(); | ||||||
|  |         indexManager.expunge(); | ||||||
|  |         indexManager.stopIndexing(); | ||||||
|  | 
 | ||||||
|  |         /*  | ||||||
|  |          * Subsequent search results. | ||||||
|  |          * Results can also be confirmed with Luke. | ||||||
|  |          */ | ||||||
|  | 
 | ||||||
|  |         result = searchService.search(criteria, musicFolders, IndexType.ARTIST); | ||||||
|  |         assertEquals(0, result.getMediaFiles().size()); | ||||||
|  | 
 | ||||||
|  |         result = searchService.search(criteria, musicFolders, IndexType.ALBUM); | ||||||
|  |         assertEquals(0, result.getMediaFiles().size()); | ||||||
|  | 
 | ||||||
|  |         result = searchService.search(criteriaSong, musicFolders, IndexType.SONG); | ||||||
|  |         assertEquals(0, result.getMediaFiles().size()); | ||||||
|  | 
 | ||||||
|  |         result = searchService.search(criteria, musicFolders, IndexType.ARTIST_ID3); | ||||||
|  |         assertEquals(0, result.getArtists().size()); | ||||||
|  | 
 | ||||||
|  |         result = searchService.search(criteriaAlbumId3, musicFolders, IndexType.ALBUM_ID3); | ||||||
|  |         assertEquals(0, result.getAlbums().size()); | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
					Loading…
					
					
				
		Reference in new issue