diff --git a/.changeset/payment-iframe-shop-id.md b/.changeset/payment-iframe-shop-id.md new file mode 100644 index 000000000..506bbece8 --- /dev/null +++ b/.changeset/payment-iframe-shop-id.md @@ -0,0 +1,5 @@ +--- +"@shopware-ag/meteor-admin-sdk": patch +--- + +Changed `addPaymentIframe` to add `shopId` parameter to iframe url. \ No newline at end of file diff --git a/packages/admin-sdk/src/_private/payment/index.spec.ts b/packages/admin-sdk/src/_private/payment/index.spec.ts index 8d7b65bf6..86ca94afb 100644 --- a/packages/admin-sdk/src/_private/payment/index.spec.ts +++ b/packages/admin-sdk/src/_private/payment/index.spec.ts @@ -40,6 +40,7 @@ describe('Private Service Payment', () => { let mockModalClose: jest.Mock; let mockLocationStartAutoResizer: jest.Mock; let mockGetAppInformation: jest.Mock; + let mockGetShopId: jest.Mock; let eventListeners: Map>; let mockModalOpen: jest.Mock; @@ -84,6 +85,10 @@ describe('Private Service Payment', () => { }); (context.getAppInformation as jest.Mock) = mockGetAppInformation; + // Mock context.getShopId + mockGetShopId = jest.fn().mockResolvedValue('shop-id-123'); + (context.getShopId as jest.Mock) = mockGetShopId; + // Clear all mocks jest.clearAllMocks(); mockBroadcastChannelInstance.addEventListener.mockClear(); @@ -126,7 +131,7 @@ describe('Private Service Payment', () => { expect(mockGetAppInformation).toHaveBeenCalledTimes(1); expect(result.iframeEl).toBeInstanceOf(HTMLIFrameElement); expect(result.iframeEl.src).toBe( - 'https://example.com/payment?service-name=test-app&service-version=1.0.0&shop-url=https://shop.example.com&sw-version=6.5.0&sw-user-language=en-GB&shop-plan=beyond' + 'https://example.com/payment?service-name=test-app&service-version=1.0.0&shop-url=https://shop.example.com&sw-version=6.5.0&sw-user-language=en-GB&shop-plan=beyond&shop-id=shop-id-123' ); expect(container.contains(result.iframeEl)).toBe(true); }); @@ -153,10 +158,18 @@ describe('Private Service Payment', () => { const result = await addPaymentIframe(container, baseUrl, options); expect(result.iframeEl.src).toBe( - 'https://example.com/payment?service-name=test-app&service-version=1.0.0&shop-url=https://license-aud.shop.example.com&sw-version=6.5.0&sw-user-language=en-GB&shop-plan=premium' + 'https://example.com/payment?service-name=test-app&service-version=1.0.0&shop-url=https://license-aud.shop.example.com&sw-version=6.5.0&sw-user-language=en-GB&shop-plan=premium&shop-id=shop-id-123' ); }); + it('should default shop-id to an empty value when getShopId returns null', async () => { + mockGetShopId.mockResolvedValue(null); + const result = await addPaymentIframe(container, baseUrl, options); + + expect(mockGetShopId).toHaveBeenCalledTimes(1); + expect(result.iframeEl.src.endsWith('&shop-id=')).toBe(true); + }); + it('should append iframe to the provided element', async () => { const result = await addPaymentIframe(container, baseUrl, options); diff --git a/packages/admin-sdk/src/_private/payment/index.ts b/packages/admin-sdk/src/_private/payment/index.ts index 017f3a1fe..02cb6d90e 100644 --- a/packages/admin-sdk/src/_private/payment/index.ts +++ b/packages/admin-sdk/src/_private/payment/index.ts @@ -93,7 +93,9 @@ export const addPaymentIframe = async ( shopUrl = options.shopUrl || ''; shopPlan = options.shopPlan || ''; } - const link = `${baseUrl}/payment?service-name=${name}&service-version=${version}&shop-url=${shopUrl}&sw-version=${options.swVersion}&sw-user-language=${options.swUserLanguage}&shop-plan=${shopPlan}`; + + const shopId = await context.getShopId(); + const link = `${baseUrl}/payment?service-name=${name}&service-version=${version}&shop-url=${shopUrl}&sw-version=${options.swVersion}&sw-user-language=${options.swUserLanguage}&shop-plan=${shopPlan}&shop-id=${shopId ?? ''}`; const iframeEl = document.createElement('iframe'); iframeEl.width = '100%'; iframeEl.height = '100%';