ranges-tracker-test.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. const { expect } = require('chai')
  2. const RangesTracker = require('../..')
  3. describe('RangesTracker', function () {
  4. describe('with duplicate change ids', function () {
  5. beforeEach(function () {
  6. this.comments = []
  7. this.changes = [
  8. { id: 'id1', op: { p: 1, i: 'hello' } },
  9. { id: 'id2', op: { p: 10, i: 'world' } },
  10. { id: 'id3', op: { p: 20, i: '!!!' } },
  11. { id: 'id1', op: { p: 30, d: 'duplicate' } },
  12. ]
  13. this.rangesTracker = new RangesTracker(this.changes, this.comments)
  14. })
  15. it('getChanges() returns all changes with the given ids', function () {
  16. expect(this.rangesTracker.getChanges(['id1', 'id2'])).to.deep.equal([
  17. this.changes[0],
  18. this.changes[1],
  19. this.changes[3],
  20. ])
  21. })
  22. it('removeChangeIds() removes all changes with the given ids', function () {
  23. this.rangesTracker.removeChangeIds(['id1', 'id2'])
  24. expect(this.rangesTracker.changes).to.deep.equal([this.changes[2]])
  25. })
  26. })
  27. describe('with multiple tracked deletes at the same position', function () {
  28. beforeEach(function () {
  29. this.comments = []
  30. this.changes = [
  31. { id: 'id1', op: { p: 33, d: 'before' } },
  32. { id: 'id2', op: { p: 50, d: 'right before' } },
  33. { id: 'id3', op: { p: 50, d: 'this one' } },
  34. { id: 'id4', op: { p: 50, d: 'right after' } },
  35. { id: 'id5', op: { p: 75, d: 'long after' } },
  36. ]
  37. this.rangesTracker = new RangesTracker(this.changes, this.comments)
  38. })
  39. it('preserves the text order when rejecting changes', function () {
  40. this.rangesTracker.applyOp(
  41. { p: 50, i: 'this one', u: true },
  42. { user_id: 'user-id' }
  43. )
  44. expect(this.rangesTracker.changes).to.deep.equal([
  45. { id: 'id1', op: { p: 33, d: 'before' } },
  46. { id: 'id2', op: { p: 50, d: 'right before' } },
  47. { id: 'id4', op: { p: 58, d: 'right after' } },
  48. { id: 'id5', op: { p: 83, d: 'long after' } },
  49. ])
  50. })
  51. it('moves all tracked deletes after the insert if not rejecting changes', function () {
  52. this.rangesTracker.applyOp(
  53. { p: 50, i: 'some other text', u: true },
  54. { user_id: 'user-id' }
  55. )
  56. expect(this.rangesTracker.changes).to.deep.equal([
  57. { id: 'id1', op: { p: 33, d: 'before' } },
  58. { id: 'id2', op: { p: 65, d: 'right before' } },
  59. { id: 'id3', op: { p: 65, d: 'this one' } },
  60. { id: 'id4', op: { p: 65, d: 'right after' } },
  61. { id: 'id5', op: { p: 90, d: 'long after' } },
  62. ])
  63. })
  64. })
  65. })