collectionSpec.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. 'use strict';
  2. var expect = require('chai').expect;
  3. var Refs = require('../../');
  4. describe('collection api', function() {
  5. var refs = new Refs({ name: 'foos', collection: true }, { name: 'bar' });
  6. describe('#contains', function() {
  7. it('should not contain', function() {
  8. // given
  9. var a = { foos: [] };
  10. // when
  11. refs.bind(a, 'foos');
  12. // then
  13. expect(a.foos.contains({})).to.equal(false);
  14. });
  15. it('should contain', function() {
  16. // given
  17. var b = {}, a = { foos: [ b ] };
  18. // when
  19. refs.bind(a, 'foos');
  20. // then
  21. expect(a.foos.contains(b)).to.equal(true);
  22. });
  23. });
  24. describe('#add', function() {
  25. it('should add', function() {
  26. // given
  27. var a = {};
  28. var b = { id: 'B' };
  29. var c = { id: 'C' };
  30. refs.bind(a, 'foos');
  31. // when
  32. a.foos.add(b);
  33. a.foos.add(c);
  34. // then
  35. expect(a.foos).to.eql([ b, c ]);
  36. });
  37. it('should add at idx', function() {
  38. // given
  39. var a = {};
  40. var b = { id: 'B' };
  41. var c = { id: 'C' };
  42. var d = { id: 'D' };
  43. refs.bind(a, 'foos');
  44. a.foos.add(b);
  45. a.foos.add(c);
  46. // when
  47. a.foos.add(d, 1);
  48. // then
  49. expect(a.foos).to.eql([ b, d, c ]);
  50. });
  51. it('should move to front with idx', function() {
  52. // given
  53. var a = {};
  54. var b = { id: 'B' };
  55. var c = { id: 'C' };
  56. var d = { id: 'D' };
  57. refs.bind(a, 'foos');
  58. a.foos.add(b);
  59. a.foos.add(c);
  60. a.foos.add(d);
  61. // when
  62. a.foos.add(c, 0);
  63. // then
  64. expect(a.foos).to.eql([ c, b, d ]);
  65. });
  66. it('should move to back with idx', function() {
  67. // given
  68. var a = {};
  69. var b = { id: 'B' };
  70. var c = { id: 'C' };
  71. var d = { id: 'D' };
  72. refs.bind(a, 'foos');
  73. a.foos.add(b);
  74. a.foos.add(c);
  75. a.foos.add(d);
  76. // when
  77. a.foos.add(b, 2);
  78. // then
  79. expect(a.foos).to.eql([ c, d, b ]);
  80. });
  81. it('should inverse add', function() {
  82. // given
  83. var a = {};
  84. var b = {};
  85. refs.bind(a, 'foos');
  86. // when
  87. a.foos.add(b);
  88. // then
  89. expect(b.bar).to.equal(a);
  90. });
  91. it('should inverse add', function() {
  92. // given
  93. var a = {};
  94. var b = {};
  95. refs.bind(a, 'foos');
  96. // when
  97. a.foos.add(b);
  98. // then
  99. expect(b.bar).to.equal(a);
  100. });
  101. });
  102. describe('#remove', function() {
  103. it('should inverse remove', function() {
  104. // given
  105. var a = {};
  106. var b = {};
  107. refs.bind(a, 'foos');
  108. // when
  109. a.foos.add(b);
  110. a.foos.remove(b);
  111. // then
  112. expect(a.foos).to.eql([ ]);
  113. expect(b.bar).not.to.exist;
  114. });
  115. });
  116. });