diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 332ac16..5a0b785 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -1517,7 +1517,7 @@ checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" [[package]] name = "mangalord" -version = "0.88.0" +version = "0.88.1" dependencies = [ "anyhow", "argon2", diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 88ade25..20507fc 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mangalord" -version = "0.88.0" +version = "0.88.1" edition = "2021" default-run = "mangalord" diff --git a/frontend/e2e/mobile-manga-detail.spec.ts b/frontend/e2e/mobile-manga-detail.spec.ts index 1d8c74c..d71b8cd 100644 --- a/frontend/e2e/mobile-manga-detail.spec.ts +++ b/frontend/e2e/mobile-manga-detail.spec.ts @@ -236,6 +236,51 @@ test.describe('mobile manga detail', () => { await expect(sheet.getByTestId('overflow-add-to-collection')).toBeVisible(); }); + test('phone viewport: force resync from the overflow sheet surfaces a result message', async ({ + page + }) => { + await mockDetail(page, { authed: true }); + // Upgrade the session to admin so the Force resync action is offered. + // Registered after mockDetail so this auth/me wins (Playwright routes + // resolve most-recently-registered first). + await page.route('**/api/v1/auth/me', (route) => + route.fulfill({ + status: 200, + contentType: 'application/json', + body: JSON.stringify({ + user: { + id: 'u1', + username: 'admin', + created_at: '2026-01-01T00:00:00Z', + is_admin: true + } + }) + }) + ); + await page.route(`**/api/v1/admin/mangas/${mangaId}/resync`, (route) => + route.fulfill({ + status: 200, + contentType: 'application/json', + body: JSON.stringify({ + manga: mangaFixture(), + cover_fetched: true, + metadata_status: 'updated' + }) + }) + ); + await page.setViewportSize(MOBILE); + await page.goto(`/manga/${mangaId}`); + + await page.getByTestId('detail-overflow').click(); + await page.getByTestId('overflow-force-resync').click(); + + // The result was previously display:none under 640px, leaving mobile + // admins with no feedback. It must now be visible. + const msg = page.getByTestId('force-resync-message'); + await expect(msg).toBeVisible(); + await expect(msg).toContainText(/Metadata updated/i); + }); + test('desktop viewport: mobile hero is hidden, existing layout + action-row stays', async ({ page }) => { diff --git a/frontend/package.json b/frontend/package.json index 18e80b3..bac57a1 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "mangalord-frontend", - "version": "0.88.0", + "version": "0.88.1", "private": true, "type": "module", "scripts": { diff --git a/frontend/src/routes/manga/[id]/+page.svelte b/frontend/src/routes/manga/[id]/+page.svelte index b339f70..25339b8 100644 --- a/frontend/src/routes/manga/[id]/+page.svelte +++ b/frontend/src/routes/manga/[id]/+page.svelte @@ -1243,9 +1243,9 @@ display: none; } - .resync-msg { - display: none; - } + /* `.resync-msg` is a sibling of `.action-row`, not a child, so it + survives the row being hidden. Keep it visible on mobile: admins + trigger Force resync from the overflow sheet and need the result. */ .continue { display: none;