Yuki Takei 2 лет назад
Родитель
Сommit
5c6de6b07c

+ 0 - 5
.eslintrc.js

@@ -13,11 +13,6 @@ module.exports = {
       'warn',
       {
         pathGroups: [
-          {
-            pattern: '(vitest|vitest-mock-extended)',
-            group: 'builtin',
-            position: 'before',
-          },
           {
             pattern: 'react',
             group: 'builtin',

+ 0 - 6
apps/app/src/server/middlewares/exclude-read-only-user.spec.ts

@@ -1,9 +1,3 @@
-import {
-  vi,
-  beforeEach,
-  describe, test, expect,
-} from 'vitest';
-
 import { ErrorV3 } from '@growi/core';
 
 import { excludeReadOnlyUser } from './exclude-read-only-user';

+ 0 - 5
apps/app/src/server/middlewares/safe-redirect.spec.ts

@@ -1,8 +1,3 @@
-import {
-  vi,
-  describe, test, expect,
-} from 'vitest';
-
 import type { Request } from 'express';
 
 import registerSafeRedirectFactory, { type ResWithSafeRedirect } from './safe-redirect';

+ 221 - 0
apps/app/src/server/service/acl.integ.test.ts

@@ -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);
+//       });
+//     });
+
+//   });
+
+
+// });

+ 0 - 5
apps/app/src/server/service/config-manager.spec.ts

@@ -1,8 +1,3 @@
-import {
-  vi,
-  beforeAll,
-  describe, expect, test,
-} from 'vitest';
 import { mock } from 'vitest-mock-extended';
 
 import ConfigModel from '../models/config';

+ 0 - 2
apps/app/src/services/renderer/rehype-plugins/relative-links-by-pukiwiki-like-linker.spec.ts

@@ -1,5 +1,3 @@
-import { describe, test, expect } from 'vitest';
-
 import { type HastNode, select } from 'hast-util-select';
 import parse from 'remark-parse';
 import rehype from 'remark-rehype';

+ 0 - 2
apps/app/src/services/renderer/rehype-plugins/relative-links.spec.ts

@@ -1,6 +1,4 @@
 
-import { describe, test, expect } from 'vitest';
-
 import { select, type HastNode } from 'hast-util-select';
 import parse from 'remark-parse';
 import remarkRehype from 'remark-rehype';

+ 0 - 2
apps/app/src/services/renderer/remark-plugins/pukiwiki-like-linker.spec.ts

@@ -1,5 +1,3 @@
-import { describe, test, expect } from 'vitest';
-
 import parse from 'remark-parse';
 import { unified } from 'unified';
 import { visit } from 'unist-util-visit';

+ 1 - 3
apps/app/src/utils/page-delete-config.test.ts

@@ -1,11 +1,9 @@
-import { describe, test } from 'vitest';
-
 import { PageDeleteConfigValue } from '../interfaces/page-delete-config';
 
 import { validateDeleteConfigs } from './page-delete-config';
 
 describe('validateDeleteConfigs utility function', () => {
-  test('Should validate delete configs', ({ expect }) => {
+  test('Should validate delete configs', () => {
     const Anyone = PageDeleteConfigValue.Anyone;
     const AdminAndAuthor = PageDeleteConfigValue.AdminAndAuthor;
     const AdminOnly = PageDeleteConfigValue.AdminOnly;

+ 0 - 2
apps/app/src/utils/to-array-from-csv.spec.ts

@@ -1,5 +1,3 @@
-import { describe, test, expect } from 'vitest';
-
 import { toArrayFromCsv } from './to-array-from-csv';
 
 describe('To array from csv', () => {

+ 3 - 0
apps/app/tsconfig.json

@@ -6,6 +6,9 @@
 
     "jsx": "preserve",
     "resolveJsonModule": true,
+    "types": [
+      "vitest/globals"
+    ],
 
     "baseUrl": ".",
     "paths": {

+ 1 - 0
apps/app/vitest.config.ts

@@ -9,5 +9,6 @@ export default defineProject({
     environment: 'node',
     exclude: ['**/test/**'],
     clearMocks: true,
+    globals: true,
   },
 });

+ 0 - 2
packages/core/src/plugin/util/option-parser.spec.ts

@@ -1,5 +1,3 @@
-import { describe, test, expect } from 'vitest';
-
 import { OptionParser } from './option-parser';
 
 describe('option-parser', () => {

+ 0 - 2
packages/core/src/utils/env-utils.spec.ts

@@ -1,5 +1,3 @@
-import { describe, it, expect } from 'vitest';
-
 import { toBoolean } from './env-utils';
 
 

+ 0 - 2
packages/core/src/utils/objectid-utils.spec.ts

@@ -1,5 +1,3 @@
-import { describe, test, expect } from 'vitest';
-
 import ObjectId from 'bson-objectid';
 
 import { isValidObjectId } from './objectid-utils';

+ 0 - 2
packages/core/src/utils/page-path-utils/is-top-page.spec.ts

@@ -1,5 +1,3 @@
-import { describe, test, expect } from 'vitest';
-
 import { isTopPage } from './is-top-page';
 
 describe('TopPage Path test', () => {

+ 0 - 2
packages/core/src/utils/path-utils.spec.ts

@@ -1,5 +1,3 @@
-import { describe, test, expect } from 'vitest';
-
 import * as pathUtils from './path-utils';
 
 

+ 4 - 1
packages/core/tsconfig.json

@@ -5,7 +5,10 @@
     "baseUrl": ".",
     "paths": {
       "~/*": ["./src/*"]
-    }
+    },
+    "types": [
+      "vitest/globals"
+    ]
   },
   "include": [
     "src", "test"

+ 1 - 0
packages/core/vitest.config.ts

@@ -8,5 +8,6 @@ export default defineProject({
   test: {
     environment: 'node',
     clearMocks: true,
+    globals: true,
   },
 });