compile.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import { v4 as uuid } from 'uuid'
  2. const outputFiles = () => {
  3. const build = uuid()
  4. return [
  5. {
  6. path: 'output.pdf',
  7. build,
  8. url: `/build/${build}/output.pdf`,
  9. type: 'pdf',
  10. },
  11. {
  12. path: 'output.bbl',
  13. build,
  14. url: `/build/${build}/output.bbl`,
  15. type: 'bbl',
  16. },
  17. {
  18. path: 'output.bib',
  19. build,
  20. url: `/build/${build}/output.bib`,
  21. type: 'bib',
  22. },
  23. {
  24. path: 'example.txt',
  25. build,
  26. url: `/build/${build}/example.txt`,
  27. type: 'txt',
  28. },
  29. {
  30. path: 'output.log',
  31. build,
  32. url: `/build/${build}/output.log`,
  33. type: 'log',
  34. },
  35. {
  36. path: 'output.blg',
  37. build,
  38. url: `/build/${build}/output.blg`,
  39. type: 'blg',
  40. },
  41. ]
  42. }
  43. export const interceptCompile = (prefix = 'compile', times = 1) => {
  44. cy.intercept(
  45. { method: 'POST', pathname: '/project/*/compile', times },
  46. {
  47. body: {
  48. status: 'success',
  49. clsiServerId: 'foo',
  50. compileGroup: 'priority',
  51. pdfDownloadDomain: 'https://clsi.test-overleaf.com',
  52. outputFiles: outputFiles(),
  53. },
  54. }
  55. ).as(`${prefix}`)
  56. cy.intercept(
  57. { pathname: '/build/*/output.pdf', times },
  58. { fixture: 'build/output.pdf,null' }
  59. ).as(`${prefix}-pdf`)
  60. cy.intercept(
  61. { pathname: '/build/*/output.log', times },
  62. { fixture: 'build/output.log' }
  63. ).as(`${prefix}-log`)
  64. cy.intercept(
  65. { pathname: '/build/*/output.blg', times },
  66. { fixture: 'build/output.blg' }
  67. ).as(`${prefix}-blg`)
  68. }
  69. export const waitForCompile = ({ prefix = 'compile', pdf = false } = {}) => {
  70. cy.wait(`@${prefix}`)
  71. cy.wait(`@${prefix}-log`)
  72. cy.wait(`@${prefix}-blg`)
  73. if (pdf) {
  74. cy.wait(`@${prefix}-pdf`)
  75. }
  76. return cy.wrap(null)
  77. }
  78. export const interceptDeferredCompile = (beforeResponse?: () => void) => {
  79. const { promise, resolve } = Promise.withResolvers<void>()
  80. cy.intercept(
  81. { method: 'POST', url: '/project/*/compile*', times: 1 },
  82. req => {
  83. if (beforeResponse) {
  84. beforeResponse()
  85. }
  86. // only reply once the Promise is resolved
  87. promise.then(() => {
  88. req.reply({
  89. body: {
  90. status: 'success',
  91. clsiServerId: 'foo',
  92. compileGroup: 'priority',
  93. pdfDownloadDomain: 'https://clsi.test-overleaf.com',
  94. outputFiles: [
  95. {
  96. path: 'output.pdf',
  97. build: '123',
  98. url: '/build/123/output.pdf',
  99. type: 'pdf',
  100. },
  101. {
  102. path: 'output.log',
  103. build: '123',
  104. url: '/build/123/output.log',
  105. type: 'log',
  106. },
  107. {
  108. path: 'output.blg',
  109. build: '123',
  110. url: '/build/123/output.blg',
  111. type: 'log',
  112. },
  113. ],
  114. },
  115. })
  116. })
  117. return promise
  118. }
  119. ).as('compile')
  120. cy.intercept(
  121. { pathname: '/build/*/output.pdf', times: 1 },
  122. { fixture: 'build/output.pdf,null' }
  123. ).as(`compile-pdf`)
  124. cy.intercept(
  125. { pathname: '/build/*/output.log', times: 1 },
  126. { fixture: 'build/output.log' }
  127. ).as(`compile-log`)
  128. cy.intercept(
  129. { pathname: '/build/*/output.blg', times: 1 },
  130. { fixture: 'build/output.blg' }
  131. ).as(`compile-blg`)
  132. return cy.wrap(resolve)
  133. }