Files
fotospiel-app/resources/js/admin/mobile/lib/onboardingGuard.test.ts
Codex Agent 78bd3c9267
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled
Allow superadmin to bypass onboarding billing
2026-01-25 00:05:34 +01:00

147 lines
4.2 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { resolveOnboardingRedirect } from './onboardingGuard';
import {
ADMIN_BILLING_PATH,
} from '../../constants';
describe('resolveOnboardingRedirect', () => {
it('returns null when events exist', () => {
const result = resolveOnboardingRedirect({
hasEvents: true,
hasActivePackage: false,
remainingEvents: null,
pathname: '/event-admin/mobile/dashboard',
isBillingPath: false,
isOnboardingDismissed: false,
isOnboardingCompleted: false,
isSuperAdmin: false,
});
expect(result).toBeNull();
});
it('returns null for billing paths', () => {
const result = resolveOnboardingRedirect({
hasEvents: false,
hasActivePackage: false,
remainingEvents: null,
pathname: ADMIN_BILLING_PATH,
isBillingPath: true,
isOnboardingDismissed: false,
isOnboardingCompleted: false,
isSuperAdmin: false,
});
expect(result).toBeNull();
});
it('returns null for event creation path', () => {
const result = resolveOnboardingRedirect({
hasEvents: false,
hasActivePackage: true,
remainingEvents: 1,
pathname: '/event-admin/mobile/events/new',
isBillingPath: false,
isOnboardingDismissed: false,
isOnboardingCompleted: false,
isSuperAdmin: false,
});
expect(result).toBeNull();
});
it('redirects to billing when no active package', () => {
const result = resolveOnboardingRedirect({
hasEvents: false,
hasActivePackage: false,
remainingEvents: null,
pathname: '/event-admin/mobile/dashboard',
isBillingPath: false,
isOnboardingDismissed: false,
isOnboardingCompleted: false,
isSuperAdmin: false,
});
expect(result).toBe(ADMIN_BILLING_PATH);
});
it('returns null when no remaining events but an active package exists', () => {
const result = resolveOnboardingRedirect({
hasEvents: false,
hasActivePackage: true,
remainingEvents: 0,
pathname: '/event-admin/mobile/dashboard',
isBillingPath: false,
isOnboardingDismissed: false,
isOnboardingCompleted: false,
isSuperAdmin: false,
});
expect(result).toBeNull();
});
it('returns null when remaining events are available', () => {
const result = resolveOnboardingRedirect({
hasEvents: false,
hasActivePackage: true,
remainingEvents: 2,
pathname: '/event-admin/mobile/dashboard',
isBillingPath: false,
isOnboardingDismissed: false,
isOnboardingCompleted: false,
isSuperAdmin: false,
});
expect(result).toBeNull();
});
it('returns null when remaining events are unlimited', () => {
const result = resolveOnboardingRedirect({
hasEvents: false,
hasActivePackage: true,
remainingEvents: null,
pathname: '/event-admin/mobile/dashboard',
isBillingPath: false,
isOnboardingDismissed: false,
isOnboardingCompleted: false,
isSuperAdmin: false,
});
expect(result).toBeNull();
});
it('does not redirect when onboarding is dismissed', () => {
const result = resolveOnboardingRedirect({
hasEvents: false,
hasActivePackage: false,
remainingEvents: null,
pathname: '/event-admin/mobile/dashboard',
isBillingPath: false,
isOnboardingDismissed: true,
isOnboardingCompleted: false,
isSuperAdmin: false,
});
expect(result).toBeNull();
});
it('does not redirect when onboarding is completed', () => {
const result = resolveOnboardingRedirect({
hasEvents: false,
hasActivePackage: false,
remainingEvents: null,
pathname: '/event-admin/mobile/dashboard',
isBillingPath: false,
isOnboardingCompleted: true,
isSuperAdmin: false,
});
expect(result).toBeNull();
});
it('returns null for super admins without packages', () => {
const result = resolveOnboardingRedirect({
hasEvents: false,
hasActivePackage: false,
remainingEvents: null,
pathname: '/event-admin/mobile/dashboard',
isBillingPath: false,
isOnboardingDismissed: false,
isOnboardingCompleted: false,
isSuperAdmin: true,
});
expect(result).toBeNull();
});
});