Просмотр исходного кода

refs 116948: add daysSinceCreation to user condition

Futa Arai 3 лет назад
Родитель
Сommit
8761db6ecc

+ 6 - 4
packages/app/src/server/util/questionnaire/condition.ts

@@ -11,18 +11,20 @@ const checkUserInfo = (condition: ICondition, userInfo: IUserInfo): boolean => {
     return false;
     return false;
   }
   }
 
 
+  // Is "time passed since user creation" in between specified range?
   if (userInfo.type !== UserType.guest) {
   if (userInfo.type !== UserType.guest) {
     const createdAt = userInfo.userCreatedAt;
     const createdAt = userInfo.userCreatedAt;
     const moreThanOrEqualTo = daysSinceCreation?.moreThanOrEqualTo;
     const moreThanOrEqualTo = daysSinceCreation?.moreThanOrEqualTo;
     const lessThanOrEqualTo = daysSinceCreation?.lessThanOrEqualTo;
     const lessThanOrEqualTo = daysSinceCreation?.lessThanOrEqualTo;
+    const currentDate = new Date();
 
 
     const leftThresholdBool = !moreThanOrEqualTo || (() => {
     const leftThresholdBool = !moreThanOrEqualTo || (() => {
-      const leftThreshold = new Date(Date.now() - 60 * 1000 * 60 * 24 * moreThanOrEqualTo);
-      return leftThreshold <= createdAt;
+      const leftThreshold = new Date(createdAt.getTime() + 60 * 1000 * 60 * 24 * moreThanOrEqualTo);
+      return leftThreshold <= currentDate;
     })();
     })();
     const rightThresholdBool = !lessThanOrEqualTo || (() => {
     const rightThresholdBool = !lessThanOrEqualTo || (() => {
-      const rightThreshold = new Date(Date.now() + 60 * 1000 * 60 * 24 * lessThanOrEqualTo);
-      return rightThreshold >= createdAt;
+      const rightThreshold = new Date(createdAt.getTime() + 60 * 1000 * 60 * 24 * lessThanOrEqualTo);
+      return currentDate <= rightThreshold;
     })();
     })();
 
 
     return leftThresholdBool && rightThresholdBool;
     return leftThresholdBool && rightThresholdBool;

+ 62 - 2
packages/app/test/integration/service/questionnaire.test.ts

@@ -26,7 +26,7 @@ describe('QuestionnaireService', () => {
       username: 'questionnaire test user',
       username: 'questionnaire test user',
       email: 'questionnaireTestUser@example.com',
       email: 'questionnaireTestUser@example.com',
       password: 'usertestpass',
       password: 'usertestpass',
-      createdAt: '2023-01-01',
+      createdAt: '2000-01-01',
     });
     });
   });
   });
 
 
@@ -80,7 +80,7 @@ describe('QuestionnaireService', () => {
 
 
       delete userInfo.userIdHash;
       delete userInfo.userIdHash;
 
 
-      expect(userInfo).toEqual({ type: 'general', userCreatedAt: new Date('2023-01-01') });
+      expect(userInfo).toEqual({ type: 'general', userCreatedAt: new Date('2000-01-01') });
     });
     });
 
 
     test('Should get correct user info when user is null', () => {
     test('Should get correct user info when user is null', () => {
@@ -106,6 +106,10 @@ describe('QuestionnaireService', () => {
         condition: {
         condition: {
           user: {
           user: {
             types: ['general'],
             types: ['general'],
+            daysSinceCreation: {
+              moreThanOrEqualTo: 365,
+              lessThanOrEqualTo: 365 * 1000,
+            },
           },
           },
           growi: {
           growi: {
             types: ['on-premise'],
             types: ['on-premise'],
@@ -183,6 +187,58 @@ describe('QuestionnaireService', () => {
             },
             },
           },
           },
         },
         },
+        // for users that used GROWI for less than or equal to a year
+        {
+          ...questionnaireToBeShown,
+          _id: '63b8354837e7aa378e16f0b9',
+          condition: {
+            user: {
+              types: ['general'],
+              daysSinceCreation: {
+                lessThanOrEqualTo: 365,
+              },
+            },
+            growi: {
+              types: ['on-premise'],
+              versionRegExps: [crowi.version],
+            },
+          },
+        },
+        // for users that used GROWI for more than or equal to 1000 years
+        {
+          ...questionnaireToBeShown,
+          _id: '63b8354837e7aa378e16f0c1',
+          condition: {
+            user: {
+              types: ['general'],
+              daysSinceCreation: {
+                moreThanOrEqualTo: 365 * 1000,
+              },
+            },
+            growi: {
+              types: ['on-premise'],
+              versionRegExps: [crowi.version],
+            },
+          },
+        },
+        // for users that used GROWI for more than a month and less than 6 months
+        {
+          ...questionnaireToBeShown,
+          _id: '63b8354837e7aa378e16f0c2',
+          condition: {
+            user: {
+              types: ['general'],
+              daysSinceCreation: {
+                moreThanOrEqualTo: 30,
+                lessThanOrEqualTo: 30 * 6,
+              },
+            },
+            growi: {
+              types: ['on-premise'],
+              versionRegExps: [crowi.version],
+            },
+          },
+        },
       ]);
       ]);
 
 
       await QuestionnaireAnswerStatus.insertMany([
       await QuestionnaireAnswerStatus.insertMany([
@@ -231,6 +287,10 @@ describe('QuestionnaireService', () => {
           condition: {
           condition: {
             user: {
             user: {
               types: ['general'],
               types: ['general'],
+              daysSinceCreation: {
+                moreThanOrEqualTo: 365,
+                lessThanOrEqualTo: 365 * 1000,
+              },
             },
             },
             growi: {
             growi: {
               types: ['on-premise'],
               types: ['on-premise'],