|
|
@@ -0,0 +1,95 @@
|
|
|
+const { expect } = require('chai')
|
|
|
+const sinon = require('sinon')
|
|
|
+const SandboxedModule = require('sandboxed-module')
|
|
|
+
|
|
|
+const MODULE_PATH =
|
|
|
+ '../../../../app/src/Features/Project/ProjectEntityRestoreHandler.js'
|
|
|
+
|
|
|
+describe('ProjectEntityRestoreHandler', function () {
|
|
|
+ beforeEach(function () {
|
|
|
+ this.project = {
|
|
|
+ _id: '123213jlkj9kdlsaj',
|
|
|
+ }
|
|
|
+
|
|
|
+ this.user = {
|
|
|
+ _id: '588f3ddae8ebc1bac07c9fa4',
|
|
|
+ first_name: 'bjkdsjfk',
|
|
|
+ features: {},
|
|
|
+ }
|
|
|
+
|
|
|
+ this.docId = '4eecb1c1bffa66588e0000a2'
|
|
|
+ this.DocModel = class Doc {
|
|
|
+ constructor(options) {
|
|
|
+ this.name = options.name
|
|
|
+ this.lines = options.lines
|
|
|
+ this._id = this.docId
|
|
|
+ this.rev = 0
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.ProjectEntityHandler = {
|
|
|
+ promises: {
|
|
|
+ getDoc: sinon.stub(),
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ this.ProjectEntityUpdateHandler = {
|
|
|
+ promises: {
|
|
|
+ addDocWithRanges: sinon.stub(),
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ this.ProjectEntityRestoreHandler = SandboxedModule.require(MODULE_PATH, {
|
|
|
+ requires: {
|
|
|
+ './ProjectEntityHandler': this.ProjectEntityHandler,
|
|
|
+ './ProjectEntityUpdateHandler': this.ProjectEntityUpdateHandler,
|
|
|
+ },
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ it('should add a new doc with timestamp name and old content', async function () {
|
|
|
+ const docName = 'deletedDoc'
|
|
|
+
|
|
|
+ this.docLines = ['line one', 'line two']
|
|
|
+ this.rev = 3
|
|
|
+ this.ranges = { comments: [{ id: 123 }] }
|
|
|
+
|
|
|
+ this.newDoc = new this.DocModel({
|
|
|
+ name: this.docName,
|
|
|
+ lines: undefined,
|
|
|
+ _id: this.docId,
|
|
|
+ rev: 0,
|
|
|
+ })
|
|
|
+
|
|
|
+ this.ProjectEntityHandler.promises.getDoc.resolves({
|
|
|
+ lines: this.docLines,
|
|
|
+ rev: this.rev,
|
|
|
+ version: 'version',
|
|
|
+ ranges: this.ranges,
|
|
|
+ })
|
|
|
+
|
|
|
+ this.ProjectEntityUpdateHandler.addDocWithRanges = sinon
|
|
|
+ .stub()
|
|
|
+ .yields(null, this.newDoc)
|
|
|
+
|
|
|
+ await this.ProjectEntityRestoreHandler.promises.restoreDeletedDoc(
|
|
|
+ this.project._id,
|
|
|
+ this.docId,
|
|
|
+ docName,
|
|
|
+ this.user._id
|
|
|
+ )
|
|
|
+
|
|
|
+ const docNameMatcher = new RegExp(docName + '-\\d{4}-\\d{2}-\\d{2}-\\d+')
|
|
|
+
|
|
|
+ expect(
|
|
|
+ this.ProjectEntityUpdateHandler.promises.addDocWithRanges
|
|
|
+ ).to.have.been.calledWith(
|
|
|
+ this.project._id,
|
|
|
+ null,
|
|
|
+ sinon.match(docNameMatcher),
|
|
|
+ this.docLines,
|
|
|
+ this.ranges,
|
|
|
+ this.user._id
|
|
|
+ )
|
|
|
+ })
|
|
|
+})
|