From 29e9216bb1a0b0772601438905ac68977febed0a Mon Sep 17 00:00:00 2001 From: mikiher Date: Tue, 12 Mar 2024 13:17:52 +0200 Subject: [PATCH 1/3] Make series sequence cleanup slighlty less aggressive --- server/providers/Audible.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/server/providers/Audible.js b/server/providers/Audible.js index e46ed323..a9e7b0cd 100644 --- a/server/providers/Audible.js +++ b/server/providers/Audible.js @@ -30,9 +30,7 @@ class Audible { cleanSeriesSequence(seriesName, sequence) { if (!sequence) return '' let updatedSequence = sequence.replace(/Book /, '').trim() - if (updatedSequence.includes(' ')) { - updatedSequence = updatedSequence.split(' ').shift().replace(/,$/, '') - } + updatedSequence = updatedSequence.replace(/(\d+)(, .*)/, '$1').trim() if (sequence !== updatedSequence) { Logger.debug(`[Audible] Series "${seriesName}" sequence was cleaned from "${sequence}" to "${updatedSequence}"`) } From 8826d3af62ec534ca23706a41370a7720cb34963 Mon Sep 17 00:00:00 2001 From: mikiher Date: Thu, 14 Mar 2024 19:36:51 +0200 Subject: [PATCH 2/3] fix cleanSeriesSequence method to extract first numeric value --- server/providers/Audible.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server/providers/Audible.js b/server/providers/Audible.js index a9e7b0cd..de98f67b 100644 --- a/server/providers/Audible.js +++ b/server/providers/Audible.js @@ -29,8 +29,9 @@ class Audible { */ cleanSeriesSequence(seriesName, sequence) { if (!sequence) return '' - let updatedSequence = sequence.replace(/Book /, '').trim() - updatedSequence = updatedSequence.replace(/(\d+)(, .*)/, '$1').trim() + // match any number with optional decimal (e.g, 1 or 1.5 or .5) + let numberFound = sequence.match(/\.\d+|\d+(?:\.\d+)?/) + let updatedSequence = numberFound ? numberFound[0] : sequence if (sequence !== updatedSequence) { Logger.debug(`[Audible] Series "${seriesName}" sequence was cleaned from "${sequence}" to "${updatedSequence}"`) } From ae395497a5da9cbec9940a675d78d1b43bee91fa Mon Sep 17 00:00:00 2001 From: mikiher Date: Thu, 14 Mar 2024 19:37:51 +0200 Subject: [PATCH 3/3] Add tests for cleanSeriesSequence --- test/server/providers/Audible.test.js | 48 +++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 test/server/providers/Audible.test.js diff --git a/test/server/providers/Audible.test.js b/test/server/providers/Audible.test.js new file mode 100644 index 00000000..67e85111 --- /dev/null +++ b/test/server/providers/Audible.test.js @@ -0,0 +1,48 @@ +const Audible = require('../../../server/providers/Audible') +const { expect } = require('chai') +const sinon = require('sinon') + +describe('Audible', () => { + let audible; + + beforeEach(() => { + audible = new Audible(); + }); + + describe('cleanSeriesSequence', () => { + it('should return an empty string if sequence is falsy', () => { + const result = audible.cleanSeriesSequence('Series Name', null) + expect(result).to.equal('') + }) + + it('should return the sequence as is if it does not contain a number', () => { + const result = audible.cleanSeriesSequence('Series Name', 'part a') + expect(result).to.equal('part a') + }) + + it('should return the sequence as is if contains just a number', () => { + const result = audible.cleanSeriesSequence('Series Name', '2') + expect(result).to.equal('2') + }) + + it('should return the sequence as is if contains just a number with decimals', () => { + const result = audible.cleanSeriesSequence('Series Name', '2.3') + expect(result).to.equal('2.3') + }) + + it('should extract and return the first number from the sequence', () => { + const result = audible.cleanSeriesSequence('Series Name', 'Book 1') + expect(result).to.equal('1') + }) + + it('should extract and return the number with decimals from the sequence', () => { + const result = audible.cleanSeriesSequence('Series Name', 'Book 1.5') + expect(result).to.equal('1.5') + }) + + it('should extract and return the number even if it has no leading zero', () => { + const result = audible.cleanSeriesSequence('Series Name', 'Book .5') + expect(result).to.equal('.5') + }) + }) +}) \ No newline at end of file