|
|
@@ -1,36 +1,65 @@
|
|
|
-import mongoose from 'mongoose';
|
|
|
+import { Types } from 'mongoose';
|
|
|
+import { mock } from 'vitest-mock-extended';
|
|
|
+
|
|
|
+import pkg from '^/package.json';
|
|
|
+
|
|
|
+
|
|
|
+import type UserEvent from '~/server/events/user';
|
|
|
+import { Config } from '~/server/models/config';
|
|
|
+import { configManager } from '~/server/service/config-manager';
|
|
|
|
|
|
-import { getInstance } from '../../../../../test/integration/setup-crowi';
|
|
|
import type Crowi from '../../../../server/crowi';
|
|
|
import { StatusType } from '../../interfaces/questionnaire-answer-status';
|
|
|
+import { UserType } from '../../interfaces/user-info';
|
|
|
import QuestionnaireAnswerStatus from '../models/questionnaire-answer-status';
|
|
|
import QuestionnaireOrder from '../models/questionnaire-order';
|
|
|
|
|
|
+import QuestionnaireService from './questionnaire';
|
|
|
+
|
|
|
+
|
|
|
describe('QuestionnaireService', () => {
|
|
|
- let crowi: Crowi;
|
|
|
+ const appVersion = pkg.version;
|
|
|
+
|
|
|
+ let questionnaireService: QuestionnaireService;
|
|
|
+
|
|
|
+ let User;
|
|
|
let user;
|
|
|
|
|
|
beforeAll(async() => {
|
|
|
process.env.APP_SITE_URL = 'http://growi.test.jp';
|
|
|
process.env.DEPLOYMENT_TYPE = 'growi-docker-compose';
|
|
|
process.env.SAML_ENABLED = 'true';
|
|
|
- crowi = await getInstance();
|
|
|
|
|
|
- crowi.configManager.updateConfigs({
|
|
|
+ await configManager.loadConfigs();
|
|
|
+ await configManager.updateConfigs({
|
|
|
'security:passport-saml:isEnabled': true,
|
|
|
'security:passport-github:isEnabled': true,
|
|
|
});
|
|
|
|
|
|
- await mongoose.model('Config').create({
|
|
|
+ await Config.create({
|
|
|
key: 'app:installed',
|
|
|
value: true,
|
|
|
createdAt: '2000-01-01',
|
|
|
});
|
|
|
|
|
|
- crowi.setupQuestionnaireService();
|
|
|
+ const crowiMock = mock<Crowi>({
|
|
|
+ version: appVersion,
|
|
|
+ event: vi.fn().mockImplementation((eventName) => {
|
|
|
+ if (eventName === 'user') {
|
|
|
+ return mock<UserEvent>({
|
|
|
+ on: vi.fn(),
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }),
|
|
|
+ appService: {
|
|
|
+ getSiteUrl: () => 'http://growi.test.jp',
|
|
|
+ },
|
|
|
+ });
|
|
|
+ const userModelFactory = (await import('~/server/models/user')).default;
|
|
|
+ User = userModelFactory(crowiMock);
|
|
|
+ questionnaireService = new QuestionnaireService(crowiMock);
|
|
|
|
|
|
- const User = crowi.model('User');
|
|
|
- User.deleteMany({}); // clear users
|
|
|
+ await User.deleteMany({}); // clear users
|
|
|
user = await User.create({
|
|
|
name: 'Example for Questionnaire Service Test',
|
|
|
username: 'questionnaire test user',
|
|
|
@@ -42,22 +71,23 @@ describe('QuestionnaireService', () => {
|
|
|
|
|
|
describe('getGrowiInfo', () => {
|
|
|
test('Should get correct GROWI info', async() => {
|
|
|
- const growiInfo = await crowi.questionnaireService.getGrowiInfo();
|
|
|
+ const growiInfo = await questionnaireService.getGrowiInfo();
|
|
|
+
|
|
|
+ assert(growiInfo != null);
|
|
|
|
|
|
expect(growiInfo.appSiteUrlHashed).toBeTruthy();
|
|
|
expect(growiInfo.appSiteUrlHashed).not.toBe('http://growi.test.jp');
|
|
|
- expect(growiInfo.osInfo.type).toBeTruthy();
|
|
|
- expect(growiInfo.osInfo.platform).toBeTruthy();
|
|
|
- expect(growiInfo.osInfo.arch).toBeTruthy();
|
|
|
- expect(growiInfo.osInfo.totalmem).toBeTruthy();
|
|
|
-
|
|
|
- delete growiInfo.appSiteUrlHashed;
|
|
|
- delete growiInfo.currentActiveUsersCount;
|
|
|
- delete growiInfo.currentUsersCount;
|
|
|
+ expect(growiInfo.osInfo?.type).toBeTruthy();
|
|
|
+ expect(growiInfo.osInfo?.platform).toBeTruthy();
|
|
|
+ expect(growiInfo.osInfo?.arch).toBeTruthy();
|
|
|
+ expect(growiInfo.osInfo?.totalmem).toBeTruthy();
|
|
|
+
|
|
|
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
|
+ delete (growiInfo as any).appSiteUrlHashed;
|
|
|
delete growiInfo.osInfo;
|
|
|
|
|
|
expect(growiInfo).toEqual({
|
|
|
- version: crowi.version,
|
|
|
+ version: appVersion,
|
|
|
appSiteUrl: 'http://growi.test.jp',
|
|
|
type: 'on-premise',
|
|
|
wikiType: 'closed',
|
|
|
@@ -65,7 +95,7 @@ describe('QuestionnaireService', () => {
|
|
|
additionalInfo: {
|
|
|
installedAt: new Date('2000-01-01'),
|
|
|
installedAtByOldestUser: new Date('2000-01-01'),
|
|
|
- currentUsersCount: 7,
|
|
|
+ currentUsersCount: 1,
|
|
|
currentActiveUsersCount: 1,
|
|
|
attachmentType: 'aws',
|
|
|
activeExternalAccountTypes: ['saml', 'github'],
|
|
|
@@ -76,11 +106,11 @@ describe('QuestionnaireService', () => {
|
|
|
describe('When url hash settings is on', () => {
|
|
|
beforeEach(async() => {
|
|
|
process.env.QUESTIONNAIRE_IS_APP_SITE_URL_HASHED = 'true';
|
|
|
- await crowi.setupConfigManager();
|
|
|
+ await configManager.loadConfigs();
|
|
|
});
|
|
|
|
|
|
test('Should return app url string', async() => {
|
|
|
- const growiInfo = await crowi.questionnaireService.getGrowiInfo();
|
|
|
+ const growiInfo = await questionnaireService.getGrowiInfo();
|
|
|
expect(growiInfo.appSiteUrl).toBeUndefined();
|
|
|
expect(growiInfo.appSiteUrlHashed).not.toBe('http://growi.test.jp');
|
|
|
expect(growiInfo.appSiteUrlHashed).toBeTruthy();
|
|
|
@@ -90,17 +120,24 @@ describe('QuestionnaireService', () => {
|
|
|
|
|
|
describe('getUserInfo', () => {
|
|
|
test('Should get correct user info when user given', () => {
|
|
|
- const userInfo = crowi.questionnaireService.getUserInfo(user, 'growiurlhashfortest');
|
|
|
+ const userInfo = questionnaireService.getUserInfo(user, 'growiurlhashfortest');
|
|
|
+ expect(userInfo).not.toBeNull();
|
|
|
+ assert(userInfo != null);
|
|
|
+
|
|
|
+ expect(userInfo.type).equal(UserType.general);
|
|
|
+ assert(userInfo.type === UserType.general);
|
|
|
+
|
|
|
expect(userInfo.userIdHash).toBeTruthy();
|
|
|
expect(userInfo.userIdHash).not.toBe(user._id);
|
|
|
|
|
|
- delete userInfo.userIdHash;
|
|
|
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
|
+ delete (userInfo as any).userIdHash;
|
|
|
|
|
|
expect(userInfo).toEqual({ type: 'general', userCreatedAt: new Date('2000-01-01') });
|
|
|
});
|
|
|
|
|
|
test('Should get correct user info when user is null', () => {
|
|
|
- const userInfo = crowi.questionnaireService.getUserInfo(null, '');
|
|
|
+ const userInfo = questionnaireService.getUserInfo(null, '');
|
|
|
expect(userInfo).toEqual({ type: 'guest' });
|
|
|
});
|
|
|
});
|
|
|
@@ -141,7 +178,7 @@ describe('QuestionnaireService', () => {
|
|
|
},
|
|
|
growi: {
|
|
|
types: ['on-premise'],
|
|
|
- versionRegExps: [crowi.version],
|
|
|
+ versionRegExps: [appVersion],
|
|
|
},
|
|
|
},
|
|
|
createdAt: '2023-01-01',
|
|
|
@@ -165,7 +202,7 @@ describe('QuestionnaireService', () => {
|
|
|
},
|
|
|
growi: {
|
|
|
types: ['on-premise'],
|
|
|
- versionRegExps: [crowi.version],
|
|
|
+ versionRegExps: [appVersion],
|
|
|
},
|
|
|
},
|
|
|
});
|
|
|
@@ -185,7 +222,7 @@ describe('QuestionnaireService', () => {
|
|
|
},
|
|
|
growi: {
|
|
|
types: ['cloud'],
|
|
|
- versionRegExps: [crowi.version],
|
|
|
+ versionRegExps: [appVersion],
|
|
|
},
|
|
|
},
|
|
|
},
|
|
|
@@ -218,7 +255,7 @@ describe('QuestionnaireService', () => {
|
|
|
},
|
|
|
growi: {
|
|
|
types: ['on-premise'],
|
|
|
- versionRegExps: [crowi.version],
|
|
|
+ versionRegExps: [appVersion],
|
|
|
},
|
|
|
},
|
|
|
},
|
|
|
@@ -236,7 +273,7 @@ describe('QuestionnaireService', () => {
|
|
|
},
|
|
|
growi: {
|
|
|
types: ['on-premise'],
|
|
|
- versionRegExps: [crowi.version],
|
|
|
+ versionRegExps: [appVersion],
|
|
|
},
|
|
|
},
|
|
|
},
|
|
|
@@ -255,7 +292,7 @@ describe('QuestionnaireService', () => {
|
|
|
},
|
|
|
growi: {
|
|
|
types: ['on-premise'],
|
|
|
- versionRegExps: [crowi.version],
|
|
|
+ versionRegExps: [appVersion],
|
|
|
},
|
|
|
},
|
|
|
},
|
|
|
@@ -281,17 +318,13 @@ describe('QuestionnaireService', () => {
|
|
|
});
|
|
|
|
|
|
test('Should get questionnaire orders to show', async() => {
|
|
|
- const growiInfo = await crowi.questionnaireService.getGrowiInfo();
|
|
|
- const userInfo = crowi.questionnaireService.getUserInfo(user, growiInfo.appSiteUrlHashed);
|
|
|
- const questionnaireOrderDocuments = await crowi.questionnaireService.getQuestionnaireOrdersToShow(userInfo, growiInfo, user._id);
|
|
|
- const questionnaireOrderObjects = questionnaireOrderDocuments.map((document) => {
|
|
|
- const qo = document.toObject();
|
|
|
- delete qo.condition._id;
|
|
|
- return { ...qo, _id: qo._id.toString() };
|
|
|
- });
|
|
|
- expect(questionnaireOrderObjects).toEqual([
|
|
|
+ const growiInfo = await questionnaireService.getGrowiInfo();
|
|
|
+ const userInfo = questionnaireService.getUserInfo(user, growiInfo.appSiteUrlHashed);
|
|
|
+
|
|
|
+ const questionnaireOrderDocuments = await questionnaireService.getQuestionnaireOrdersToShow(userInfo, growiInfo, user._id);
|
|
|
+
|
|
|
+ expect(questionnaireOrderDocuments[0].toObject()).toMatchObject(
|
|
|
{
|
|
|
- _id: doc1._id.toString(),
|
|
|
__v: 0,
|
|
|
shortTitle: {
|
|
|
ja_JP: 'GROWI に関するアンケート',
|
|
|
@@ -314,13 +347,16 @@ describe('QuestionnaireService', () => {
|
|
|
},
|
|
|
growi: {
|
|
|
types: ['on-premise'],
|
|
|
- versionRegExps: [crowi?.version],
|
|
|
+ versionRegExps: [appVersion],
|
|
|
},
|
|
|
},
|
|
|
createdAt: new Date('2023-01-01'),
|
|
|
updatedAt: new Date('2023-01-01'),
|
|
|
},
|
|
|
- ]);
|
|
|
+ );
|
|
|
+
|
|
|
});
|
|
|
+
|
|
|
});
|
|
|
+
|
|
|
});
|