overleaf/services/contacts/test/unit/coffee/ContactsManagerTests.js

119 lines
3.3 KiB
JavaScript
Raw Normal View History

/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
const sinon = require('sinon');
const chai = require('chai');
const should = chai.should();
const {
expect
} = chai;
const modulePath = "../../../app/js/ContactManager.js";
const SandboxedModule = require('sandboxed-module');
const {
ObjectId
} = require("mongojs");
const tk = require("timekeeper");
describe("ContactManager", function() {
beforeEach(function() {
tk.freeze(Date.now());
this.ContactManager = SandboxedModule.require(modulePath, { requires: {
"./mongojs": {
db: (this.db = {contacts: {}}),
ObjectId
2017-03-17 05:31:12 -04:00
},
'logger-sharelatex': {log: sinon.stub()},
'metrics-sharelatex': {timeAsyncMethod: sinon.stub()}
}
});
this.user_id = ObjectId().toString();
this.contact_id = ObjectId().toString();
return this.callback = sinon.stub();
});
afterEach(() => tk.reset());
describe("touchContact", function() {
beforeEach(function() {
return this.db.contacts.update = sinon.stub().callsArg(3);
});
describe("with a valid user_id", function() {
beforeEach(function() {
return this.ContactManager.touchContact(this.user_id, (this.contact_id = "mock_contact"), this.callback);
});
it("should increment the contact count and timestamp", function() {
return this.db.contacts.update
.calledWith({
user_id: sinon.match(o => o.toString() === this.user_id.toString())
}, {
$inc: {
"contacts.mock_contact.n": 1
},
$set: {
"contacts.mock_contact.ts": new Date()
}
}, {
upsert: true
})
.should.equal(true);
});
return it("should call the callback", function() {
return this.callback.called.should.equal(true);
});
});
return describe("with an invalid user id", function() {
beforeEach(function() {
return this.ContactManager.touchContact("not-valid-object-id", this.contact_id, this.callback);
});
return it("should call the callback with an error", function() {
return this.callback.calledWith(new Error()).should.equal(true);
});
});
});
return describe("getContacts", function() {
beforeEach(function() {
this.user = {
contacts: ["mock", "contacts"]
};
return this.db.contacts.findOne = sinon.stub().callsArgWith(1, null, this.user);
});
describe("with a valid user_id", function() {
beforeEach(function() {
return this.ContactManager.getContacts(this.user_id, this.callback);
});
it("should find the user's contacts", function() {
return this.db.contacts.findOne
.calledWith({
user_id: sinon.match(o => o.toString() === this.user_id.toString())
})
.should.equal(true);
});
return it("should call the callback with the contacts", function() {
return this.callback.calledWith(null, this.user.contacts).should.equal(true);
});
});
return describe("with an invalid user id", function() {
beforeEach(function() {
return this.ContactManager.getContacts("not-valid-object-id", this.callback);
});
return it("should call the callback with an error", function() {
return this.callback.calledWith(new Error()).should.equal(true);
});
});
});
});