refactor: the admin and user Requests pages draw a request with one RequestRow, and the kind chip is one KindPill there and on Hidden tracks (#5651)
release / govulncheck (push) Successful in 15s
release / web (push) Successful in 1m16s
release / go (push) Successful in 1m41s
release / integration (push) Successful in 5m10s
release / android (push) Successful in 5m17s
release / Build signed APK (releases and dev) (push) Successful in 5m33s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Successful in 26s
release / Verify release artifacts (tag releases only) (push) Skipped
release / govulncheck (push) Successful in 15s
release / web (push) Successful in 1m16s
release / go (push) Successful in 1m41s
release / integration (push) Successful in 5m10s
release / android (push) Successful in 5m17s
release / Build signed APK (releases and dev) (push) Successful in 5m33s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Successful in 26s
release / Verify release artifacts (tag releases only) (push) Skipped
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
import { describe, expect, test } from 'vitest';
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import type { MusicRequest } from '#lib/api/types.js';
|
||||
import RequestRow, { requestName } from './RequestRow.svelte';
|
||||
|
||||
function req(over: Partial<MusicRequest> = {}): MusicRequest {
|
||||
return {
|
||||
id: 'r1',
|
||||
user_id: 'u1',
|
||||
status: 'approved',
|
||||
kind: 'album',
|
||||
artist_mbid: 'art-mbid',
|
||||
artist_name: 'Boards of Canada',
|
||||
album_title: 'Geogaddi',
|
||||
track_title: null,
|
||||
requested_at: '2026-04-28T12:00:00Z',
|
||||
updated_at: '2026-04-28T12:00:00Z',
|
||||
imported_album_count: 0,
|
||||
imported_track_count: 0,
|
||||
...over
|
||||
};
|
||||
}
|
||||
|
||||
const text = (el: HTMLElement) => (el.textContent ?? '').replace(/\s+/g, ' ').trim();
|
||||
|
||||
// The row both Requests pages draw (#5651): the admin queue and the
|
||||
// requester's own list read the same request the same way.
|
||||
describe('RequestRow', () => {
|
||||
test('says what was asked for, where it stands, and who or when', () => {
|
||||
render(RequestRow, { request: req(), meta: 'by Boards of Canada · 4/28/2026', testid: 'request-row' });
|
||||
const row = screen.getByTestId('request-row');
|
||||
expect(row.dataset.status).toBe('approved');
|
||||
expect(text(row)).toMatch(/^Album Approved · downloading Geogaddi by Boards of Canada · 4\/28\/2026$/);
|
||||
});
|
||||
|
||||
test('says how much has arrived, in the words for each kind', () => {
|
||||
const { unmount } = render(RequestRow, {
|
||||
request: req({ kind: 'artist', imported_album_count: 3, imported_track_count: 41 }),
|
||||
meta: '',
|
||||
testid: 'r'
|
||||
});
|
||||
expect(text(screen.getByTestId('ingest-progress'))).toBe('3 albums · 41 tracks ingested');
|
||||
unmount();
|
||||
|
||||
render(RequestRow, { request: req({ kind: 'track', track_title: 'Roygbiv', imported_track_count: 1 }), meta: '', testid: 'r' });
|
||||
expect(text(screen.getByTestId('ingest-progress'))).toBe('Track ingested');
|
||||
});
|
||||
|
||||
test('nothing arrived yet says nothing about it', () => {
|
||||
render(RequestRow, { request: req(), meta: '', testid: 'r' });
|
||||
expect(screen.queryByTestId('ingest-progress')).toBeNull();
|
||||
});
|
||||
|
||||
test('a request with no title still has a name a screen reader can say', () => {
|
||||
render(RequestRow, { request: req({ album_title: null }), meta: '', testid: 'r' });
|
||||
expect(text(screen.getByTestId('r'))).toMatch(/—/);
|
||||
expect(requestName(req({ album_title: null }))).toBe('this album by Boards of Canada');
|
||||
expect(requestName(req({ kind: 'artist' }))).toBe('Boards of Canada');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user