Implement file hash-based library matching and remove fuzzy ASIN matching

Adds file hash-based matching for Audiobookshelf library items to ensure 100% accurate ASIN assignment for RMAB-organized content. Removes fuzzy matching from library availability checks, making all matching ASIN-only to eliminate false positives and race conditions. Updates database schema, processors, and matcher utilities; adds new tests and documentation for the new matching strategy. Removes obsolete scripts, Dockerfile, and related tests; updates docker-compose for test environments.
This commit is contained in:
kikootwo
2026-01-28 10:32:14 -05:00
parent 497849f427
commit a97979358f
111 changed files with 6571 additions and 1426 deletions
-38
View File
@@ -1,38 +0,0 @@
/**
* Component: Pagination Tests
* Documentation: documentation/frontend/components.md
*/
// @vitest-environment jsdom
import React from 'react';
import { fireEvent, render, screen } from '@testing-library/react';
import { describe, expect, it, vi } from 'vitest';
import { Pagination } from '@/components/ui/Pagination';
describe('Pagination', () => {
it('renders nothing when there is only one page', () => {
const { container } = render(<Pagination currentPage={1} totalPages={1} onPageChange={vi.fn()} />);
expect(container.firstChild).toBeNull();
});
it('renders ellipses for large page ranges', () => {
render(<Pagination currentPage={5} totalPages={10} onPageChange={vi.fn()} />);
const ellipses = screen.getAllByText('...');
expect(ellipses.length).toBeGreaterThan(0);
});
it('calls onPageChange for navigation controls', () => {
const onPageChange = vi.fn();
render(<Pagination currentPage={2} totalPages={5} onPageChange={onPageChange} />);
fireEvent.click(screen.getByLabelText('Previous page'));
expect(onPageChange).toHaveBeenCalledWith(1);
fireEvent.click(screen.getByLabelText('Next page'));
expect(onPageChange).toHaveBeenCalledWith(3);
fireEvent.click(screen.getByLabelText('Page 4'));
expect(onPageChange).toHaveBeenCalledWith(4);
});
});