Merge branch 'feat/inda-383-daily-stat' into 'main'
[ProtonMail-WebClient.git] / packages / components / containers / offers / operations / subscriptionReminder / eligibility.test.ts
blobb392ff26307f94fbfef7c08a33b92cc64e2c9eb6
1 import { subDays } from 'date-fns';
3 import { APPS } from '@proton/shared/lib/constants';
4 import type { ProtonConfig, UserModel } from '@proton/shared/lib/interfaces';
6 import isEligible from './eligibility';
8 const now = new Date();
9 const fourteenDaysAgo = subDays(now, 14).getTime() / 1000;
10 const ninetyDaysAgo = subDays(now, 90).getTime() / 1000;
11 const oneHundreadEightyDaysAgo = subDays(now, 180).getTime() / 1000;
13 const mailConfig = {
14     APP_NAME: APPS.PROTONMAIL,
15 } as unknown as ProtonConfig;
17 describe('Subscription reminder eligibility', () => {
18     it('should return false if the user is just created', () => {
19         const user = {
20             isFree: true,
21             isDelinquent: false,
22             CreateTime: now.getTime() / 1000,
23         } as unknown as UserModel;
25         expect(isEligible({ user, protonConfig: mailConfig, lastReminderTimestamp: undefined, isVisited: false })).toBe(
26             false
27         );
28     });
30     it('should return true if user is older than 14 days and hasnt seen the offer', () => {
31         const user = {
32             isFree: true,
33             isDelinquent: false,
34             CreateTime: fourteenDaysAgo,
35         } as unknown as UserModel;
37         expect(isEligible({ user, protonConfig: mailConfig, lastReminderTimestamp: undefined, isVisited: false })).toBe(
38             true
39         );
40     });
42     it('should return false if user is older than 14 days and has seen the offer', () => {
43         const user = {
44             isFree: true,
45             isDelinquent: false,
46             CreateTime: fourteenDaysAgo,
47         } as unknown as UserModel;
49         expect(isEligible({ user, protonConfig: mailConfig, lastReminderTimestamp: undefined, isVisited: true })).toBe(
50             false
51         );
52     });
54     it('should return true if user is older than 180 days and has seen the offer', () => {
55         const user = {
56             isFree: true,
57             isDelinquent: false,
58             CreateTime: ninetyDaysAgo,
59         } as unknown as UserModel;
61         expect(isEligible({ user, protonConfig: mailConfig, lastReminderTimestamp: undefined, isVisited: true })).toBe(
62             true
63         );
64     });
66     it('should return true if user is older than 360 days and has seen the offer 180 days ago', () => {
67         const user = {
68             isFree: true,
69             isDelinquent: false,
70             CreateTime: oneHundreadEightyDaysAgo,
71         } as unknown as UserModel;
73         expect(
74             isEligible({
75                 user,
76                 protonConfig: mailConfig,
77                 lastReminderTimestamp: ninetyDaysAgo,
78                 isVisited: true,
79             })
80         ).toBe(true);
81     });
83     it('should return false if user is older than 180 days but reminder is 14 days old', () => {
84         const user = {
85             isFree: true,
86             isDelinquent: false,
87             CreateTime: ninetyDaysAgo,
88         } as unknown as UserModel;
90         expect(
91             isEligible({
92                 user,
93                 protonConfig: mailConfig,
94                 lastReminderTimestamp: fourteenDaysAgo,
95                 isVisited: true,
96             })
97         ).toBe(false);
98     });
99 });