Home Manual Reference Source Test Repository

test/unit/collection/base.spec.js

  1. /* eslint-disable no-new */
  2. import assert from 'assert';
  3. import sinon from 'sinon';
  4. import _ from 'lodash';
  5.  
  6. import fixture from '../../fixture';
  7.  
  8. import CollectionBase from '../../../lib/collection/base';
  9.  
  10. describe('collection/base CollectionBase', () => {
  11. let sandbox;
  12. beforeEach(() => {
  13. sandbox = sinon.sandbox.create();
  14. });
  15.  
  16. afterEach(() => {
  17. sandbox.restore();
  18. });
  19.  
  20. describe('constructor', () => {
  21. it('throws when no collection name is given', () => {
  22. assert.throws(() => {
  23. new CollectionBase();
  24. }, /requires a name/);
  25.  
  26. assert.throws(() => {
  27. new CollectionBase('');
  28. }, /requires a name/);
  29. });
  30.  
  31. it('accepts a name and no config object', () => {
  32. const instance = new CollectionBase('name');
  33.  
  34. assert.equal(instance.name, 'name');
  35. assert(_.isUndefined(instance.path));
  36. assert(_.isUndefined(instance.metadata));
  37. assert(_.isUndefined(instance.template));
  38. assert(_.isUndefined(instance.permalink));
  39. assert(_.isUndefined(instance.sort));
  40. assert(_.isUndefined(instance.pagination));
  41. assert(_.isUndefined(instance.files));
  42. assert(_.isUndefined(instance.excludePaths));
  43. assert(_.isUndefined(instance.metadataFiles));
  44. assert(_.isArray(instance.pages));
  45. assert.equal(instance.pages.length, 0);
  46. assert(_.isObject(instance.data));
  47. });
  48. });
  49.  
  50. describe('isFiltered', () => {
  51. it('returns if a file in collection is filtered', () => {
  52. const instance = new CollectionBase('name');
  53. const file = {
  54. filtered: undefined,
  55. };
  56.  
  57. assert.equal(instance.isFiltered(file), false);
  58.  
  59. file.filtered = false;
  60. assert.equal(instance.isFiltered(file), false);
  61.  
  62. file.filtered = true;
  63. assert.equal(instance.isFiltered(file), true);
  64. });
  65. });
  66.  
  67. describe('sortFiles', () => {
  68. let files;
  69.  
  70. const additionalData = [
  71. {
  72. number: 10,
  73. date: '2017-03-28',
  74. },
  75. {
  76. number: 1,
  77. date: '2013-09-08',
  78. },
  79. {
  80. number: 5,
  81. date: '2016-05-01',
  82. },
  83. ];
  84. beforeEach(() => {
  85. files = fixture.collectionFiles().map((file, index) => {
  86. _.extend(file.data, additionalData[index]);
  87. return file;
  88. });
  89. });
  90.  
  91. it('sorts integer value descending', () => {
  92. const sortConfig = {
  93. key: 'number',
  94. order: 'descending',
  95. };
  96.  
  97. assert.deepEqual(CollectionBase.sortFiles(files, sortConfig), [
  98. files[0],
  99. files[2],
  100. files[1],
  101. ]);
  102. });
  103.  
  104. it('sorts integer value ascending', () => {
  105. const sortConfig = {
  106. key: 'number',
  107. order: 'ascending',
  108. };
  109.  
  110. assert.deepEqual(CollectionBase.sortFiles(files, sortConfig), [
  111. files[1],
  112. files[2],
  113. files[0],
  114. ]);
  115. });
  116.  
  117. it('sorts date value descending', () => {
  118. const sortConfig = {
  119. key: 'date',
  120. order: 'descending',
  121. };
  122.  
  123. assert.deepEqual(CollectionBase.sortFiles(files, sortConfig), [
  124. files[0],
  125. files[2],
  126. files[1],
  127. ]);
  128. });
  129.  
  130. it('sorts date value ascending', () => {
  131. const sortConfig = {
  132. key: 'date',
  133. order: 'ascending',
  134. };
  135.  
  136. assert.deepEqual(CollectionBase.sortFiles(files, sortConfig), [
  137. files[1],
  138. files[2],
  139. files[0],
  140. ]);
  141. });
  142. });
  143. });