mirror of
https://github.com/calibrain/shelfmark.git
synced 2026-10-04 14:11:13 +01:00
@@ -4,7 +4,9 @@ import type { Language } from '../types/index';
|
||||
import {
|
||||
LANGUAGE_OPTION_ALL,
|
||||
LANGUAGE_OPTION_DEFAULT,
|
||||
buildLanguageNormalizer,
|
||||
getReleaseSearchLanguageParams,
|
||||
releaseLanguageMatchesFilter,
|
||||
} from '../utils/languageFilters';
|
||||
|
||||
const supportedLanguages: Language[] = [
|
||||
@@ -35,4 +37,33 @@ describe('languageFilters release search params', () => {
|
||||
|
||||
expect(result).toEqual(['de', 'hu']);
|
||||
});
|
||||
|
||||
it('normalizes legacy default language names when combined with explicit filters', () => {
|
||||
const result = getReleaseSearchLanguageParams(
|
||||
[LANGUAGE_OPTION_DEFAULT, 'de'],
|
||||
supportedLanguages,
|
||||
['english'],
|
||||
);
|
||||
|
||||
expect(result).toEqual(['en', 'de']);
|
||||
});
|
||||
});
|
||||
|
||||
describe('releaseLanguageMatchesFilter', () => {
|
||||
it('matches release language names against legacy default language names', () => {
|
||||
const normalizer = buildLanguageNormalizer(supportedLanguages);
|
||||
|
||||
expect(releaseLanguageMatchesFilter('English', ['english'], normalizer)).toBe(true);
|
||||
});
|
||||
|
||||
it('keeps English-only issue 948 fallback results with a legacy English default', () => {
|
||||
const normalizer = buildLanguageNormalizer(supportedLanguages);
|
||||
const issue948Languages = [...Array<string>(48).fill('en'), 'de, en', 'en, es'];
|
||||
|
||||
const visibleLanguages = issue948Languages.filter((language) =>
|
||||
releaseLanguageMatchesFilter(language, ['english'], normalizer),
|
||||
);
|
||||
|
||||
expect(visibleLanguages).toHaveLength(48);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -48,8 +48,11 @@ export const getLanguageFilterValues = (
|
||||
return null;
|
||||
}
|
||||
|
||||
const supportedCodes = new Set(supportedLanguages.map((lang) => lang.code));
|
||||
const defaultCodes = defaultLanguageCodes.filter((code) => supportedCodes.has(code));
|
||||
const languageNormalizer = buildLanguageNormalizer(supportedLanguages);
|
||||
const supportedCodes = new Set(supportedLanguages.map((lang) => lang.code.toLowerCase()));
|
||||
const defaultCodes = defaultLanguageCodes
|
||||
.map((code) => languageNormalizer.get(code.toLowerCase()) ?? code.toLowerCase())
|
||||
.filter((code) => supportedCodes.has(code));
|
||||
const resolved = new Set<string>();
|
||||
|
||||
uniqueSelection.forEach((code) => {
|
||||
@@ -58,8 +61,9 @@ export const getLanguageFilterValues = (
|
||||
return;
|
||||
}
|
||||
|
||||
if (supportedCodes.has(code)) {
|
||||
resolved.add(code);
|
||||
const normalizedCode = languageNormalizer.get(code.toLowerCase()) ?? code.toLowerCase();
|
||||
if (supportedCodes.has(normalizedCode)) {
|
||||
resolved.add(normalizedCode);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -130,6 +134,11 @@ export const releaseLanguageMatchesFilter = (
|
||||
return part;
|
||||
});
|
||||
|
||||
const selectedSet = new Set(selectedCodes.map((c) => c.toLowerCase()));
|
||||
const selectedSet = new Set(
|
||||
selectedCodes.map((code) => {
|
||||
const normalizedCode = code.toLowerCase();
|
||||
return languageNormalizer?.get(normalizedCode) ?? normalizedCode;
|
||||
}),
|
||||
);
|
||||
return releaseCodes.every((code) => selectedSet.has(code));
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user