client/components/mma/accountoverview/AccountOverview.stories.tsx (393 lines of code) (raw):
import type { Meta, StoryObj } from '@storybook/react';
import { http, HttpResponse } from 'msw';
import { ReactRouterDecorator } from '@/.storybook/ReactRouterDecorator';
import { featureSwitches } from '@/shared/featureSwitches';
import {
cancelledContribution,
cancelledGuardianAdLite,
cancelledGuardianWeekly,
} from '../../../fixtures/cancelledProductDetail';
import {
CancelledInAppPurchase,
InAppPurchaseIos,
PuzzleAppPurchaseAndroid,
PuzzleAppPurchaseIos,
} from '../../../fixtures/inAppPurchase';
import { toMembersDataApiResponse } from '../../../fixtures/mdapiResponse';
import {
contributionCancelled,
contributionPaidByPayPal,
digitalPackPaidByDirectDebit,
guardianAdLite,
guardianAdLiteCancelled,
guardianWeeklyCancelled,
guardianWeeklyGiftPurchase,
guardianWeeklyGiftRecipient,
guardianWeeklyPaidByCard,
homeDeliverySundayPlus,
membershipSupporter,
newspaperVoucherObserver,
newspaperVoucherPaidByPaypal,
observerDelivery,
patronMembership,
supporterPlus,
supporterPlusAnnualCancelled,
supporterPlusCancelled,
supporterPlusInOfferPeriod,
supporterPlusUSA,
tierThree,
} from '../../../fixtures/productBuilder/testProducts';
import { singleContributionsAPIResponse } from '../../../fixtures/singleContribution';
import { user } from '../../../fixtures/user';
import { AccountOverview } from './AccountOverview';
featureSwitches['appSubscriptions'] = true;
export default {
title: 'Pages/AccountOverview',
component: AccountOverview,
decorators: [ReactRouterDecorator],
parameters: {
layout: 'fullscreen',
},
} as Meta<typeof AccountOverview>;
export const NoSubscription: StoryObj<typeof AccountOverview> = {
render: () => {
return <AccountOverview />;
},
parameters: {
msw: [
http.get('/api/cancelled/', () => {
return HttpResponse.json([]);
}),
http.get('/mpapi/user/mobile-subscriptions', () => {
return HttpResponse.json({ subscriptions: [] });
}),
http.get('/api/me/mma', () => {
return HttpResponse.json(toMembersDataApiResponse());
}),
http.get('/idapi/user', () => {
return HttpResponse.json(user);
}),
http.get('/api/me/one-off-contributions', () => {
return HttpResponse.json([]);
}),
],
},
};
export const WithSubscriptions: StoryObj<typeof AccountOverview> = {
render: () => {
return <AccountOverview />;
},
parameters: {
msw: [
http.get('/api/cancelled/', () => {
return HttpResponse.json([]);
}),
http.get('/mpapi/user/mobile-subscriptions', () => {
return HttpResponse.json({ subscriptions: [] });
}),
http.get('/api/me/mma', () => {
return HttpResponse.json(
toMembersDataApiResponse(
guardianWeeklyPaidByCard(),
digitalPackPaidByDirectDebit(),
newspaperVoucherPaidByPaypal(),
newspaperVoucherObserver(),
membershipSupporter(),
patronMembership(),
supporterPlus(),
tierThree(),
observerDelivery(),
homeDeliverySundayPlus(),
),
);
}),
http.get('/api/me/one-off-contributions', () => {
return HttpResponse.json([]);
}),
],
},
};
export const WithOnlyObserverSubscriptions: StoryObj<typeof AccountOverview> = {
render: () => {
return <AccountOverview />;
},
parameters: {
msw: [
http.get('/api/cancelled/', () => {
return HttpResponse.json([]);
}),
http.get('/mpapi/user/mobile-subscriptions', () => {
return HttpResponse.json({ subscriptions: [] });
}),
http.get('/api/me/mma', () => {
return HttpResponse.json(
toMembersDataApiResponse(
newspaperVoucherObserver(),
observerDelivery(),
),
);
}),
http.get('/api/me/one-off-contributions', () => {
return HttpResponse.json([]);
}),
],
},
};
export const WithUSASubscription: StoryObj<typeof AccountOverview> = {
render: () => {
return <AccountOverview />;
},
parameters: {
msw: [
http.get('/api/cancelled/', () => {
return HttpResponse.json([]);
}),
http.get('/mpapi/user/mobile-subscriptions', () => {
return HttpResponse.json({ subscriptions: [] });
}),
http.get('/api/me/mma', () => {
return HttpResponse.json(
toMembersDataApiResponse(supporterPlusUSA()),
);
}),
http.get('/api/me/one-off-contributions', () => {
return HttpResponse.json([]);
}),
],
},
};
export const WithContributionAndSwitchPossible: StoryObj<
typeof AccountOverview
> = {
render: () => {
return <AccountOverview />;
},
parameters: {
msw: [
http.get('/api/cancelled/', () => {
return HttpResponse.json([]);
}),
http.get('/mpapi/user/mobile-subscriptions', () => {
return HttpResponse.json({ subscriptions: [] });
}),
http.get('/api/me/mma', () => {
return HttpResponse.json(
toMembersDataApiResponse(contributionPaidByPayPal()),
);
}),
http.get('/api/me/one-off-contributions', () => {
return HttpResponse.json([]);
}),
],
},
};
export const WithContributionInPaymentFailure: StoryObj<
typeof AccountOverview
> = {
render: () => {
return <AccountOverview />;
},
parameters: {
msw: [
http.get('/api/cancelled/', () => {
return HttpResponse.json([]);
}),
http.get('/mpapi/user/mobile-subscriptions', () => {
return HttpResponse.json({ subscriptions: [] });
}),
http.get('/api/me/mma', () => {
return HttpResponse.json(
toMembersDataApiResponse(
contributionPaymentFailure,
supporterPlus(),
),
);
}),
http.get('/api/me/one-off-contributions', () => {
return HttpResponse.json([]);
}),
],
},
};
const contributionPaymentFailure = {
...contributionPaidByPayPal(),
alertText: 'Your payment has failed.',
};
export const WithContributionAndSwitchNotPossible: StoryObj<
typeof AccountOverview
> = {
render: () => {
return <AccountOverview />;
},
parameters: {
msw: [
http.get('/api/cancelled/', () => {
return HttpResponse.json([]);
}),
http.get('/mpapi/user/mobile-subscriptions', () => {
return HttpResponse.json({ subscriptions: [] });
}),
http.get('/api/me/mma', () => {
return HttpResponse.json(
toMembersDataApiResponse(
contributionPaidByPayPal(),
digitalPackPaidByDirectDebit(),
),
);
}),
http.get('/api/me/one-off-contributions', () => {
return HttpResponse.json([]);
}),
],
},
};
export const WithCancelledSubscriptions: StoryObj<typeof AccountOverview> = {
render: () => {
return <AccountOverview />;
},
parameters: {
msw: [
http.get('/api/cancelled/', () => {
return HttpResponse.json([
cancelledContribution,
cancelledGuardianWeekly,
cancelledGuardianAdLite,
]);
}),
http.get('/mpapi/user/mobile-subscriptions', () => {
return HttpResponse.json({ subscriptions: [] });
}),
http.get('/api/me/mma', () => {
return HttpResponse.json(
toMembersDataApiResponse(
contributionCancelled(),
guardianWeeklyCancelled(),
supporterPlusCancelled(),
supporterPlusAnnualCancelled(),
guardianAdLiteCancelled(),
tierThree(),
),
);
}),
http.get('/api/me/one-off-contributions', () => {
return HttpResponse.json([]);
}),
],
},
};
export const WithGiftSubscriptions: StoryObj<typeof AccountOverview> = {
render: () => {
return <AccountOverview />;
},
parameters: {
msw: [
http.get('/api/cancelled/', () => {
return HttpResponse.json([]);
}),
http.get('/mpapi/user/mobile-subscriptions', () => {
return HttpResponse.json({ subscriptions: [] });
}),
http.get('/api/me/mma', () => {
return HttpResponse.json(
toMembersDataApiResponse(
guardianWeeklyGiftRecipient(),
guardianWeeklyGiftPurchase(),
),
);
}),
http.get('/api/me/one-off-contributions', () => {
return HttpResponse.json([]);
}),
],
},
};
export const WithAppSubscriptions: StoryObj<typeof AccountOverview> = {
render: () => {
return <AccountOverview />;
},
parameters: {
msw: [
http.get('/api/cancelled/', () => {
return HttpResponse.json([]);
}),
http.get('/mpapi/user/mobile-subscriptions', () => {
return HttpResponse.json({
subscriptions: [
CancelledInAppPurchase,
InAppPurchaseIos,
PuzzleAppPurchaseAndroid,
PuzzleAppPurchaseIos,
],
});
}),
http.get('/api/me/mma', () => {
return HttpResponse.json(toMembersDataApiResponse());
}),
http.get('/api/me/one-off-contributions', () => {
return HttpResponse.json([]);
}),
],
},
};
export const WithSingleContribution: StoryObj<typeof AccountOverview> = {
render: () => {
return <AccountOverview />;
},
parameters: {
msw: [
http.get('/api/cancelled/', () => {
return HttpResponse.json([]);
}),
http.get('/mpapi/user/mobile-subscriptions', () => {
return HttpResponse.json({ subscriptions: [] });
}),
http.get('/api/me/mma', () => {
return HttpResponse.json(toMembersDataApiResponse());
}),
http.get('/api/me/one-off-contributions', () => {
return HttpResponse.json(singleContributionsAPIResponse);
}),
],
},
};
export const WithSupporterPlusDuringOffer: StoryObj<typeof AccountOverview> = {
render: () => {
return <AccountOverview />;
},
parameters: {
msw: [
http.get('/api/cancelled/', () => {
return HttpResponse.json([]);
}),
http.get('/mpapi/user/mobile-subscriptions', () => {
return HttpResponse.json({ subscriptions: [] });
}),
http.get('/api/me/mma', () => {
return HttpResponse.json(
toMembersDataApiResponse(supporterPlusInOfferPeriod()),
);
}),
http.get('/api/me/one-off-contributions', () => {
return HttpResponse.json([]);
}),
],
},
};
export const WithGuardianAdLite: StoryObj<typeof AccountOverview> = {
render: () => {
return <AccountOverview />;
},
parameters: {
msw: [
http.get('/api/cancelled/', () => {
return HttpResponse.json([]);
}),
http.get('/mpapi/user/mobile-subscriptions', () => {
return HttpResponse.json({ subscriptions: [] });
}),
http.get('/api/me/mma', () => {
return HttpResponse.json(
toMembersDataApiResponse(guardianAdLite()),
);
}),
http.get('/api/me/one-off-contributions', () => {
return HttpResponse.json([]);
}),
],
},
};