Avoid billing redirect for endcustomer packages
This commit is contained in:
@@ -169,6 +169,7 @@ export default function MobileDashboardPage() {
|
|||||||
const activePackage =
|
const activePackage =
|
||||||
packagesOverview?.activePackage ?? packagesOverview?.packages?.find((pkg) => pkg.active) ?? null;
|
packagesOverview?.activePackage ?? packagesOverview?.packages?.find((pkg) => pkg.active) ?? null;
|
||||||
const remainingEvents = activePackage?.remaining_events ?? null;
|
const remainingEvents = activePackage?.remaining_events ?? null;
|
||||||
|
const isResellerPackage = activePackage?.package_type === 'reseller';
|
||||||
const summarySeenPackageId =
|
const summarySeenPackageId =
|
||||||
summarySeenOverride ?? onboardingStatus?.steps?.summary_seen_package_id ?? null;
|
summarySeenOverride ?? onboardingStatus?.steps?.summary_seen_package_id ?? null;
|
||||||
const hasSummaryPackage =
|
const hasSummaryPackage =
|
||||||
@@ -178,7 +179,7 @@ export default function MobileDashboardPage() {
|
|||||||
!packagesLoading &&
|
!packagesLoading &&
|
||||||
!packagesError &&
|
!packagesError &&
|
||||||
!effectiveHasEvents &&
|
!effectiveHasEvents &&
|
||||||
(activePackage === null || (remainingEvents !== null && remainingEvents <= 0));
|
(activePackage === null || (isResellerPackage && remainingEvents !== null && remainingEvents <= 0));
|
||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
if (packagesLoading || !shouldRedirectToBilling) {
|
if (packagesLoading || !shouldRedirectToBilling) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { describe, expect, it, vi } from 'vitest';
|
import { afterEach, describe, expect, it, vi } from 'vitest';
|
||||||
import { render, screen } from '@testing-library/react';
|
import { render, screen } from '@testing-library/react';
|
||||||
|
|
||||||
const fixtures = vi.hoisted(() => ({
|
const fixtures = vi.hoisted(() => ({
|
||||||
@@ -41,6 +41,13 @@ const authState = {
|
|||||||
status: 'authenticated',
|
status: 'authenticated',
|
||||||
user: { role: 'tenant_admin' },
|
user: { role: 'tenant_admin' },
|
||||||
};
|
};
|
||||||
|
const eventContext = {
|
||||||
|
events: [fixtures.event],
|
||||||
|
activeEvent: fixtures.event,
|
||||||
|
hasEvents: true,
|
||||||
|
hasMultipleEvents: false,
|
||||||
|
isLoading: false,
|
||||||
|
};
|
||||||
|
|
||||||
vi.mock('react-router-dom', () => ({
|
vi.mock('react-router-dom', () => ({
|
||||||
useNavigate: () => navigateMock,
|
useNavigate: () => navigateMock,
|
||||||
@@ -98,11 +105,7 @@ vi.mock('@tanstack/react-query', () => ({
|
|||||||
|
|
||||||
vi.mock('../../context/EventContext', () => ({
|
vi.mock('../../context/EventContext', () => ({
|
||||||
useEventContext: () => ({
|
useEventContext: () => ({
|
||||||
events: [fixtures.event],
|
...eventContext,
|
||||||
activeEvent: fixtures.event,
|
|
||||||
hasEvents: true,
|
|
||||||
hasMultipleEvents: false,
|
|
||||||
isLoading: false,
|
|
||||||
selectEvent: vi.fn(),
|
selectEvent: vi.fn(),
|
||||||
}),
|
}),
|
||||||
}));
|
}));
|
||||||
@@ -231,6 +234,31 @@ vi.mock('../eventDate', () => ({
|
|||||||
import MobileDashboardPage from '../DashboardPage';
|
import MobileDashboardPage from '../DashboardPage';
|
||||||
|
|
||||||
describe('MobileDashboardPage', () => {
|
describe('MobileDashboardPage', () => {
|
||||||
|
afterEach(() => {
|
||||||
|
eventContext.events = [fixtures.event];
|
||||||
|
eventContext.activeEvent = fixtures.event;
|
||||||
|
eventContext.hasEvents = true;
|
||||||
|
eventContext.hasMultipleEvents = false;
|
||||||
|
|
||||||
|
fixtures.activePackage.package_type = 'standard';
|
||||||
|
fixtures.activePackage.remaining_events = 3;
|
||||||
|
navigateMock.mockClear();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not redirect endcustomer packages without remaining event quota', () => {
|
||||||
|
eventContext.events = [];
|
||||||
|
eventContext.activeEvent = null as unknown as typeof fixtures.event;
|
||||||
|
eventContext.hasEvents = false;
|
||||||
|
eventContext.hasMultipleEvents = false;
|
||||||
|
|
||||||
|
fixtures.activePackage.package_type = 'endcustomer';
|
||||||
|
fixtures.activePackage.remaining_events = 0;
|
||||||
|
|
||||||
|
render(<MobileDashboardPage />);
|
||||||
|
|
||||||
|
expect(navigateMock).not.toHaveBeenCalledWith('/event-admin/mobile/billing#packages', { replace: true });
|
||||||
|
});
|
||||||
|
|
||||||
it('shows package usage progress when a limit is available', () => {
|
it('shows package usage progress when a limit is available', () => {
|
||||||
render(<MobileDashboardPage />);
|
render(<MobileDashboardPage />);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user