mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-05-13 06:51:29 +00:00
Add OpenAI series evaluation
This commit is contained in:
parent
5b2a788cfc
commit
77206d90cb
11 changed files with 1107 additions and 2 deletions
83
test/server/providers/OpenAI.test.js
Normal file
83
test/server/providers/OpenAI.test.js
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
const { expect } = require('chai')
|
||||
const OpenAI = require('../../../server/providers/OpenAI')
|
||||
|
||||
describe('OpenAI', () => {
|
||||
let openAI
|
||||
|
||||
beforeEach(() => {
|
||||
openAI = new OpenAI()
|
||||
})
|
||||
|
||||
describe('parseJsonResponse', () => {
|
||||
it('parses fenced JSON', () => {
|
||||
const payload = openAI.parseJsonResponse('```json\n{"books":[{"id":"1","sequence":"1"}]}\n```')
|
||||
expect(payload.books).to.have.length(1)
|
||||
expect(payload.books[0].id).to.equal('1')
|
||||
})
|
||||
|
||||
it('parses JSON wrapped in extra text', () => {
|
||||
const payload = openAI.parseJsonResponse('Result:\n{"books":[{"id":"1","sequence":"1"}]}')
|
||||
expect(payload.books[0].sequence).to.equal('1')
|
||||
})
|
||||
})
|
||||
|
||||
describe('validateSeriesOrderPayload', () => {
|
||||
it('normalizes valid ordered books', () => {
|
||||
const result = openAI.validateSeriesOrderPayload(
|
||||
{
|
||||
books: [
|
||||
{ id: 'b', sequence: '2' },
|
||||
{ id: 'a', sequence: '1' }
|
||||
]
|
||||
},
|
||||
[{ id: 'a' }, { id: 'b' }]
|
||||
)
|
||||
|
||||
expect(result.map((book) => book.id)).to.deep.equal(['a', 'b'])
|
||||
})
|
||||
|
||||
it('rejects duplicate sequences', () => {
|
||||
expect(() =>
|
||||
openAI.validateSeriesOrderPayload(
|
||||
{
|
||||
books: [
|
||||
{ id: 'a', sequence: '1' },
|
||||
{ id: 'b', sequence: '1' }
|
||||
]
|
||||
},
|
||||
[{ id: 'a' }, { id: 'b' }]
|
||||
)
|
||||
).to.throw('duplicate sequence')
|
||||
})
|
||||
})
|
||||
|
||||
describe('validateSeriesDetectionPayload', () => {
|
||||
it('allows null standalone assignments', () => {
|
||||
const result = openAI.validateSeriesDetectionPayload(
|
||||
{
|
||||
books: [
|
||||
{ id: 'a', seriesName: null, sequence: null },
|
||||
{ id: 'b', seriesName: 'Series Name', sequence: '1.5' }
|
||||
]
|
||||
},
|
||||
[{ id: 'a' }, { id: 'b' }]
|
||||
)
|
||||
|
||||
expect(result[0].seriesName).to.equal(null)
|
||||
expect(result[1].sequence).to.equal('1.5')
|
||||
})
|
||||
|
||||
it('rejects a series assignment without sequence', () => {
|
||||
expect(() =>
|
||||
openAI.validateSeriesDetectionPayload(
|
||||
{
|
||||
books: [
|
||||
{ id: 'a', seriesName: 'Series Name', sequence: null }
|
||||
]
|
||||
},
|
||||
[{ id: 'a' }]
|
||||
)
|
||||
).to.throw('without a valid sequence')
|
||||
})
|
||||
})
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue