acl.test.js 5.9 KB

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