New reading surface with paper/sepia/dark themes, slim top and bottom bars, and sheets for navigation, search, settings, audio and per-verse study tools. Plan progress is built into the reader. Page-flip mode removed. ESV added via the server-side proxy (ESV_API_KEY). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9e8420a1ae
commit
9e722a296d
17 files changed
+903
-791
No files matched your search
+220
-761
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,52 @@
|
||||
import { render, screen, fireEvent } from '@testing-library/react';
|
||||
import { vi, test, expect } from 'vitest';
|
||||
|
||||
const noop = () => {};
|
||||
const ctx = {
|
||||
goHome: noop,
|
||||
readerBookAbbrev: 'JHN', setReaderBookAbbrev: noop,
|
||||
readerTranslation: 'ESV', setReaderTranslation: noop,
|
||||
readerTheme: 'paper', setReaderTheme: noop,
|
||||
readerLayout: 'flow', setReaderLayout: noop,
|
||||
readerChapter: 3, setReaderChapter: noop,
|
||||
readerVerses: [{ number: 1, text: 'Now there was a man of the Pharisees.' }, { number: 2, text: 'This man came to Jesus by night.' }],
|
||||
readerTotalChapters: 21, readerLoading: false, readerError: '',
|
||||
readerInterlinear: null, readerSelectedVerse: null, setReaderSelectedVerse: vi.fn(),
|
||||
readerFontSize: 1, setReaderFontSize: noop, readerBookmarks: {},
|
||||
readerCrossRefs: null, setReaderCrossRefs: noop, readerCrossRefsLoading: false,
|
||||
readerShowCrossRefs: false, setReaderShowCrossRefs: noop,
|
||||
readerSearch: '', setReaderSearch: noop, setReaderSearchActive: noop,
|
||||
readerSearchScope: 'chapter', setReaderSearchScope: noop,
|
||||
readerAudioState: { status: 'idle' }, audioProgress: { currentTime: 0, duration: 0 },
|
||||
bibleIndexStatus: 'idle', audioNarrator: 'david', setAudioNarrator: noop,
|
||||
_bibleIndexCacheRef: { current: {} },
|
||||
readerGoToPreviousChapter: noop, readerGoToNextChapter: noop, jumpToReaderVerse: noop,
|
||||
toggleReaderBookmark: noop, cycleBookmarkColor: noop, loadReaderCrossRefs: noop, loadBibleIndex: noop,
|
||||
handlePlayReaderAudio: noop, handleToggleReaderAudioPause: noop, handleStopBookAudio: noop,
|
||||
handleSeekAudio: noop, handleSeekAudioTo: noop,
|
||||
readerInkByPage: {}, updateReaderPageInk: noop, readerTextHighlights: [], addTextHighlight: noop, removeTextHighlight: noop,
|
||||
planProgress: [], toggleDay: noop,
|
||||
};
|
||||
vi.mock('../context/AppContext.js', () => ({ useApp: () => ctx }));
|
||||
|
||||
import ReaderPage from './ReaderPage.jsx';
|
||||
|
||||
test('renders the chapter, chrome and opens the tool sheets', () => {
|
||||
render(<ReaderPage />);
|
||||
expect(screen.getByText('John 3 · ESV')).toBeTruthy();
|
||||
expect(screen.getByText(/man of the Pharisees/)).toBeTruthy();
|
||||
fireEvent.click(screen.getByText('John 3 · ESV'));
|
||||
expect(screen.getByText('Go to')).toBeTruthy();
|
||||
fireEvent.click(screen.getByLabelText('Close'));
|
||||
fireEvent.click(screen.getByLabelText('Reading settings'));
|
||||
expect(screen.getByText('Text size')).toBeTruthy();
|
||||
fireEvent.click(screen.getByLabelText('Close'));
|
||||
fireEvent.click(screen.getByLabelText('Search'));
|
||||
expect(screen.getByPlaceholderText(/Search John 3/)).toBeTruthy();
|
||||
});
|
||||
|
||||
test('tapping a verse selects it', () => {
|
||||
render(<ReaderPage />);
|
||||
fireEvent.click(screen.getByText(/This man came to Jesus/));
|
||||
expect(ctx.setReaderSelectedVerse).toHaveBeenCalledWith(2);
|
||||
});
|
||||
Reference in new issue
Block a user