From feb1d87de1214238dc4604d8fa032296a7a5bba8 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Thu, 8 Jun 2017 10:25:39 +0100 Subject: [PATCH] Add test for LablesHandler --- .../Features/Labels/LabelsHandler.coffee | 2 +- .../coffee/Labels/LabelsHandler.Tests.coffee | 145 ++++++++++++++++++ 2 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 services/web/test/UnitTests/coffee/Labels/LabelsHandler.Tests.coffee diff --git a/services/web/app/coffee/Features/Labels/LabelsHandler.coffee b/services/web/app/coffee/Features/Labels/LabelsHandler.coffee index 4e837cb9d2..bc2d9a9c32 100644 --- a/services/web/app/coffee/Features/Labels/LabelsHandler.coffee +++ b/services/web/app/coffee/Features/Labels/LabelsHandler.coffee @@ -20,7 +20,7 @@ module.exports = LabelsHandler = DocumentUpdaterHandler.flushDocToMongo projectId, docId, (err) -> if err? return callback(err) - ProjectEntityHandler.getDoc projectId, docId, (err, lines, rev) -> + ProjectEntityHandler.getDoc projectId, docId, (err, lines) -> if err? return callback(err) LabelsHandler.extractLabelsFromDoc lines, (err, docLabels) -> diff --git a/services/web/test/UnitTests/coffee/Labels/LabelsHandler.Tests.coffee b/services/web/test/UnitTests/coffee/Labels/LabelsHandler.Tests.coffee new file mode 100644 index 0000000000..1db094de65 --- /dev/null +++ b/services/web/test/UnitTests/coffee/Labels/LabelsHandler.Tests.coffee @@ -0,0 +1,145 @@ +chai = require('chai') +chai.should() +expect = chai.expect +sinon = require("sinon") +modulePath = "../../../../app/js/Features/Labels/LabelsHandler" +SandboxedModule = require('sandboxed-module') + + +describe 'LabelsHandler', -> + beforeEach -> + @projectId = 'someprojectid' + @docId = 'somedocid' + @ProjectEntityHandler = { + getAllDocs: sinon.stub() + getDoc: sinon.stub() + } + @DocumentUpdaterHandler = { + flushDocToMongo: sinon.stub() + } + @LabelsHandler = SandboxedModule.require modulePath, requires: + '../Project/ProjectEntityHandler': @ProjectEntityHandler + '../DocumentUpdater/DocumentUpdaterHandler': @DocumentUpdaterHandler + + describe 'extractLabelsFromDoc', -> + beforeEach -> + @lines = [ + 'one', + 'two', + 'three \\label{aaa}', + 'four five', + '\\label{bbb}', + 'six seven' + ] + + it 'should not produce an error', (done) -> + @LabelsHandler.extractLabelsFromDoc @lines, (err, docLabels) -> + expect(err).to.equal null + done() + + it 'should extract all the labels', (done) -> + @LabelsHandler.extractLabelsFromDoc @lines, (err, docLabels) -> + expect(docLabels).to.deep.equal ['aaa', 'bbb'] + done() + + describe 'extractLabelsFromProjectDocs', -> + beforeEach -> + @docs = { + 'doc_one': { + _id: 'id_one', + lines: ['one', '\\label{aaa} two', 'three'] + }, + 'doc_two': { + _id: 'id_two', + lines: ['four'] + }, + 'doc_three': { + _id: 'id_three', + lines: ['\\label{bbb}', 'five six', 'seven eight \\label{ccc} nine'] + } + } + + it 'should not produce an error', (done) -> + @LabelsHandler.extractLabelsFromProjectDocs @docs, (err, projectLabels) -> + expect(err).to.equal null + done() + + it 'should extract all the labels', (done) -> + @LabelsHandler.extractLabelsFromProjectDocs @docs, (err, projectLabels) -> + expect(projectLabels).to.deep.equal { + 'id_one': ['aaa'], + 'id_two': [], + 'id_three': ['bbb', 'ccc'] + } + done() + + describe 'getLabelsForDoc', -> + beforeEach -> + @fakeLines = ['one', '\\label{aaa}', 'two'] + @fakeLabels = ['aaa'] + @DocumentUpdaterHandler.flushDocToMongo = sinon.stub().callsArgWith(2, null) + @ProjectEntityHandler.getDoc = sinon.stub().callsArgWith(2, null, @fakeLines) + @LabelsHandler.extractLabelsFromDoc = sinon.stub().callsArgWith(1, null, @fakeLabels) + @call = (callback) => + @LabelsHandler.getLabelsForDoc @projectId, @docId, callback + + it 'should not produce an error', (done) -> + @call (err, docLabels) => + expect(err).to.equal null + done() + + it 'should produce docLabels', (done) -> + @call (err, docLabels) => + expect(docLabels).to.equal @fakeLabels + done() + + it 'should call flushDocToMongo', (done) -> + @call (err, docLabels) => + @DocumentUpdaterHandler.flushDocToMongo.callCount.should.equal 1 + @DocumentUpdaterHandler.flushDocToMongo.calledWith(@projectId, @docId).should.equal true + done() + + it 'should call getDoc', (done) -> + @call (err, docLabels) => + @ProjectEntityHandler.getDoc.callCount.should.equal 1 + @ProjectEntityHandler.getDoc.calledWith(@projectId, @docId).should.equal true + done() + + it 'should call extractLabelsFromDoc', (done) -> + @call (err, docLabels) => + @LabelsHandler.extractLabelsFromDoc.callCount.should.equal 1 + @LabelsHandler.extractLabelsFromDoc.calledWith(@fakeLines).should.equal true + done() + + describe 'getAllLabelsForProject', -> + beforeEach -> + @fakeDocs = { + 'doc_one': {lines: ['\\label{aaa}']} + } + @fakeLabels = ['aaa'] + @ProjectEntityHandler.getAllDocs = sinon.stub().callsArgWith(1, null, @fakeDocs) + @LabelsHandler.extractLabelsFromProjectDocs = sinon.stub().callsArgWith(1, null, @fakeLabels) + @call = (callback) => + @LabelsHandler.getAllLabelsForProject @projectId, callback + + it 'should not produce an error', (done) -> + @call (err, projectLabels) => + expect(err).to.equal null + done() + + it 'should produce projectLabels', (done) -> + @call (err, projectLabels) => + expect(projectLabels).to.equal @fakeLabels + done() + + it 'should call getAllDocs', (done) -> + @call (err, projectLabels) => + @ProjectEntityHandler.getAllDocs.callCount.should.equal 1 + @ProjectEntityHandler.getAllDocs.calledWith(@projectId).should.equal true + done() + + it 'should call extractLabelsFromDoc', (done) -> + @call (err, docLabels) => + @LabelsHandler.extractLabelsFromProjectDocs.callCount.should.equal 1 + @LabelsHandler.extractLabelsFromProjectDocs.calledWith(@fakeDocs).should.equal true + done()