|
|
@@ -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()
|