diff --git a/src/backend/common/transforms/MusicbrainzTransformer.ts b/src/backend/common/transforms/MusicbrainzTransformer.ts index f1434010..f2bcc440 100644 --- a/src/backend/common/transforms/MusicbrainzTransformer.ts +++ b/src/backend/common/transforms/MusicbrainzTransformer.ts @@ -435,7 +435,7 @@ export default class MusicbrainzTransformer extends AtomicPartsTransformer { + // if all searches fail prereqs then no recording lists are assigned to results + if(transformData.recordings === undefined) { + throw new StagePrerequisiteError('All search prerequisites failed, Musicbrainz API could not be searched with the given searchOrder options', + { + shortStack: true, + inputs: transformData.requestQueries + }); + } if(transformData.recordings.length === 0) { throw new StagePrerequisiteError('No matches returned from Musicbrainz API', {shortStack: true, inputs: transformData.requestQueries}); } diff --git a/src/backend/tests/musicbrainz/musicbrainz.test.ts b/src/backend/tests/musicbrainz/musicbrainz.test.ts index 519d9f2c..2aeb5b5c 100644 --- a/src/backend/tests/musicbrainz/musicbrainz.test.ts +++ b/src/backend/tests/musicbrainz/musicbrainz.test.ts @@ -1,6 +1,7 @@ import * as dotenv from 'dotenv'; import { loggerTest } from "@foxxmd/logging"; -import { expect } from 'chai'; +import chai, { expect, assert } from 'chai'; +import asPromised from 'chai-as-promised'; import { before, describe, it } from 'mocha'; import { initMemoryCache } from "../../common/Cache.ts"; import { Cacheable } from "cacheable"; @@ -16,6 +17,8 @@ import { intersect, missingMbidTypes } from '../../utils.ts'; import { CoverArtApiClient, type CoverArtApiConfig } from '../../common/vendor/musicbrainz/CoverArtApiClient.ts'; import { artistNamesToCredits, artistNameToCredit } from '../../../core/StringUtils.ts'; +chai.use(asPromised); + const envPath = path.join(projectDir, '.env'); dotenv.config({ path: envPath }); @@ -377,6 +380,50 @@ describe('Musicbrainz API', function () { expect(chosenPlay.data.meta.brainz.album).to.eq("82de33b1-1cd6-4236-b116-561d0ecc8acf") }); + it('records prerequisite failures', async function () { + + this.timeout(3500); + + const play: PlayObject = { + data: { + track: "Hopes And Dreams (10th Anniversary Arrangement)", + artists: artistNamesToCredits(["KrakenPower"]), + album: "Hopes And Dreams (10th Anniversary Arrangement) - Single", + duration: 278 + }, + meta: { + musicService: "Apple Music", + trackId: "1840310777" + } + } + await mbTransformer.initialize(); + + const res = await mbTransformer.getTransformerData(play, { + type: "musicbrainz", + searchWhenMissing: ["artists", "album", "title"], + "searchOrder": ["mbidrecording", "isrc"], + "albumWeight": 0.4, + "artistWeight": 0.3, + "releaseStatusPriority": ["official"], + "releaseGroupPrimaryTypePriority": ["album", "single", "ep"], + "releaseCountryPriority": ["XW"], + }); + expect(res.requestQueries).to.exist; + expect(res.requestQueries).to.not.be.empty; + + + await assert.isRejected(mbTransformer.handlePostFetch(play,res, { + type: "musicbrainz", + searchWhenMissing: ["artists", "album", "title"], + "searchOrder": ["mbidrecording", "isrc"], + "albumWeight": 0.4, + "artistWeight": 0.3, + "releaseStatusPriority": ["official"], + "releaseGroupPrimaryTypePriority": ["album", "single", "ep"], + "releaseCountryPriority": ["XW"], + }), "All search prerequisites failed") + }); + }); describe('Multiple Endpoints', function () {