file-tree-create-name-input.spec.tsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import '../../../../helpers/bootstrap-3'
  2. import FileTreeCreateNameInput from '../../../../../../frontend/js/features/file-tree/components/file-tree-create/file-tree-create-name-input'
  3. import FileTreeCreateNameProvider from '../../../../../../frontend/js/features/file-tree/contexts/file-tree-create-name'
  4. describe('<FileTreeCreateNameInput/>', function () {
  5. it('renders an empty input', function () {
  6. cy.mount(
  7. <FileTreeCreateNameProvider>
  8. <FileTreeCreateNameInput inFlight={false} />
  9. </FileTreeCreateNameProvider>
  10. )
  11. cy.findByLabelText('File Name')
  12. cy.findByPlaceholderText('File Name')
  13. })
  14. it('renders a custom label and placeholder', function () {
  15. cy.mount(
  16. <FileTreeCreateNameProvider>
  17. <FileTreeCreateNameInput
  18. label="File name in this project"
  19. placeholder="Enter a file name…"
  20. inFlight={false}
  21. />
  22. </FileTreeCreateNameProvider>
  23. )
  24. cy.findByLabelText('File name in this project')
  25. cy.findByPlaceholderText('Enter a file name…')
  26. })
  27. it('uses an initial name', function () {
  28. cy.mount(
  29. <FileTreeCreateNameProvider initialName="test.tex">
  30. <FileTreeCreateNameInput inFlight={false} />
  31. </FileTreeCreateNameProvider>
  32. )
  33. cy.findByLabelText('File Name').should('have.value', 'test.tex')
  34. })
  35. it('focuses the name', function () {
  36. cy.spy(window, 'requestAnimationFrame').as('requestAnimationFrame')
  37. cy.mount(
  38. <FileTreeCreateNameProvider initialName="test.tex">
  39. <FileTreeCreateNameInput focusName inFlight={false} />
  40. </FileTreeCreateNameProvider>
  41. )
  42. cy.findByLabelText('File Name').as('input')
  43. cy.get('@input').should('have.value', 'test.tex')
  44. cy.get('@requestAnimationFrame').should('have.been.calledOnce')
  45. // https://github.com/jsdom/jsdom/issues/2995
  46. // "window.getSelection doesn't work with selection of <input> element"
  47. // const selection = window.getSelection().toString()
  48. // expect(selection).to.equal('test')
  49. // wait for the selection to update
  50. // eslint-disable-next-line cypress/no-unnecessary-waiting
  51. cy.wait(100)
  52. cy.get<HTMLInputElement>('@input').then(element => {
  53. expect(element.get(0).selectionStart).to.equal(0)
  54. expect(element.get(0).selectionEnd).to.equal(4)
  55. })
  56. })
  57. it('disables the input when in flight', function () {
  58. cy.mount(
  59. <FileTreeCreateNameProvider initialName="test.tex">
  60. <FileTreeCreateNameInput inFlight={false} />
  61. </FileTreeCreateNameProvider>
  62. ).then(({ rerender }) => {
  63. cy.findByLabelText('File Name').should('not.be.disabled')
  64. rerender(
  65. <FileTreeCreateNameProvider initialName="test.tex">
  66. <FileTreeCreateNameInput inFlight />
  67. </FileTreeCreateNameProvider>
  68. )
  69. cy.findByLabelText('File Name').should('be.disabled')
  70. rerender(
  71. <FileTreeCreateNameProvider initialName="test.tex">
  72. <FileTreeCreateNameInput inFlight={false} />
  73. </FileTreeCreateNameProvider>
  74. )
  75. cy.findByLabelText('File Name').should('not.be.disabled')
  76. })
  77. })
  78. })