fix(admin): the phone release history no longer skips a page after a long prerelease run

When five full pages in a row held only prereleases, the walk stopped with its page counter already one past the last page it read, so the next Load more started a page later and that page of releases never showed. The counter now ends on the last page read.
This commit is contained in:
Maurice
2026-10-09 10:14:26 +02:00
parent 81decb843d
commit e92b233c3a
2 changed files with 17 additions and 2 deletions
@@ -1,4 +1,4 @@
// FE-COMP-GHREL-HOOK-001 to -010: the release history behind both admin shells.
// FE-COMP-GHREL-HOOK-001 to -011: the release history behind both admin shells.
import { act, renderHook, waitFor } from '@testing-library/react';
import apiClient from '../../api/client';
@@ -127,6 +127,20 @@ describe('useGithubReleases, filling pages', () => {
expect(result.current.hasMore).toBe(true);
});
it('FE-COMP-GHREL-HOOK-011: load more after a five page walk goes on with the next unread page', async () => {
const pages: Record<number, GithubRelease[]> = {};
for (let p = 1; p <= 5; p++) pages[p] = fullPage(p * 10, true);
pages[6] = [release(60)];
const spy = serve(pages);
const { result } = renderHook(() => useGithubReleases({ isPrerelease: false, fillPages: true }));
await waitFor(() => expect(result.current.loading).toBe(false));
await act(async () => {
await result.current.handleLoadMore();
});
expect(requestedPages(spy)).toEqual([1, 2, 3, 4, 5, 6]);
expect(result.current.shownReleases.map((r) => r.id)).toEqual([60]);
});
it('FE-COMP-GHREL-HOOK-008: a failed load more keeps the list, holds the page, and the retry clears the error', async () => {
let failPage2 = true;
const spy = vi
@@ -73,12 +73,13 @@ export function useGithubReleases({ isPrerelease, fillPages = false }: UseGithub
let more = true;
for (let i = 0; i < MAX_PAGES_PER_LOAD; i++) {
// Step on only when another page follows, so `page` ends on the last one read.
if (i > 0) pageNum += 1;
const data = await fetchPage(pageNum);
if (!data) return;
collected.push(...data);
more = data.length === PER_PAGE;
if (!more || collected.some(isShown)) break;
pageNum += 1;
}
setReleases((prev) => (append ? [...prev, ...collected] : collected));