project_import.test.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. 'use strict'
  2. const BPromise = require('bluebird')
  3. const { expect } = require('chai')
  4. const HTTPStatus = require('http-status')
  5. const fetch = require('node-fetch')
  6. const fs = BPromise.promisifyAll(require('node:fs'))
  7. const cleanup = require('../storage/support/cleanup')
  8. const fixtures = require('../storage/support/fixtures')
  9. const testFiles = require('../storage/support/test_files')
  10. const testProjects = require('./support/test_projects')
  11. const testServer = require('./support/test_server')
  12. const { Change, File, Operation } = require('overleaf-editor-core')
  13. describe('project import', function () {
  14. beforeEach(cleanup.everything)
  15. beforeEach(fixtures.create)
  16. it('skips generating the snapshot by default', async function () {
  17. const basicAuthClient = testServer.basicAuthClient
  18. const projectId = await testProjects.createEmptyProject()
  19. // upload an empty file
  20. const response = await fetch(
  21. testServer.url(
  22. `/api/projects/${projectId}/blobs/${File.EMPTY_FILE_HASH}`,
  23. { qs: { pathname: 'main.tex' } }
  24. ),
  25. {
  26. method: 'PUT',
  27. body: fs.createReadStream(testFiles.path('empty.tex')),
  28. headers: {
  29. Authorization: testServer.basicAuthHeader,
  30. },
  31. }
  32. )
  33. expect(response.ok).to.be.true
  34. const testFile = File.fromHash(File.EMPTY_FILE_HASH)
  35. const testChange = new Change(
  36. [Operation.addFile('main.tex', testFile)],
  37. new Date()
  38. )
  39. const importResponse =
  40. await basicAuthClient.apis.ProjectImport.importChanges1({
  41. project_id: projectId,
  42. end_version: 0,
  43. changes: [testChange.toRaw()],
  44. })
  45. expect(importResponse.status).to.equal(HTTPStatus.CREATED)
  46. expect(importResponse.obj).to.deep.equal({ resyncNeeded: false })
  47. })
  48. })