|
@@ -0,0 +1,221 @@
|
|
|
|
|
+// import {
|
|
|
|
|
+// vi,
|
|
|
|
|
+// beforeAll, beforeEach, afterEach,
|
|
|
|
|
+// describe, test, expect,
|
|
|
|
|
+// } from 'vitest';
|
|
|
|
|
+
|
|
|
|
|
+// import { aclService } from './acl';
|
|
|
|
|
+// import { configManager } from './config-manager';
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+// describe('AclService', () => {
|
|
|
|
|
+// test("has consts 'isLabeledStatement'", () => {
|
|
|
|
|
+// expect(aclService.labels.SECURITY_RESTRICT_GUEST_MODE_DENY).toBe('Deny');
|
|
|
|
|
+// expect(aclService.labels.SECURITY_RESTRICT_GUEST_MODE_READONLY).toBe('Readonly');
|
|
|
|
|
+// expect(aclService.labels.SECURITY_REGISTRATION_MODE_OPEN).toBe('Open');
|
|
|
|
|
+// expect(aclService.labels.SECURITY_REGISTRATION_MODE_RESTRICTED).toBe('Restricted');
|
|
|
|
|
+// expect(aclService.labels.SECURITY_REGISTRATION_MODE_CLOSED).toBe('Closed');
|
|
|
|
|
+// });
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+// describe('AclService test', () => {
|
|
|
|
|
+
|
|
|
|
|
+// const initialEnv = process.env;
|
|
|
|
|
+
|
|
|
|
|
+// beforeAll(async() => {
|
|
|
|
|
+// await configManager.loadConfigs();
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+// afterEach(() => {
|
|
|
|
|
+// process.env = initialEnv;
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+// describe('isAclEnabled()', () => {
|
|
|
|
|
+
|
|
|
|
|
+// test('to be false when FORCE_WIKI_MODE is undefined', async() => {
|
|
|
|
|
+// delete process.env.FORCE_WIKI_MODE;
|
|
|
|
|
+
|
|
|
|
|
+// // reload
|
|
|
|
|
+// await configManager.loadConfigs();
|
|
|
|
|
+
|
|
|
|
|
+// const result = aclService.isAclEnabled();
|
|
|
|
|
+
|
|
|
|
|
+// const wikiMode = configManager.getConfig('crowi', 'security:wikiMode');
|
|
|
|
|
+// expect(wikiMode).toBe(undefined);
|
|
|
|
|
+// expect(result).toBe(true);
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+// test('to be false when FORCE_WIKI_MODE is dummy string', async() => {
|
|
|
|
|
+// process.env.FORCE_WIKI_MODE = 'dummy string';
|
|
|
|
|
+
|
|
|
|
|
+// // reload
|
|
|
|
|
+// await configManager.loadConfigs();
|
|
|
|
|
+
|
|
|
|
|
+// const result = aclService.isAclEnabled();
|
|
|
|
|
+
|
|
|
|
|
+// const wikiMode = configManager.getConfig('crowi', 'security:wikiMode');
|
|
|
|
|
+// expect(wikiMode).toBe('dummy string');
|
|
|
|
|
+// expect(result).toBe(true);
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+// test('to be true when FORCE_WIKI_MODE=private', async() => {
|
|
|
|
|
+// process.env.FORCE_WIKI_MODE = 'private';
|
|
|
|
|
+
|
|
|
|
|
+// // reload
|
|
|
|
|
+// await configManager.loadConfigs();
|
|
|
|
|
+
|
|
|
|
|
+// const result = aclService.isAclEnabled();
|
|
|
|
|
+
|
|
|
|
|
+// const wikiMode = configManager.getConfig('crowi', 'security:wikiMode');
|
|
|
|
|
+// expect(wikiMode).toBe('private');
|
|
|
|
|
+// expect(result).toBe(true);
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+// test('to be false when FORCE_WIKI_MODE=public', async() => {
|
|
|
|
|
+// process.env.FORCE_WIKI_MODE = 'public';
|
|
|
|
|
+
|
|
|
|
|
+// // reload
|
|
|
|
|
+// await configManager.loadConfigs();
|
|
|
|
|
+
|
|
|
|
|
+// const result = aclService.isAclEnabled();
|
|
|
|
|
+
|
|
|
|
|
+// const wikiMode = configManager.getConfig('crowi', 'security:wikiMode');
|
|
|
|
|
+// expect(wikiMode).toBe('public');
|
|
|
|
|
+// expect(result).toBe(false);
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+// describe('isWikiModeForced()', () => {
|
|
|
|
|
+
|
|
|
|
|
+// test('to be false when FORCE_WIKI_MODE is undefined', async() => {
|
|
|
|
|
+// delete process.env.FORCE_WIKI_MODE;
|
|
|
|
|
+
|
|
|
|
|
+// // reload
|
|
|
|
|
+// await configManager.loadConfigs();
|
|
|
|
|
+
|
|
|
|
|
+// const result = aclService.isWikiModeForced();
|
|
|
|
|
+
|
|
|
|
|
+// const wikiMode = configManager.getConfig('crowi', 'security:wikiMode');
|
|
|
|
|
+// expect(wikiMode).toBe(undefined);
|
|
|
|
|
+// expect(result).toBe(false);
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+// test('to be false when FORCE_WIKI_MODE is dummy string', async() => {
|
|
|
|
|
+// process.env.FORCE_WIKI_MODE = 'dummy string';
|
|
|
|
|
+
|
|
|
|
|
+// // reload
|
|
|
|
|
+// await configManager.loadConfigs();
|
|
|
|
|
+
|
|
|
|
|
+// const result = aclService.isWikiModeForced();
|
|
|
|
|
+
|
|
|
|
|
+// const wikiMode = configManager.getConfig('crowi', 'security:wikiMode');
|
|
|
|
|
+// expect(wikiMode).toBe('dummy string');
|
|
|
|
|
+// expect(result).toBe(false);
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+// test('to be true when FORCE_WIKI_MODE=private', async() => {
|
|
|
|
|
+// process.env.FORCE_WIKI_MODE = 'private';
|
|
|
|
|
+
|
|
|
|
|
+// // reload
|
|
|
|
|
+// await configManager.loadConfigs();
|
|
|
|
|
+
|
|
|
|
|
+// const result = aclService.isWikiModeForced();
|
|
|
|
|
+
|
|
|
|
|
+// const wikiMode = configManager.getConfig('crowi', 'security:wikiMode');
|
|
|
|
|
+// expect(wikiMode).toBe('private');
|
|
|
|
|
+// expect(result).toBe(true);
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+// test('to be false when FORCE_WIKI_MODE=public', async() => {
|
|
|
|
|
+// process.env.FORCE_WIKI_MODE = 'public';
|
|
|
|
|
+
|
|
|
|
|
+// // reload
|
|
|
|
|
+// await configManager.loadConfigs();
|
|
|
|
|
+
|
|
|
|
|
+// const result = aclService.isWikiModeForced();
|
|
|
|
|
+
|
|
|
|
|
+// const wikiMode = configManager.getConfig('crowi', 'security:wikiMode');
|
|
|
|
|
+// expect(wikiMode).toBe('public');
|
|
|
|
|
+// expect(result).toBe(true);
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+// describe('isGuestAllowedToRead()', () => {
|
|
|
|
|
+// let getConfigSpy;
|
|
|
|
|
+
|
|
|
|
|
+// beforeEach(async() => {
|
|
|
|
|
+// // prepare spy for ConfigManager.getConfig
|
|
|
|
|
+// getConfigSpy = vi.spyOn(configManager, 'getConfig');
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+// test('to be false when FORCE_WIKI_MODE=private', async() => {
|
|
|
|
|
+// process.env.FORCE_WIKI_MODE = 'private';
|
|
|
|
|
+
|
|
|
|
|
+// // reload
|
|
|
|
|
+// await configManager.loadConfigs();
|
|
|
|
|
+
|
|
|
|
|
+// const result = aclService.isGuestAllowedToRead();
|
|
|
|
|
+
|
|
|
|
|
+// const wikiMode = configManager.getConfig('crowi', 'security:wikiMode');
|
|
|
|
|
+// expect(wikiMode).toBe('private');
|
|
|
|
|
+// expect(getConfigSpy).not.toHaveBeenCalledWith('crowi', 'security:restrictGuestMode');
|
|
|
|
|
+// expect(result).toBe(false);
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+// test('to be true when FORCE_WIKI_MODE=public', async() => {
|
|
|
|
|
+// process.env.FORCE_WIKI_MODE = 'public';
|
|
|
|
|
+
|
|
|
|
|
+// // reload
|
|
|
|
|
+// await configManager.loadConfigs();
|
|
|
|
|
+
|
|
|
|
|
+// const result = aclService.isGuestAllowedToRead();
|
|
|
|
|
+
|
|
|
|
|
+// const wikiMode = configManager.getConfig('crowi', 'security:wikiMode');
|
|
|
|
|
+// expect(wikiMode).toBe('public');
|
|
|
|
|
+// expect(getConfigSpy).not.toHaveBeenCalledWith('crowi', 'security:restrictGuestMode');
|
|
|
|
|
+// expect(result).toBe(true);
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+// /* eslint-disable indent */
|
|
|
|
|
+// describe.each`
|
|
|
|
|
+// restrictGuestMode | expected
|
|
|
|
|
+// ${undefined} | ${false}
|
|
|
|
|
+// ${'Deny'} | ${false}
|
|
|
|
|
+// ${'Readonly'} | ${true}
|
|
|
|
|
+// ${'Open'} | ${false}
|
|
|
|
|
+// ${'Restricted'} | ${false}
|
|
|
|
|
+// ${'closed'} | ${false}
|
|
|
|
|
+// `('to be $expected', ({ restrictGuestMode, expected }) => {
|
|
|
|
|
+// test(`when FORCE_WIKI_MODE is undefined and 'security:restrictGuestMode' is '${restrictGuestMode}`, async() => {
|
|
|
|
|
+
|
|
|
|
|
+// // reload
|
|
|
|
|
+// await configManager.loadConfigs();
|
|
|
|
|
+
|
|
|
|
|
+// // setup mock implementation
|
|
|
|
|
+// getConfigSpy.mockImplementation((ns, key) => {
|
|
|
|
|
+// if (ns === 'crowi' && key === 'security:restrictGuestMode') {
|
|
|
|
|
+// return restrictGuestMode;
|
|
|
|
|
+// }
|
|
|
|
|
+// if (ns === 'crowi' && key === 'security:wikiMode') {
|
|
|
|
|
+// return undefined;
|
|
|
|
|
+// }
|
|
|
|
|
+// throw new Error('Unexpected behavior.');
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+// const result = aclService.isGuestAllowedToRead();
|
|
|
|
|
+
|
|
|
|
|
+// expect(getConfigSpy).toHaveBeenCalledTimes(2);
|
|
|
|
|
+// expect(getConfigSpy).toHaveBeenCalledWith('crowi', 'security:wikiMode');
|
|
|
|
|
+// expect(getConfigSpy).toHaveBeenCalledWith('crowi', 'security:restrictGuestMode');
|
|
|
|
|
+// expect(result).toBe(expected);
|
|
|
|
|
+// });
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+// });
|