department-of-veterans-affairs/vets-website

View on GitHub
src/platform/testing/e2e/cypress/support/commands/upload.js

Summary

Maintainability
A
0 mins
Test Coverage
/**
 * Workaround to support file upload functionality in tests,
 * which is currently not officially implemented.
 *
 * https://github.com/cypress-io/cypress/issues/170#issuecomment-619758213
 */
Cypress.Commands.add(
  'upload',
  { prevSubject: 'element' },
  (input, fileName, fileType) => {
    cy.fixture(fileName, 'base64')
      .then(content => Cypress.Blob.base64StringToBlob(content, fileType))
      .then(blob => {
        const testFile = new File([blob], fileName, {
          // skip asynchronous file checks in e2e upload tests
          type: 'testing',
        });
        const dataTransfer = new DataTransfer();

        dataTransfer.items.add(testFile);

        // eslint-disable-next-line no-param-reassign
        input[0].files = dataTransfer.files;
        return input;
      })
      .trigger('change', { force: true, log: false });

    Cypress.log({
      message: fileName,
      consoleProps: () => ({ fileName, fileType, input }),
    });
  },
);