| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- SandboxedModule = require('sandboxed-module')
- sinon = require('sinon')
- require('chai').should()
- expect = require('chai').expect
- modulePath = require('path').join __dirname, '../../../app/js/RangeManager'
- ObjectId = require("mongojs").ObjectId
- assert = require("chai").assert
- _ = require "underscore"
- describe "RangeManager", ->
- beforeEach ->
- @RangeManager = SandboxedModule.require modulePath, requires:
- "./mongojs":
- ObjectId: ObjectId
- describe "jsonRangesToMongo", ->
- it "should convert ObjectIds and dates to proper objects", ->
- change_id = ObjectId().toString()
- comment_id = ObjectId().toString()
- user_id = ObjectId().toString()
- thread_id = ObjectId().toString()
- ts = new Date().toJSON()
- @RangeManager.jsonRangesToMongo({
- changes: [{
- id: change_id
- op: { i: "foo", p: 3 }
- metadata:
- user_id: user_id
- ts: ts
- }]
- comments: [{
- id: comment_id
- op: { c: "foo", p: 3, t: thread_id }
- }]
- }).should.deep.equal {
- changes: [{
- id: ObjectId(change_id)
- op: { i: "foo", p: 3 }
- metadata:
- user_id: ObjectId(user_id)
- ts: new Date(ts)
- }]
- comments: [{
- id: ObjectId(comment_id)
- op: { c: "foo", p: 3, t: ObjectId(thread_id) }
- }]
- }
-
- it "should leave malformed ObjectIds as they are", ->
- change_id = "foo"
- comment_id = "bar"
- user_id = "baz"
- @RangeManager.jsonRangesToMongo({
- changes: [{
- id: change_id
- metadata:
- user_id: user_id
- }]
- comments: [{
- id: comment_id
- }]
- }).should.deep.equal {
- changes: [{
- id: change_id
- metadata:
- user_id: user_id
- }]
- comments: [{
- id: comment_id
- }]
- }
-
- it "should be consistent when transformed through json -> mongo -> json", ->
- change_id = ObjectId().toString()
- comment_id = ObjectId().toString()
- user_id = ObjectId().toString()
- thread_id = ObjectId().toString()
- ts = new Date().toJSON()
- ranges1 = {
- changes: [{
- id: change_id
- op: { i: "foo", p: 3 }
- metadata:
- user_id: user_id
- ts: ts
- }]
- comments: [{
- id: comment_id
- op: { c: "foo", p: 3, t: thread_id }
- }]
- }
- ranges1_copy = JSON.parse(JSON.stringify(ranges1)) # jsonRangesToMongo modifies in place
- ranges2 = JSON.parse(JSON.stringify(@RangeManager.jsonRangesToMongo(ranges1_copy)))
- ranges1.should.deep.equal ranges2
-
- describe "shouldUpdateRanges", ->
- beforeEach () ->
- @ranges = {
- changes: [{
- id: ObjectId()
- op: { i: "foo", p: 3 }
- metadata:
- user_id: ObjectId()
- ts: new Date()
- }]
- comments: [{
- id: ObjectId()
- op: { c: "foo", p: 3, t: ObjectId() }
- }]
- }
- @ranges_copy = @RangeManager.jsonRangesToMongo(JSON.parse(JSON.stringify(@ranges)))
- describe "with a blank new range", ->
- it "should throw an error", ->
- expect(() =>
- @RangeManager.shouldUpdateRanges(@ranges, null)
- ).to.throw(Error)
-
- describe "with a blank old range", ->
- it "should treat it like {}", ->
- @RangeManager.shouldUpdateRanges(null, {}).should.equal false
- @RangeManager.shouldUpdateRanges(null, @ranges).should.equal true
-
- describe "with no changes", ->
- it "should return false", ->
- @RangeManager.shouldUpdateRanges(@ranges, @ranges_copy).should.equal false
-
- describe "with changes", ->
- it "should return true when the change id changes", ->
- @ranges_copy.changes[0].id = ObjectId()
- @RangeManager.shouldUpdateRanges(@ranges, @ranges_copy).should.equal true
- it "should return true when the change user id changes", ->
- @ranges_copy.changes[0].metadata.user_id = ObjectId()
- @RangeManager.shouldUpdateRanges(@ranges, @ranges_copy).should.equal true
- it "should return true when the change ts changes", ->
- @ranges_copy.changes[0].metadata.ts = new Date(Date.now() + 1000)
- @RangeManager.shouldUpdateRanges(@ranges, @ranges_copy).should.equal true
- it "should return true when the change op changes", ->
- @ranges_copy.changes[0].op.i = "bar"
- @RangeManager.shouldUpdateRanges(@ranges, @ranges_copy).should.equal true
- it "should return true when the comment id changes", ->
- @ranges_copy.comments[0].id = ObjectId()
- @RangeManager.shouldUpdateRanges(@ranges, @ranges_copy).should.equal true
- it "should return true when the comment offset changes", ->
- @ranges_copy.comments[0].op.p = 17
- @RangeManager.shouldUpdateRanges(@ranges, @ranges_copy).should.equal true
- it "should return true when the comment content changes", ->
- @ranges_copy.comments[0].op.c = "bar"
- @RangeManager.shouldUpdateRanges(@ranges, @ranges_copy).should.equal true
|