mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-30 18:12:25 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			100 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const chai = require('chai')
 | |
| const expect = chai.expect
 | |
| const { parse, nameToLastFirst } = require('../../../../server/utils/parsers/parseNameString')
 | |
| 
 | |
| describe('parseNameString', () => {
 | |
|   describe('parse', () => {
 | |
|     it('returns null if nameString is empty', () => {
 | |
|       const result = parse('')
 | |
|       expect(result).to.be.null
 | |
|     })
 | |
| 
 | |
|     it('parses single name in First Last format', () => {
 | |
|       const result = parse('John Smith')
 | |
|       expect(result.names).to.deep.equal(['John Smith'])
 | |
|     })
 | |
| 
 | |
|     it('parses single name in Last, First format', () => {
 | |
|       const result = parse('Smith, John')
 | |
|       expect(result.names).to.deep.equal(['John Smith'])
 | |
|     })
 | |
| 
 | |
|     it('parses multiple names separated by &', () => {
 | |
|       const result = parse('John Smith & Jane Doe')
 | |
|       expect(result.names).to.deep.equal(['John Smith', 'Jane Doe'])
 | |
|     })
 | |
| 
 | |
|     it('parses multiple names separated by "and"', () => {
 | |
|       const result = parse('John Smith and Jane Doe')
 | |
|       expect(result.names).to.deep.equal(['John Smith', 'Jane Doe'])
 | |
|     })
 | |
| 
 | |
|     it('parses multiple names separated by comma and "and"', () => {
 | |
|       const result = parse('John Smith, Jane Doe and John Doe')
 | |
|       expect(result.names).to.deep.equal(['John Smith', 'Jane Doe', 'John Doe'])
 | |
|     })
 | |
| 
 | |
|     it('parses multiple names separated by semicolon', () => {
 | |
|       const result = parse('John Smith; Jane Doe')
 | |
|       expect(result.names).to.deep.equal(['John Smith', 'Jane Doe'])
 | |
|     })
 | |
| 
 | |
|     it('parses multiple names in Last, First format', () => {
 | |
|       const result = parse('Smith, John, Doe, Jane')
 | |
|       expect(result.names).to.deep.equal(['John Smith', 'Jane Doe'])
 | |
|     })
 | |
| 
 | |
|     it('parses multiple names with single word name', () => {
 | |
|       const result = parse('John Smith, Jones, James Doe, Ludwig von Mises')
 | |
|       expect(result.names).to.deep.equal(['John Smith', 'Jones', 'James Doe', 'Ludwig von Mises'])
 | |
|     })
 | |
| 
 | |
|     it('parses multiple names with single word name listed first (semicolon separator)', () => {
 | |
|       const result = parse('Jones; John Smith; James Doe; Ludwig von Mises')
 | |
|       expect(result.names).to.deep.equal(['Jones', 'John Smith', 'James Doe', 'Ludwig von Mises'])
 | |
|     })
 | |
| 
 | |
|     it('handles names with suffixes', () => {
 | |
|       const result = parse('Smith, John Jr.')
 | |
|       expect(result.names).to.deep.equal(['John Jr. Smith'])
 | |
|     })
 | |
| 
 | |
|     it('handles compound last names', () => {
 | |
|       const result = parse('von Mises, Ludwig')
 | |
|       expect(result.names).to.deep.equal(['Ludwig von Mises'])
 | |
|     })
 | |
| 
 | |
|     it('handles Chinese/Japanese/Korean names', () => {
 | |
|       const result = parse('张三, 李四')
 | |
|       expect(result.names).to.deep.equal(['张三', '李四'])
 | |
|     })
 | |
| 
 | |
|     it('removes duplicate names', () => {
 | |
|       const result = parse('John Smith & John Smith')
 | |
|       expect(result.names).to.deep.equal(['John Smith'])
 | |
|     })
 | |
| 
 | |
|     it('filters out empty names', () => {
 | |
|       const result = parse('John Smith,')
 | |
|       expect(result.names).to.deep.equal(['John Smith'])
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   describe('nameToLastFirst', () => {
 | |
|     it('converts First Last to Last, First format', () => {
 | |
|       const result = nameToLastFirst('John Smith')
 | |
|       expect(result).to.equal('Smith, John')
 | |
|     })
 | |
| 
 | |
|     it('returns last name only when no first name', () => {
 | |
|       const result = nameToLastFirst('Smith')
 | |
|       expect(result).to.equal('Smith')
 | |
|     })
 | |
| 
 | |
|     it('handles names with middle names', () => {
 | |
|       const result = nameToLastFirst('John Middle Smith')
 | |
|       expect(result).to.equal('Smith, John Middle')
 | |
|     })
 | |
|   })
 | |
| })
 |