mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-30 18:12:25 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			53 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const Path = require('path')
 | |
| const chai = require('chai')
 | |
| const expect = chai.expect
 | |
| const scanUtils = require('../../../server/utils/scandir')
 | |
| 
 | |
| describe('scanUtils', async () => {
 | |
|   it('should properly group files into potential book library items', async () => {
 | |
|     global.isWin = process.platform === 'win32'
 | |
|     global.ServerSettings = {
 | |
|       scannerParseSubtitle: true
 | |
|     }
 | |
| 
 | |
|     const filePaths = [
 | |
|       'randomfile.txt', // Should be ignored because it's not a book media file
 | |
|       'Book1.m4b', // Root single file audiobook
 | |
|       'Book2/audiofile.m4b',
 | |
|       'Book2/disk 001/audiofile.m4b',
 | |
|       'Book2/disk 002/audiofile.m4b',
 | |
|       'Author/Book3/audiofile.mp3',
 | |
|       'Author/Book3/Disc 1/audiofile.mp3',
 | |
|       'Author/Book3/Disc 2/audiofile.mp3',
 | |
|       'Author/Series/Book4/cover.jpg',
 | |
|       'Author/Series/Book4/CD1/audiofile.mp3',
 | |
|       'Author/Series/Book4/CD2/audiofile.mp3',
 | |
|       'Author/Series2/Book5/deeply/nested/cd 01/audiofile.mp3',
 | |
|       'Author/Series2/Book5/deeply/nested/cd 02/audiofile.mp3',
 | |
|       'Author/Series2/Book5/randomfile.js' // Should be ignored because it's not a book media file
 | |
|     ]
 | |
| 
 | |
|     // Create fileItems to match the format of fileUtils.recurseFiles
 | |
|     const fileItems = []
 | |
|     for (const filePath of filePaths) {
 | |
|       const dirname = Path.dirname(filePath)
 | |
|       fileItems.push({
 | |
|         name: Path.basename(filePath),
 | |
|         reldirpath: dirname === '.' ? '' : dirname,
 | |
|         extension: Path.extname(filePath),
 | |
|         deep: filePath.split('/').length - 1
 | |
|       })
 | |
|     }
 | |
| 
 | |
|     const libraryItemGrouping = scanUtils.groupFileItemsIntoLibraryItemDirs('book', fileItems, false)
 | |
| 
 | |
|     expect(libraryItemGrouping).to.deep.equal({
 | |
|       'Book1.m4b': 'Book1.m4b',
 | |
|       Book2: ['audiofile.m4b', 'disk 001/audiofile.m4b', 'disk 002/audiofile.m4b'],
 | |
|       'Author/Book3': ['audiofile.mp3', 'Disc 1/audiofile.mp3', 'Disc 2/audiofile.mp3'],
 | |
|       'Author/Series/Book4': ['CD1/audiofile.mp3', 'CD2/audiofile.mp3', 'cover.jpg'],
 | |
|       'Author/Series2/Book5/deeply/nested': ['cd 01/audiofile.mp3', 'cd 02/audiofile.mp3']
 | |
|     })
 | |
|   })
 | |
| })
 |