mirror of
https://github.com/n8n-io/n8n.git
synced 2024-12-26 05:04:05 -08:00
fix(editor): Disable email confirmation banner for trialing users (#7340)
Github issue / Community forum post (link here to close automatically):
This commit is contained in:
parent
5e6c1d4f4b
commit
6d3d1789db
|
@ -116,8 +116,8 @@
|
||||||
"auth.signup.setupYourAccount": "Set up your account",
|
"auth.signup.setupYourAccount": "Set up your account",
|
||||||
"auth.signup.setupYourAccountError": "Problem setting up your account",
|
"auth.signup.setupYourAccountError": "Problem setting up your account",
|
||||||
"auth.signup.tokenValidationError": "Issue validating invite token",
|
"auth.signup.tokenValidationError": "Issue validating invite token",
|
||||||
"banners.confirmEmail.message.1": "You need access to your admin email inbox to make sure you can reach your admin dashboard. Please make sure that your admin email",
|
"banners.confirmEmail.message.1": "To secure your account and prevent future access issues, please confirm your",
|
||||||
"banners.confirmEmail.message.2": "is accessible and confirmed.",
|
"banners.confirmEmail.message.2": "email address.",
|
||||||
"banners.confirmEmail.button": "Confirm email",
|
"banners.confirmEmail.button": "Confirm email",
|
||||||
"banners.confirmEmail.toast.success.heading": "Confirmation email sent",
|
"banners.confirmEmail.toast.success.heading": "Confirmation email sent",
|
||||||
"banners.confirmEmail.toast.success.message": "Please check your inbox and click the confirmation link.",
|
"banners.confirmEmail.toast.success.message": "Please check your inbox and click the confirmation link.",
|
||||||
|
|
|
@ -10,6 +10,7 @@ import {
|
||||||
getTrialExpiredUserResponse,
|
getTrialExpiredUserResponse,
|
||||||
getTrialingUserResponse,
|
getTrialingUserResponse,
|
||||||
getUserCloudInfo,
|
getUserCloudInfo,
|
||||||
|
getNotTrialingUserResponse,
|
||||||
} from './utils/cloudStoreUtils';
|
} from './utils/cloudStoreUtils';
|
||||||
|
|
||||||
let uiStore: ReturnType<typeof useUIStore>;
|
let uiStore: ReturnType<typeof useUIStore>;
|
||||||
|
@ -128,6 +129,8 @@ describe('UI store', () => {
|
||||||
expect(fetchCloudSpy).toHaveBeenCalled();
|
expect(fetchCloudSpy).toHaveBeenCalled();
|
||||||
expect(fetchUserCloudAccountSpy).toHaveBeenCalled();
|
expect(fetchUserCloudAccountSpy).toHaveBeenCalled();
|
||||||
expect(uiStore.bannerStack).toContain('TRIAL');
|
expect(uiStore.bannerStack).toContain('TRIAL');
|
||||||
|
// There should be no email confirmation banner for trialing users
|
||||||
|
expect(uiStore.bannerStack).not.toContain('EMAIL_CONFIRMATION');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should add trial over banner to the the stack', async () => {
|
it('should add trial over banner to the the stack', async () => {
|
||||||
|
@ -143,12 +146,14 @@ describe('UI store', () => {
|
||||||
expect(fetchCloudSpy).toHaveBeenCalled();
|
expect(fetchCloudSpy).toHaveBeenCalled();
|
||||||
expect(fetchUserCloudAccountSpy).toHaveBeenCalled();
|
expect(fetchUserCloudAccountSpy).toHaveBeenCalled();
|
||||||
expect(uiStore.bannerStack).toContain('TRIAL_OVER');
|
expect(uiStore.bannerStack).toContain('TRIAL_OVER');
|
||||||
|
// There should be no email confirmation banner for trialing users
|
||||||
|
expect(uiStore.bannerStack).not.toContain('EMAIL_CONFIRMATION');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should add email confirmation banner to the the stack', async () => {
|
it('should add email confirmation banner to the the stack', async () => {
|
||||||
const fetchCloudSpy = vi
|
const fetchCloudSpy = vi
|
||||||
.spyOn(cloudPlanApi, 'getCurrentPlan')
|
.spyOn(cloudPlanApi, 'getCurrentPlan')
|
||||||
.mockResolvedValue(getTrialExpiredUserResponse());
|
.mockResolvedValue(getNotTrialingUserResponse());
|
||||||
const fetchUserCloudAccountSpy = vi
|
const fetchUserCloudAccountSpy = vi
|
||||||
.spyOn(cloudPlanApi, 'getCloudUserInfo')
|
.spyOn(cloudPlanApi, 'getCloudUserInfo')
|
||||||
.mockResolvedValue(getUserCloudInfo(false));
|
.mockResolvedValue(getUserCloudInfo(false));
|
||||||
|
@ -157,7 +162,6 @@ describe('UI store', () => {
|
||||||
await cloudPlanStore.fetchUserCloudAccount();
|
await cloudPlanStore.fetchUserCloudAccount();
|
||||||
expect(fetchCloudSpy).toHaveBeenCalled();
|
expect(fetchCloudSpy).toHaveBeenCalled();
|
||||||
expect(fetchUserCloudAccountSpy).toHaveBeenCalled();
|
expect(fetchUserCloudAccountSpy).toHaveBeenCalled();
|
||||||
expect(uiStore.bannerStack).toContain('TRIAL_OVER');
|
|
||||||
expect(uiStore.bannerStack).toContain('EMAIL_CONFIRMATION');
|
expect(uiStore.bannerStack).toContain('EMAIL_CONFIRMATION');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import type { Cloud } from '@/Interface';
|
import type { Cloud } from '@/Interface';
|
||||||
|
|
||||||
// Mocks cloud plan API responses with different trial expiration dates
|
// Mocks cloud plan API responses with different trial expiration dates
|
||||||
function getUserPlanData(trialExpirationDate: Date): Cloud.PlanData {
|
function getUserPlanData(trialExpirationDate: Date, isTrial = true): Cloud.PlanData {
|
||||||
return {
|
return {
|
||||||
planId: 0,
|
planId: 0,
|
||||||
monthlyExecutionsLimit: 1000,
|
monthlyExecutionsLimit: 1000,
|
||||||
|
@ -10,7 +10,7 @@ function getUserPlanData(trialExpirationDate: Date): Cloud.PlanData {
|
||||||
isActive: true,
|
isActive: true,
|
||||||
displayName: 'Trial',
|
displayName: 'Trial',
|
||||||
metadata: {
|
metadata: {
|
||||||
group: 'trial',
|
group: isTrial ? 'trial' : 'pro',
|
||||||
slug: 'trial-1',
|
slug: 'trial-1',
|
||||||
trial: {
|
trial: {
|
||||||
gracePeriod: 3,
|
gracePeriod: 3,
|
||||||
|
@ -42,3 +42,9 @@ export function getTrialExpiredUserResponse(): Cloud.PlanData {
|
||||||
dateInThePast.setDate(dateInThePast.getDate() - 3);
|
dateInThePast.setDate(dateInThePast.getDate() - 3);
|
||||||
return getUserPlanData(dateInThePast);
|
return getUserPlanData(dateInThePast);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getNotTrialingUserResponse(): Cloud.PlanData {
|
||||||
|
const inThreeDays = new Date();
|
||||||
|
inThreeDays.setDate(inThreeDays.getDate() + 3);
|
||||||
|
return getUserPlanData(inThreeDays, false);
|
||||||
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ export const useCloudPlanStore = defineStore(STORES.CLOUD_PLAN, () => {
|
||||||
try {
|
try {
|
||||||
if (useUsersStore().isInstanceOwner) {
|
if (useUsersStore().isInstanceOwner) {
|
||||||
await usersStore.fetchUserCloudAccount();
|
await usersStore.fetchUserCloudAccount();
|
||||||
if (!usersStore.currentUserCloudInfo?.confirmed) {
|
if (!usersStore.currentUserCloudInfo?.confirmed && !userIsTrialing.value) {
|
||||||
useUIStore().pushBannerToStack('EMAIL_CONFIRMATION');
|
useUIStore().pushBannerToStack('EMAIL_CONFIRMATION');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue