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')
|
|
})
|
|
})
|
|
})
|