FeaturesHelperTests.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. const SandboxedModule = require('sandboxed-module')
  2. const { expect } = require('chai')
  3. const MODULE_PATH = '../../../../app/src/Features/Subscription/FeaturesHelper'
  4. describe('FeaturesHelper', function () {
  5. beforeEach(function () {
  6. this.FeaturesHelper = SandboxedModule.require(MODULE_PATH)
  7. })
  8. describe('mergeFeatures', function () {
  9. it('should prefer priority over standard for compileGroup', function () {
  10. expect(
  11. this.FeaturesHelper.mergeFeatures(
  12. { compileGroup: 'priority' },
  13. { compileGroup: 'standard' }
  14. )
  15. ).to.deep.equal({ compileGroup: 'priority' })
  16. expect(
  17. this.FeaturesHelper.mergeFeatures(
  18. { compileGroup: 'standard' },
  19. { compileGroup: 'priority' }
  20. )
  21. ).to.deep.equal({ compileGroup: 'priority' })
  22. expect(
  23. this.FeaturesHelper.mergeFeatures(
  24. { compileGroup: 'priority' },
  25. { compileGroup: 'priority' }
  26. )
  27. ).to.deep.equal({ compileGroup: 'priority' })
  28. expect(
  29. this.FeaturesHelper.mergeFeatures(
  30. { compileGroup: 'standard' },
  31. { compileGroup: 'standard' }
  32. )
  33. ).to.deep.equal({ compileGroup: 'standard' })
  34. })
  35. it('should prefer -1 over any other for collaborators', function () {
  36. expect(
  37. this.FeaturesHelper.mergeFeatures(
  38. { collaborators: -1 },
  39. { collaborators: 10 }
  40. )
  41. ).to.deep.equal({ collaborators: -1 })
  42. expect(
  43. this.FeaturesHelper.mergeFeatures(
  44. { collaborators: 10 },
  45. { collaborators: -1 }
  46. )
  47. ).to.deep.equal({ collaborators: -1 })
  48. expect(
  49. this.FeaturesHelper.mergeFeatures(
  50. { collaborators: 4 },
  51. { collaborators: 10 }
  52. )
  53. ).to.deep.equal({ collaborators: 10 })
  54. })
  55. it('should prefer the higher of compileTimeout', function () {
  56. expect(
  57. this.FeaturesHelper.mergeFeatures(
  58. { compileTimeout: 20 },
  59. { compileTimeout: 10 }
  60. )
  61. ).to.deep.equal({ compileTimeout: 20 })
  62. expect(
  63. this.FeaturesHelper.mergeFeatures(
  64. { compileTimeout: 10 },
  65. { compileTimeout: 20 }
  66. )
  67. ).to.deep.equal({ compileTimeout: 20 })
  68. })
  69. it('should prefer the true over false for other keys', function () {
  70. expect(
  71. this.FeaturesHelper.mergeFeatures({ github: true }, { github: false })
  72. ).to.deep.equal({ github: true })
  73. expect(
  74. this.FeaturesHelper.mergeFeatures({ github: false }, { github: true })
  75. ).to.deep.equal({ github: true })
  76. expect(
  77. this.FeaturesHelper.mergeFeatures({ github: true }, { github: true })
  78. ).to.deep.equal({ github: true })
  79. expect(
  80. this.FeaturesHelper.mergeFeatures({ github: false }, { github: false })
  81. ).to.deep.equal({ github: false })
  82. })
  83. })
  84. describe('isFeatureSetBetter', function () {
  85. it('simple comparisons', function () {
  86. const result1 = this.FeaturesHelper.isFeatureSetBetter(
  87. { dropbox: true },
  88. { dropbox: false }
  89. )
  90. expect(result1).to.be.true
  91. const result2 = this.FeaturesHelper.isFeatureSetBetter(
  92. { dropbox: false },
  93. { dropbox: true }
  94. )
  95. expect(result2).to.be.false
  96. })
  97. it('compound comparisons with same features', function () {
  98. const result1 = this.FeaturesHelper.isFeatureSetBetter(
  99. { collaborators: 9, dropbox: true },
  100. { collaborators: 10, dropbox: true }
  101. )
  102. expect(result1).to.be.false
  103. const result2 = this.FeaturesHelper.isFeatureSetBetter(
  104. { collaborators: -1, dropbox: true },
  105. { collaborators: 10, dropbox: true }
  106. )
  107. expect(result2).to.be.true
  108. const result3 = this.FeaturesHelper.isFeatureSetBetter(
  109. { collaborators: -1, compileTimeout: 60, dropbox: true },
  110. { collaborators: 10, compileTimeout: 60, dropbox: true }
  111. )
  112. expect(result3).to.be.true
  113. })
  114. })
  115. })