client/components/mma/billing/Billing.stories.tsx (88 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 {
InAppPurchase,
InAppPurchaseAndroid,
InAppPurchaseIos,
PuzzleAppPurchaseAndroid,
} from '../../../fixtures/inAppPurchase';
import { guardianWeeklyCardInvoice } from '../../../fixtures/invoices';
import { toMembersDataApiResponse } from '../../../fixtures/mdapiResponse';
import {
digitalPackPaidByDirectDebit,
guardianAdLite,
guardianAdLiteCancelled,
guardianWeeklyPaidByCard,
newspaperVoucherPaidByPaypal,
tierThree,
} from '../../../fixtures/productBuilder/testProducts';
import { user } from '../../../fixtures/user';
import { Billing } from './Billing';
export default {
title: 'Pages/Billing',
component: Billing,
decorators: [ReactRouterDecorator],
parameters: {
layout: 'fullscreen',
},
} as Meta<typeof Billing>;
export const NoSubscription: StoryObj<typeof Billing> = {
render: () => {
return <Billing />;
},
parameters: {
msw: [
http.get('/api/me/mma', () => {
return HttpResponse.json(toMembersDataApiResponse());
}),
http.get('/mpapi/user/mobile-subscriptions', () => {
return HttpResponse.json({ subscriptions: [] });
}),
http.get('/api/invoices', () => {
return HttpResponse.json({ invoices: [] });
}),
http.get('/idapi/user', () => {
return HttpResponse.json(user);
}),
],
},
};
export const WithSubscriptions: StoryObj<typeof Billing> = {
render: () => {
featureSwitches['appSubscriptions'] = true;
return <Billing />;
},
parameters: {
msw: [
http.get('/api/me/mma', () => {
return HttpResponse.json(
toMembersDataApiResponse(
guardianWeeklyPaidByCard(),
digitalPackPaidByDirectDebit(),
newspaperVoucherPaidByPaypal(),
tierThree(),
guardianAdLite(),
guardianAdLiteCancelled(),
),
);
}),
http.get('/mpapi/user/mobile-subscriptions', () => {
return HttpResponse.json({
subscriptions: [
InAppPurchase,
InAppPurchaseIos,
InAppPurchaseAndroid,
PuzzleAppPurchaseAndroid,
],
});
}),
http.get('/api/invoices', () => {
return HttpResponse.json({
invoices: [guardianWeeklyCardInvoice],
});
}),
],
},
};