diff --git a/apps/admin-x-settings/src/components/settings/membership/offers/EditOfferModal.tsx b/apps/admin-x-settings/src/components/settings/membership/offers/EditOfferModal.tsx index 8e4a824757..edf24dd10c 100644 --- a/apps/admin-x-settings/src/components/settings/membership/offers/EditOfferModal.tsx +++ b/apps/admin-x-settings/src/components/settings/membership/offers/EditOfferModal.tsx @@ -144,7 +144,10 @@ const EditOfferModal: React.FC = ({params}) => { dirty={saveState === 'unsaved'} okColor={okProps.color} okLabel={okProps.label || 'Save'} - sidebar={sidebar} size='full' title='Offer' + sidebar={sidebar} + size='full' + testId='offer-update-modal' + title='Offer' onCancel={() => { modal.remove(); updateRoute('offers/edit'); diff --git a/apps/admin-x-settings/test/acceptance/membership/offers.test.ts b/apps/admin-x-settings/test/acceptance/membership/offers.test.ts index 4e290102e9..bb14e70c8d 100644 --- a/apps/admin-x-settings/test/acceptance/membership/offers.test.ts +++ b/apps/admin-x-settings/test/acceptance/membership/offers.test.ts @@ -51,4 +51,50 @@ test.describe('Offers Modal', () => { await expect(modal).toContainText('Archived offers'); await expect(modal).toContainText('Third offer'); }); + + test('Supports updating an offer', async ({page}) => { + const {lastApiRequests} = await mockApi({page, requests: { + ...globalDataRequests, + browseSettings: {...globalDataRequests.browseSettings, response: settingsWithStripe}, + browseOffers: {method: 'GET', path: '/offers/?limit=all', response: responseFixtures.offers}, + browseOffersById: {method: 'GET', path: `/offers/${responseFixtures.offers.offers[0].id}/`, response: responseFixtures.offers}, + browseTiers: {method: 'GET', path: '/tiers/', response: responseFixtures.tiers}, + editOffer: {method: 'PUT', path: `/offers/${responseFixtures.offers.offers[0].id}/`, response: { + offers: [{ + id: responseFixtures.offers.offers[0].id, + name: 'Updated offer', + body_font_category: 'sans_serif' + }] + }} + }}); + + await page.goto('/'); + const section = page.getByTestId('offers'); + await section.getByRole('button', {name: 'Manage offers'}).click(); + const modal = page.getByTestId('offers-modal'); + await expect(modal).toContainText('Active offers'); + await expect(modal).toContainText('First offer'); + await modal.getByText('First offer').click(); + + const offerUpdateModal = page.getByTestId('offer-update-modal'); + await expect(offerUpdateModal).toBeVisible(); + + await offerUpdateModal.getByPlaceholder('black-friday').fill(''); + await offerUpdateModal.getByRole('button', {name: 'Save'}).click(); + + await expect(page.getByTestId('toast-error')).toContainText(/Can't save offer, please double check that you've filled all mandatory fields./); + await expect(offerUpdateModal).toContainText(/Please enter a code/); + + await offerUpdateModal.getByPlaceholder('black-friday').fill('black-friday-offer'); + + await offerUpdateModal.getByRole('button', {name: 'Save'}).click(); + + expect(lastApiRequests.editOffer?.body).toMatchObject({ + offers: [{ + id: responseFixtures.offers.offers[0].id, + name: 'First offer', + code: 'black-friday-offer' + }] + }); + }); });