mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-11-13 07:40:59 +00:00
6f3c051c7c
Formats the files the client formatting gate listed, and NATIVE-E2E-005 sends its twenty exchange attempts one after another: all at once they reset the test server's connections.
50 lines
2.1 KiB
TypeScript
50 lines
2.1 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
import { shareFile } from '../../../src/native/nativeFiles';
|
|
import { downloadBlob, downloadFile, openFile } from '../../../src/utils/fileDownload';
|
|
|
|
vi.mock('../../../src/db/offlineDb', () => ({ getCachedBlob: vi.fn() }));
|
|
vi.mock('../../../src/native/platform', () => ({ isNativeApp: () => true }));
|
|
vi.mock('../../../src/native/nativeFiles', async () => {
|
|
const actual = await vi.importActual<typeof import('../../../src/native/nativeFiles')>(
|
|
'../../../src/native/nativeFiles'
|
|
);
|
|
return { ...actual, shareFile: vi.fn() };
|
|
});
|
|
|
|
const pdf = new Blob(['%PDF'], { type: 'application/pdf' });
|
|
|
|
beforeEach(() => {
|
|
vi.mocked(shareFile).mockReset().mockResolvedValue();
|
|
vi.stubGlobal('fetch', vi.fn().mockResolvedValue({ ok: true, status: 200, blob: () => Promise.resolve(pdf) }));
|
|
});
|
|
|
|
describe('fileDownload inside the native app', () => {
|
|
it('hands an in-memory blob to the share sheet instead of an anchor', () => {
|
|
const click = vi.spyOn(HTMLAnchorElement.prototype, 'click');
|
|
downloadBlob(pdf, 'report.pdf');
|
|
expect(shareFile).toHaveBeenCalledWith(pdf, 'report.pdf');
|
|
expect(click).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('logs a share that failed rather than losing it', async () => {
|
|
const report = vi.fn();
|
|
vi.stubGlobal('reportError', report);
|
|
vi.mocked(shareFile).mockRejectedValue(new Error('no space'));
|
|
downloadBlob(pdf, 'report.pdf');
|
|
await vi.waitFor(() => expect(report).toHaveBeenCalledWith(expect.any(Error)));
|
|
});
|
|
|
|
it('shares a protected file under its given name, or the one from its URL', async () => {
|
|
await downloadFile('/api/trips/1/files/2/download', 'Boarding pass.pdf');
|
|
expect(shareFile).toHaveBeenLastCalledWith(pdf, 'Boarding pass.pdf');
|
|
|
|
await downloadFile('/uploads/files/ticket%20A.pdf');
|
|
expect(shareFile).toHaveBeenLastCalledWith(pdf, 'ticket A.pdf');
|
|
});
|
|
|
|
it('opens files through the share sheet too, since there is no tab to open them in', async () => {
|
|
await openFile('/api/trips/1/files/2/download');
|
|
expect(shareFile).toHaveBeenLastCalledWith(pdf, 'download');
|
|
});
|
|
});
|