acl.test.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. const { getInstance } = require('../setup-crowi');
  2. describe('AclService test', () => {
  3. let crowi;
  4. const initialEnv = process.env;
  5. beforeEach(async(done) => {
  6. crowi = await getInstance();
  7. process.env = initialEnv;
  8. done();
  9. });
  10. describe('isAclEnabled()', () => {
  11. test('to be false when FORCE_WIKI_MODE is undefined', async() => {
  12. delete process.env.FORCE_WIKI_MODE;
  13. // reload
  14. await crowi.configManager.loadConfigs();
  15. const result = crowi.aclService.isAclEnabled();
  16. const wikiMode = crowi.configManager.getConfig('crowi', 'security:wikiMode');
  17. expect(wikiMode).toBe(undefined);
  18. expect(result).toBe(true);
  19. });
  20. test('to be false when FORCE_WIKI_MODE is dummy string', async() => {
  21. process.env.FORCE_WIKI_MODE = 'dummy string';
  22. // reload
  23. await crowi.configManager.loadConfigs();
  24. const result = crowi.aclService.isAclEnabled();
  25. const wikiMode = crowi.configManager.getConfig('crowi', 'security:wikiMode');
  26. expect(wikiMode).toBe('dummy string');
  27. expect(result).toBe(true);
  28. });
  29. test('to be true when FORCE_WIKI_MODE=private', async() => {
  30. process.env.FORCE_WIKI_MODE = 'private';
  31. // reload
  32. await crowi.configManager.loadConfigs();
  33. const result = crowi.aclService.isAclEnabled();
  34. const wikiMode = crowi.configManager.getConfig('crowi', 'security:wikiMode');
  35. expect(wikiMode).toBe('private');
  36. expect(result).toBe(true);
  37. });
  38. test('to be false when FORCE_WIKI_MODE=public', async() => {
  39. process.env.FORCE_WIKI_MODE = 'public';
  40. // reload
  41. await crowi.configManager.loadConfigs();
  42. const result = crowi.aclService.isAclEnabled();
  43. const wikiMode = crowi.configManager.getConfig('crowi', 'security:wikiMode');
  44. expect(wikiMode).toBe('public');
  45. expect(result).toBe(false);
  46. });
  47. });
  48. describe('isWikiModeForced()', () => {
  49. test('to be false when FORCE_WIKI_MODE is undefined', async() => {
  50. delete process.env.FORCE_WIKI_MODE;
  51. // reload
  52. await crowi.configManager.loadConfigs();
  53. const result = crowi.aclService.isWikiModeForced();
  54. const wikiMode = crowi.configManager.getConfig('crowi', 'security:wikiMode');
  55. expect(wikiMode).toBe(undefined);
  56. expect(result).toBe(false);
  57. });
  58. test('to be false when FORCE_WIKI_MODE is dummy string', async() => {
  59. process.env.FORCE_WIKI_MODE = 'dummy string';
  60. // reload
  61. await crowi.configManager.loadConfigs();
  62. const result = crowi.aclService.isWikiModeForced();
  63. const wikiMode = crowi.configManager.getConfig('crowi', 'security:wikiMode');
  64. expect(wikiMode).toBe('dummy string');
  65. expect(result).toBe(false);
  66. });
  67. test('to be true when FORCE_WIKI_MODE=private', async() => {
  68. process.env.FORCE_WIKI_MODE = 'private';
  69. // reload
  70. await crowi.configManager.loadConfigs();
  71. const result = crowi.aclService.isWikiModeForced();
  72. const wikiMode = crowi.configManager.getConfig('crowi', 'security:wikiMode');
  73. expect(wikiMode).toBe('private');
  74. expect(result).toBe(true);
  75. });
  76. test('to be false when FORCE_WIKI_MODE=public', async() => {
  77. process.env.FORCE_WIKI_MODE = 'public';
  78. // reload
  79. await crowi.configManager.loadConfigs();
  80. const result = crowi.aclService.isWikiModeForced();
  81. const wikiMode = crowi.configManager.getConfig('crowi', 'security:wikiMode');
  82. expect(wikiMode).toBe('public');
  83. expect(result).toBe(true);
  84. });
  85. });
  86. describe('isGuestAllowedToRead()', () => {
  87. let getConfigSpy;
  88. beforeEach(async(done) => {
  89. // prepare spy for ConfigManager.getConfig
  90. getConfigSpy = jest.spyOn(crowi.configManager, 'getConfig');
  91. done();
  92. });
  93. test('to be false when FORCE_WIKI_MODE=private', async() => {
  94. process.env.FORCE_WIKI_MODE = 'private';
  95. // reload
  96. await crowi.configManager.loadConfigs();
  97. const result = crowi.aclService.isGuestAllowedToRead();
  98. const wikiMode = crowi.configManager.getConfig('crowi', 'security:wikiMode');
  99. expect(wikiMode).toBe('private');
  100. expect(getConfigSpy).not.toHaveBeenCalledWith('crowi', 'security:restrictGuestMode');
  101. expect(result).toBe(false);
  102. });
  103. test('to be true when FORCE_WIKI_MODE=public', async() => {
  104. process.env.FORCE_WIKI_MODE = 'public';
  105. // reload
  106. await crowi.configManager.loadConfigs();
  107. const result = crowi.aclService.isGuestAllowedToRead();
  108. const wikiMode = crowi.configManager.getConfig('crowi', 'security:wikiMode');
  109. expect(wikiMode).toBe('public');
  110. expect(getConfigSpy).not.toHaveBeenCalledWith('crowi', 'security:restrictGuestMode');
  111. expect(result).toBe(true);
  112. });
  113. /* eslint-disable indent */
  114. describe.each`
  115. restrictGuestMode | expected
  116. ${undefined} | ${false}
  117. ${'Deny'} | ${false}
  118. ${'Readonly'} | ${true}
  119. ${'Open'} | ${false}
  120. ${'Restricted'} | ${false}
  121. ${'closed'} | ${false}
  122. `('to be $expected', ({ restrictGuestMode, expected }) => {
  123. test(`when FORCE_WIKI_MODE is undefined and 'security:restrictGuestMode' is '${restrictGuestMode}`, async() => {
  124. // reload
  125. await crowi.configManager.loadConfigs();
  126. // setup mock implementation
  127. getConfigSpy.mockImplementation((ns, key) => {
  128. if (ns === 'crowi' && key === 'security:restrictGuestMode') {
  129. return restrictGuestMode;
  130. }
  131. if (ns === 'crowi' && key === 'security:wikiMode') {
  132. return undefined;
  133. }
  134. throw new Error('Unexpected behavior.');
  135. });
  136. const result = crowi.aclService.isGuestAllowedToRead();
  137. expect(getConfigSpy).toHaveBeenCalledTimes(2);
  138. expect(getConfigSpy).toHaveBeenCalledWith('crowi', 'security:wikiMode');
  139. expect(getConfigSpy).toHaveBeenCalledWith('crowi', 'security:restrictGuestMode');
  140. expect(result).toBe(expected);
  141. });
  142. });
  143. });
  144. });