import { $, $$, removeEl } from '../utils/dom'; import { assertNotNull, assertNotUndefined } from '../utils/assert'; import { fetchMock } from '../../test/fetch-mock'; import { fixEventListeners } from '../../test/fix-event-listeners'; import { fireEvent, waitFor } from '@testing-library/dom'; import { promises } from 'fs'; import { join } from 'path'; import { setupImageUpload } from '../upload'; /* eslint-disable camelcase */ const scrapeResponse = { description: 'test', images: [ { url: 'http://localhost/images/1', camo_url: 'http://localhost/images/1' }, { url: 'http://localhost/images/2', camo_url: 'http://localhost/images/2' }, ], source_url: 'http://localhost/images', author_name: 'test', }; const nullResponse = null; const errorResponse = { errors: ['Error 1', 'Error 2'], }; /* eslint-enable camelcase */ describe('Image upload form', () => { let mockPng: File; let mockWebm: File; beforeAll(async () => { const mockPngPath = join(__dirname, 'upload-test.png'); const mockWebmPath = join(__dirname, 'upload-test.webm'); mockPng = new File([(await promises.readFile(mockPngPath, { encoding: null })).buffer], 'upload-test.png', { type: 'image/png', }); mockWebm = new File([(await promises.readFile(mockWebmPath, { encoding: null })).buffer], 'upload-test.webm', { type: 'video/webm', }); }); beforeAll(() => { fetchMock.enableMocks(); }); afterAll(() => { fetchMock.disableMocks(); }); fixEventListeners(window); let form: HTMLFormElement; let imgPreviews: HTMLDivElement; let fileField: HTMLInputElement; let remoteUrl: HTMLInputElement; let scraperError: HTMLDivElement; let fetchButton: HTMLButtonElement; let tagsEl: HTMLTextAreaElement; let tagsinputEl: HTMLDivElement; let tagEl: HTMLSpanElement; let sourceEl: HTMLInputElement; let descrEl: HTMLTextAreaElement; const assertFetchButtonIsDisabled = () => { if (!fetchButton.hasAttribute('disabled')) throw new Error('fetchButton is not disabled'); }; beforeEach(() => { document.documentElement.insertAdjacentHTML( 'beforeend', `
"safe x" "pony x" "tag3 x"