chai = require('chai') chai.should() sinon = require("sinon") modulePath = "../../../../app/js/MongoAWS.js" SandboxedModule = require('sandboxed-module') {ObjectId} = require("mongojs") describe "MongoAWS", -> beforeEach -> @MongoAWS = SandboxedModule.require modulePath, requires: "settings-sharelatex": @settings = trackchanges: s3: secret: "s3-secret" key: "s3-key" stores: doc_history: "s3-bucket" "child_process": @child_process = {} "mongo-uri": @mongouri = {} "logger-sharelatex": @logger = {log: sinon.stub(), error: sinon.stub(), err:->} "aws-sdk": @awssdk = {} "fs": @fs = {} "s3-streams": @s3streams = {} "./mongojs" : { db: @db = {}, ObjectId: ObjectId } "JSONStream": @JSONStream = {} "readline-stream": @readline = sinon.stub() @project_id = ObjectId().toString() @doc_id = ObjectId().toString() @update = { v:123 } @callback = sinon.stub() describe "archiveDocHistory", -> beforeEach -> @awssdk.config = { update: sinon.stub() } @awssdk.S3 = sinon.stub() @s3streams.WriteStream = sinon.stub() @db.docHistory = {} @db.docHistory.on = sinon.stub() @db.docHistory.find = sinon.stub().returns @db.docHistory @db.docHistory.on.returns pipe:-> pipe:-> on: (type, cb)-> on: (type, cb)-> cb() @JSONStream.stringify = sinon.stub() @MongoAWS.archiveDocHistory @project_id, @doc_id, @update, @callback it "should call the callback", -> @callback.called.should.equal true describe "unArchiveDocHistory", -> beforeEach -> @awssdk.config = { update: sinon.stub() } @awssdk.S3 = sinon.stub() @s3streams.ReadStream = sinon.stub() @s3streams.ReadStream.returns #describe on 'open' behavior on: (type, cb)-> #describe on 'error' behavior on: (type, cb)-> pipe:-> #describe on 'data' behavior on: (type, cb)-> cb([]) #describe on 'end' behavior on: (type, cb)-> cb() #describe on 'error' behavior on: sinon.stub() @MongoAWS.handleBulk = sinon.stub() @MongoAWS.unArchiveDocHistory @project_id, @doc_id, @callback it "should call handleBulk", -> @MongoAWS.handleBulk.called.should.equal true describe "handleBulk", -> beforeEach -> @bulkOps = [{ _id: ObjectId() doc_id: ObjectId() project_id: ObjectId() }, { _id: ObjectId() doc_id: ObjectId() project_id: ObjectId() }, { _id: ObjectId() doc_id: ObjectId() project_id: ObjectId() }] @bulk = find: sinon.stub().returns upsert: sinon.stub().returns updateOne: sinon.stub() execute: sinon.stub().callsArgWith(0, null, {}) @db.docHistory = {} @db.docHistory.initializeUnorderedBulkOp = sinon.stub().returns @bulk @MongoAWS.handleBulk @bulkOps, @bulkOps.length, @callback it "should call updateOne for each operation", -> @bulk.find.calledWith({_id:@bulkOps[0]._id}).should.equal true @bulk.find.calledWith({_id:@bulkOps[1]._id}).should.equal true @bulk.find.calledWith({_id:@bulkOps[2]._id}).should.equal true it "should call the callback", -> @callback.calledWith(null).should.equal true