diff --git a/docs/src/demos/Extensions/Link/index.spec.js b/docs/src/demos/Extensions/Link/index.spec.js index 72b305f6..18713a97 100644 --- a/docs/src/demos/Extensions/Link/index.spec.js +++ b/docs/src/demos/Extensions/Link/index.spec.js @@ -24,13 +24,27 @@ context('/api/extensions/link', () => { }) }) - it.skip('links should be auto detected', () => { - cy.get('.ProseMirror') - .then($span => { - $span.text('https://example.com') - }) - .find('a') - .should('contain', 'https://example.com') - .should('have.attr', 'href', 'https://example.com') + const validUrls = [ + 'https://example.com', + 'https://example.com/with-path', + 'http://example.com/with-http', + 'https://www.example.com/with-www', + 'https://www.example.com/with-numbers-123', + 'https://www.example.com/with-parameters?var=true', + 'https://www.example.com/with-multiple-parameters?var=true&foo=bar', + 'https://www.example.com/with-spaces?var=true&foo=bar+3', + // TODO: 'https://www.example.com/with,comma', + 'http://thelongestdomainnameintheworldandthensomeandthensomemoreandmore.com/', + 'https://example.longtopleveldomain', + 'https://example-with-dashes.com', + ] + + validUrls.forEach(url => { + it(`url should be detected: ${url}`, () => { + cy.get('.ProseMirror').paste({ pastePayload: url, pasteType: 'text/plain' }) + .find('a') + .should('contain', url) + .should('have.attr', 'href', url) + }) }) }) diff --git a/tests/cypress/support/commands.js b/tests/cypress/support/commands.js index 6b80b911..7dea73f2 100644 --- a/tests/cypress/support/commands.js +++ b/tests/cypress/support/commands.js @@ -70,3 +70,26 @@ Cypress.Commands.overwrite('click', (originalFn, element, text, options) => { return originalFn(element, text, newOptions) }) + +Cypress.Commands.add( + 'paste', + { prevSubject: true }, + (subject, pasteOptions) => { + const { pastePayload, pasteType } = pasteOptions + const data = pasteType === 'application/json' ? JSON.stringify(pastePayload) : pastePayload + // https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer + const clipboardData = new DataTransfer() + clipboardData.setData(pasteType, data) + // https://developer.mozilla.org/en-US/docs/Web/API/Element/paste_event + const pasteEvent = new ClipboardEvent('paste', { + bubbles: true, + cancelable: true, + dataType: pasteType, + data, + clipboardData, + }) + subject[0].dispatchEvent(pasteEvent) + + return subject + }, +)